【发布时间】:2020-03-24 22:27:36
【问题描述】:
我在 python 上使用 opencv,我遇到了cv2.VideoCapture.read() 函数卡住的问题。这是一些原型代码:
requirements.txt
opencv-contrib-python==4.1.1.26
应用程序.py
import cv2
def run_analysis(path_to_video):
vs = cv2.VideoCapture(path_to_video)
while True:
frame = vs.read()
if frame is None:
break
do_stuff_with_frame(frame)
vs.release()
这段代码在我的 Mac 上一直有效。它仅在我将其作为 Flask 应用程序部署到 Elastic Beanstalk(在 Red Hat Linux 上运行)时才第一次工作。 我在 github 问题中看到了一些内容,这些内容可能表明 vs.release() 无法释放文件指针,或者存在内存泄漏,但我对这些概念不太熟悉。
即使我无法得到原因的答案,我也会很高兴以蛮力的方式让它发挥作用。
【问题讨论】:
-
首先您应该尝试自己重现问题,方法是镜像客户的环境。然后,确定错误,它发生在哪里。如果您无法反映环境,您应该尝试让您的客户为您测试,通过给他代码,您可以通过简单的打印(或类似的)替换
do_stuff_with_frame(frame),以确保它在您的处理中没有问题,但实际上与文件或捕获功能有关。还是您已经知道它在 vs.release 调用中冻结了? -
它不会在发布时冻结。它在后续调用 vs.read 时冻结。其他消息来源表明 vs.release 之前失败了。重置它的唯一方法是杀死烧瓶应用程序并重新启动它。无论如何,我从 Elastic Beanstalk 切换到了我相信使用 ubuntu 的 Heroku。我没有这个问题了,所以我真的不需要答案。 (但仍会因解决该问题的答案而获奖)
标签: python opencv video video-streaming streaming