问题描述
问题描述:第一种算法从相机捕获流视频,有时从中输出一帧。输出之间的时间不同且不可预测。输出应传递给第二个算法,处理图像并保存结果。而第一个算法继续捕获流视频并在条件下输出帧。
如何解决这个问题?
我可以通过 while (cap.isOpened()):
保持第一个算法运行,但是当输出和第二个算法开始时它会“暂停”。
解决方法
您可以使用多处理模块,然后使用队列在不同进程之间移动帧。
创建一个队列 q。 使用输入参数 q 创建进程 p。 在主进程中读取帧并附加到 q。 在 p 中,不断检查 q,只要不是空的,就可以从中读取并运行您的算法。 类似于下面的代码,但根据您的用例进行编辑。
from multiprocessing import Process,Queue
def do_your_thing(myQ):
while True:
data = myQ.get()
if data is not None:
# your algorithm runs here
q = Queue()
p = Process(target=do_your_thing,args=(q,))
p.start()
# your stream reading code
while True:
frame = camera.read()
q.put(frame)