使用相机进行排队和线程

时间:2017-08-18 07:05:13

标签: python multithreading opencv data-structures

我在python中使用了2个线程,并且我有一个大小为1000的全局队列。

  1. 用于从相机中抓取帧 - FrameGrabber Thread

    在这个帖子中,我使用OpenCV从相机中抓取帧并将其推入全局队列。相机以300 fps的速度工作,这意味着每3.3毫秒的线程捕获帧。

    #Global queue
    frames = Queue.Queue(1000)
    
    class FrameGrabber(threading.Thread):
        def __init__(self, source):
             threading.Thread.__init__(self)
    
             self.ID = source
             self.cam = cv2.VideoCapture( source )
    
        def run(self):
             global frames
             ret, frame = self.cam.read()
             frames.put(frame)
    
  2. 用于处理抓取的帧 - 处理器线程

    在这个帖子中,我从队列中获取帧并进行一些处理,然后继续。一帧的处理接近4毫秒

    class Processor(threading.Thread):
        def __init__(self, source):
             threading.Thread.__init__(self)
    
        def run(self):
              global frames
              self.current_frame = frames.get()
              # Do some Processing
    
  3. 我遇到了这个实现的问题

    • 我可以看到处理器线程中缺少一些帧。我们怀疑当处理器线程访问队列时,队列被锁定,这会延迟FrameGrabber线程将帧放入队列。

    问题: 什么是最适合此方案的数据结构? 我不想理想地从相机中丢失任何帧。

0 个答案:

没有答案