#!/usr/bin/env python from threading import Thread from Queue import Full, Queue from Frame import Frame from CVtypes import cv from time import time, sleep from common import * import os class ImageProducer(Thread): def __init__(self, name, job_queue): Thread.__init__(self, name=name) self.job_queue = job_queue; class VideoPlay(ImageProducer): pass # pathImage = '/Volumes/MPLSAN2/RAID4/Rutgers/bmps/sub10/'; # for strFile in os.listdir(pathImage)[:100]: # job_queue.put(pathImage+'/'+strFile); class VideoCapture(ImageProducer): def __init__(self, name, job_queue, delay=0, maxqsize=0): ImageProducer.__init__(self, name, job_queue) self.capture=cv.CreateCameraCapture(0); self.delay = delay; self.lastCap = time(); self.maxqsize = maxqsize self.rate = Rate() def run(self): self.nextLoop = True; while self.nextLoop: if time()-self.lastCap > self.delay: self.lastCap = time() if self.job_queue.qsize() < self.maxqsize or self.maxqsize==0: try: frame=Frame(cv.QueryFrame(self.capture)) self.job_queue.put(frame) self.rate.updateRate() except Full: print 'queue full(overflow)' sleep(0.1); else: print 'queue full, drop 0.1s frames (reach maxqsize %d)' % self.maxqsize sleep(0.1); else: #delay: wait longer sleep(0.1); if __name__ == '__main__': testQ = Queue(0) thd=VideoCapture('test', testQ) thd.start() thd.join()