我正在python上使用opencv,并且遇到了vidoestream.read()函数卡住的问题。这是一些原型代码:
requirements.txt
opencv-contrib-python==4.1.1.26
application.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()无法释放文件指针,或者存在内存泄漏,但是我不太了解这些概念。
即使我无法获得为什么的答案,我也对采用蛮力的方法感到满意。
根据openCV
web site
如果没有抓取任何帧(相机已断开连接,或者视频文件中没有其他帧),则方法返回false,函数返回NULL指针。
您可以在测试'无'后测试'frame'是否为假。如有疑问,请'print(frame)'