Python 可执行文件中的 OpenCV 流视频错误

Python OpenCV stream video error in executable

在我的 python 应用程序中,我使用 OpenCV 等从 IP 摄像机流式传输视频:

cap = cv2.VideoCapture("http://usr:psw@192.168.1.1/video.cgi")

一切正常。

但是我需要获取一个可执行文件,所以我使用了PyInstaller。在结果 .exe 中,流不再工作。

相反,如果我用这个改变捕获:

# works with camera_num = 0 (pc's webcam) and = 1 (external USB webcam)
cap = cv2.VideoCapture(camera_num)

从我电脑的网络摄像头或外部 USB 网络摄像头捕捉,一切正常。

有什么建议吗?

感谢@GPPK 和@Dan Mašek 的评论,我可以解决问题。

问题是,正如@Dan Mašek 所说,"FFMPEG is not a hard dependency"。

所以一个解决方案是搜索OpenCV的FFMPEG dll。从 cosnole 启动 python

# import OpenCV module
import cv2
# retrieve the pathname of the file from which the module was loaded
cv2.__file__

输出应该是这样的:

'C:\Users\luke\AppData\Local\Programs\Python\Python36\lib\site-packages\cv2\cv2.cp36-win_amd64.pyd'

转到 cv2 文件夹,搜索 opencv_ffmpeg340_64.dll 并将其复制到 python 应用程序的文件夹。

现在我们必须告诉 PyInstaller 将此 dll 添加到 .exe:

pyinstaller -F --add-data "opencv_ffmpeg340_64.dll;." test.py