The Caltech pedestrian dataset contains a special format videos. The following program converts them to normal video format files. The extension of the generated file is ".avi", but ".mpg" can also be used (can be rewritten).
The usage when the program below is stored in file "caltechVideo.py" is as follows. This invocation converts a video file 'V000' in directory 'set00' to an AVI file in directory 'Images'.
import caltechVideo caltechVideo.genVideo('set00', 'V000')
### Generate an AVI file from Caltech Dataset ### import cv2, cv, time, struct import Image, utils, random, os, gzip import numpy as np def createPedestrianWriter(outFile, width, height): writer = cv2.VideoWriter() writer.open(outFile, cv.CV_FOURCC('P','I','M','1'), fps = 30, frameSize = (width, height), isColor = False) return writer def genVideo1(inFile, outFile): def read_header(ifile): feed = ifile.read(4) norpix = ifile.read(24) version = struct.unpack('@i', ifile.read(4)) length = struct.unpack('@i', ifile.read(4)) assert(length != 1024) descr = ifile.read(512) params = [struct.unpack('@i', ifile.read(4))[0] for i in range(0,9)] fps = struct.unpack('@d', ifile.read(8)) # skipping the rest ifile.read(432) image_ext = {100:'raw', 102:'jpg', 201:'jpg', 1:'png', 2:'png'} return {'w':params[0], 'h':params[1], 'bdepth':params[2], 'ext':image_ext[params[5]], 'format':params[5], 'size':params[4], 'true_size':params[8], 'num_frames':params[6]} print('From {} to {}'.format(inFile, outFile)) params = read_header(open(inFile, 'rb')) bytes = open(inFile, 'rb').read() writer = createPedestrianWriter(outFile, 640, 480) # this is freaking magic, but it works extra = 8 s = 1024 seek = [0]*(params['num_frames']+1) seek[0] = 1024 # print("Params:{0}".format(params)) #!!!!!! for i in range(0, params['num_frames']-1): ##!!! why -1? tmp = struct.unpack_from('@I', bytes[s:s+4])[0] s = seek[i] + tmp + extra if i == 0: val = struct.unpack_from('@B', bytes[s:s+1])[0] if val != 0: s -= 4 else: extra += 8 s += 8 seek[i+1] = s nbytes = struct.unpack_from('@i', bytes[s:s+4])[0] # print("Frame:{0} seek:{1}".format(i, s)) I = bytes[s+4:s+nbytes] tmp_file = '/tmp/img{0}_{1}.jpg'.format(os.getpid(), i) open(tmp_file, 'wb+').write(I) img = cv2.cvtColor(cv2.imread(tmp_file), cv2.COLOR_BGR2GRAY) writer.write(img) return def genVideo(dir, name): inFile = dir + '/' + name + '.seq' outFile = 'Images/' + dir + '_' + name + '.avi' genVideo1(inFile, outFile)