上个月我编写的代码利用线程从树莓摄像机获取图像。线程似乎工作得很好,因为它允许快速获取,但扩展代码以接收队列一直是一个挑战。在寻求帮助的同时,我遇到了这个thread,其中概述了线程的优缺点。看起来虽然线程有效,但它有其局限性。这导致我post突出显示如何使用多处理和opencv捕获以及一些github code突出显示多处理是覆盆子pi上图像采集的最佳方法。
问题是许多可用的代码示例似乎对我不起作用。这是我试图使用的一个例子。我使用spyder进行编程,当在ipython控制台中运行时,此代码不会显示任何内容。
import cv2
import multiprocessing as mp
def camera1():
global cap1
cap1 = cv2.VideoCapture(0)
while True:
_, frame1 = cap1.read()
cv2.imshow('frame1', frame1)
k = cv2.waitKey(5)
if k == 27:
break
cap1.release()
def cap_images():
_, img1 = cap1.read()
cv2.imwrite("Image1.png", img1)
if __name__ == '__main__':
p1 = mp.Process(target=camera1)
p1.start()
尝试通过控制台运行代码会导致此错误
'multiprocessing' has no attribute 'Process'
接收此错误很奇怪,因为当我导入多处理并执行命令时,Process就是其中之一。
多处理如何工作的一个很好的例子是什么?我应该坚持使用多线程(考虑到我在树莓派上运行它,一个优点是内存占用少)