Ale*_*are 6 python video streaming opencv video-streaming
我在 python 上使用 opencv,但cv2.VideoCapture.read()遇到函数卡住的问题。下面是一些原型代码:
要求.txt
opencv-contrib-python==4.1.1.26
Run Code Online (Sandbox Code Playgroud)
应用程序.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()
Run Code Online (Sandbox Code Playgroud)
这段代码在我的 mac 上一直有效。它仅在我第一次将其作为 Flask 应用程序部署到 Elastic Beanstalk(在 Red Hat Linux 上运行)时才有效。我在 github 问题中看到一些可能表明 vs.release() 无法释放文件指针,或者存在内存泄漏的东西,但我对这些概念不太了解。
即使我无法得到原因的答案,我也会很高兴以一种蛮力的方式让它发挥作用。
根据openCV 网站
如果没有捕获任何帧(相机已断开连接,或者视频文件中没有更多帧),则方法返回 false 并且函数返回 NULL 指针。
您可以在测试“无”后测试“框架”是否为假。如果有疑问,“打印(框架)”
编辑:
我刚刚意识到您跳过了打开文件的最重要步骤。需要检查它是否用 isOpened() 打开
vs = cv2.VideoCapture(path_to_video)
if not vs.isOpened():
print("Error: Could not open file: %s" % (path_to_video))
return
........
Run Code Online (Sandbox Code Playgroud)
编辑:试试这个代码。通过扩展,vs.read()它返回的内容变得更加清晰。
import cv2
def do_stuff_with_frame(image):
pass
def run_analysis(path_to_video):
vs = cv2.VideoCapture(path_to_video)
if not vs.isOpened():
print("Error: Could not open file: %s" % (path_to_video))
return
while True:
retval, image = vs.read()
if not retval:
print("Video file finished. Total Frames: %d" % (vs.get(cv2.CAP_PROP_FRAME_COUNT)))
break
do_stuff_with_frame(image)
vs.release()
# START OF PROGRAM
if __name__ == "__main__":
run_analysis("test.mov")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5611 次 |
| 最近记录: |