Python opencv и многопроцессорность

Я хочу использовать многопроцессорный модуль для python, чтобы создать один процесс, который постоянно опрашивает веб-камеру через интерфейс python opencv, отправляя любые полученные изображения в очередь, из которой другие процессы могут получить к ним доступ. Однако я сталкиваюсь с зависанием (python 2.7 в Ubuntu 12.04) всякий раз, когда пытаюсь что-либо сделать с изображениями, полученными другими процессами из очереди. Вот минимальный пример:

import multiprocessing
import cv

queue_from_cam = multiprocessing.Queue()

def cam_loop(queue_from_cam):
    print 'initializing cam'
    cam = cv.CaptureFromCAM(-1)
    print 'querying frame'
    img = cv.QueryFrame(cam)
    print 'queueing image'
    queue_from_cam.put(img)
    print 'cam_loop done'


cam_process = multiprocessing.Process(target=cam_loop,args=(queue_from_cam,))
cam_process.start()

while queue_from_cam.empty():
    pass

print 'getting image'
from_queue = queue_from_cam.get()
print 'saving image'
cv.SaveImage('temp.png',from_queue)
print 'image saved'

Этот код должен выполняться до распечатки «сохранения изображения», но затем зависать. Есть идеи, как это исправить?

9
задан Mike Lawrence 2 June 2012 в 13:05
поделиться