import multiprocessing
import cv2
def cam_loop(namespace, event):
cap = cv2.VideoCapture(0)
while True:
_ , img = cap.read()
if img is not None:
namespace.value = img
event.set()
def show_loop(the_q, event):
cv2.namedWindow('pepe')
while True:
event.wait()
from_queue = namespace.value
cv2.imshow('pepe', from_queue)
k = cv2.waitKey(1)
if k == ord('q') or k == 27:
break
if __name__ == '__main__':
logger = multiprocessing.log_to_stderr()
logger.setLevel(multiprocessing.SUBDEBUG)
mgr = multiprocessing.Manager()
namespace = mgr.Namespace()
event = multiprocessing.Event()
cam_process = multiprocessing.Process(target=cam_loop,args=(namespace, event))
cam_process.start()
show_process = multiprocessing.Process(target=show_loop,args=(namespace, event))
show_process.start()
cam_process.join()
show_process.join()
Difficult to say what is the performance compared with pipes or queues.
The cpu usage is high, 70+% if you sum up all processes, and I'm not even doing any image processing, nor gui.
I'm beginning to wonder if the multiprocessing via is going to be suitable for the core aspects of behave.
Next: bring Tkinter into this multiprocessing-opencv-webcam-capture scenario.

No comments:
Post a Comment