【问题标题】:Run a second algo if return from a first, while the first keep running all the time. Python [closed]如果从第一个返回,则运行第二个算法,而第一个一直运行。 Python [关闭]
【发布时间】:2021-07-01 22:20:13
【问题描述】:

问题描述:第一个算法从摄像头捕获流视频,有时会从中输出一帧。输出之间的时间不同且不可预测。输出应传递给第二个算法,处理图像并保存结果。而第一个算法继续捕获流视频并在条件下输出帧。

如何解决?

我可以通过while (cap.isOpened()): 保持第一个算法运行,但是当输出和第二个算法启动时它将被“暂停”。

【问题讨论】:

标签: python opencv image-processing computer-vision video-processing


【解决方案1】:

您可以使用多处理模块,然后使用队列在不同进程之间移动帧。

创建一个队列 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)

【讨论】:

  • 我不确定我是否完全理解了这个问题,但我认为这可能是前后矛盾的。我认为您正在读取相机中的每一帧并将每一帧都放入队列中,这是一个相当大的开销。我认为阅读和处理每一帧可能会更好,并且只将满足某些条件的帧放在队列中。我可能错了。
  • 我只是在向他展示如何在两个进程之间共享帧。此代码不可运行,它只是一个 sudo-code-ish 示例。
  • 非常感谢 aSaffary,即使它只是一个 sudo-code-ish 我掌握了这个想法并且知道现在该做什么!还有马克·塞切尔,我猜对了)
猜你喜欢
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多