当命令行中的脚本为 运行 时,视频捕获失败
Video Capture fails when script is run from the command line
我已在此设备上广泛使用 OpenCV Python,但从未遇到过此问题。我是 运行ning Windows 8.1 Pro x64。我在两个不同的网络摄像头上遇到了同样的问题。
当我将脚本迁移到具有多处理功能的不同进程时,我第一次遇到了这个问题。 (OpenCV 仅在一个进程中运行,带有一个网络摄像头)。我担心像其他一些模块一样,这是 OpenCV 在不同的环境中扮演 运行,但无论如何我只遇到过多线程问题。似乎与此无关,而是我现在从命令行执行整个程序的事实。
如果我 运行 在 python IDLE 或命令行 IDLE 中使用下面的视频捕获对象的基本脚本,它 运行 是正常的。我的 python 的 ENV PATH 签出了与 3.8.
相同的安装
import cv2
cap = cv2.VideoCapture(0)
running, _ = cap.read()
while running:
running, frame = cap.read()
cv2.imshow("Feed", frame)
key = cv2.waitKey(1)
if key & 0xFF == ord("q"):
running = False
cap.release()
cv2.destroyAllWindows()
但是,如果我使用这些内容创建一个名为 'test.py' 的脚本,并在终端 运行 它,我会收到一系列错误并且无法打开网络摄像头。
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\...\scripts>test.py
[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (373) `anonymous-namespace'::SourceReader
CB::OnReadSample videoio(MSMF): OnReadSample() is called with error status: -214
7024891
[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (385) `anonymous-namespace'::SourceReader
CB::OnReadSample videoio(MSMF): async ReadSample() call is failed with error sta
tus: -2147024891
[ WARN:1] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (912) CvCapture_MSMF::grabFrame videoio(M
SMF): can't grab frame. Error: -2147024891
[ WARN:1] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (435) `anonymous-namespace'::SourceReader
CB::~SourceReaderCB terminating async callback
我已经尝试了 'cv2.CAP_DSHOW' 中一些建议的修复,虽然它删除了警告,但我得到的只是一个黑框。
我解决了这个问题,原来是卡巴斯基反病毒软件将网络摄像头访问视为威胁,只有在从终端执行时才会发生。
感谢 johncasey 在此处的回答:
Webcam + Open CV Python | Black screen
从卡巴斯基报告中可以清楚地看出,脚本文件被标记并受到限制,返回黑框或完全阻止 OpenCV 运行。我将 script.py 从 'Host Intrusion Protection' 下的 'Low Restricted' 类别移至 'Trusted',这解决了问题。
Kasperky Host Intrusion Protection
这也解释了现在与 MSMF 相关的警告。
我已在此设备上广泛使用 OpenCV Python,但从未遇到过此问题。我是 运行ning Windows 8.1 Pro x64。我在两个不同的网络摄像头上遇到了同样的问题。
当我将脚本迁移到具有多处理功能的不同进程时,我第一次遇到了这个问题。 (OpenCV 仅在一个进程中运行,带有一个网络摄像头)。我担心像其他一些模块一样,这是 OpenCV 在不同的环境中扮演 运行,但无论如何我只遇到过多线程问题。似乎与此无关,而是我现在从命令行执行整个程序的事实。
如果我 运行 在 python IDLE 或命令行 IDLE 中使用下面的视频捕获对象的基本脚本,它 运行 是正常的。我的 python 的 ENV PATH 签出了与 3.8.
相同的安装import cv2
cap = cv2.VideoCapture(0)
running, _ = cap.read()
while running:
running, frame = cap.read()
cv2.imshow("Feed", frame)
key = cv2.waitKey(1)
if key & 0xFF == ord("q"):
running = False
cap.release()
cv2.destroyAllWindows()
但是,如果我使用这些内容创建一个名为 'test.py' 的脚本,并在终端 运行 它,我会收到一系列错误并且无法打开网络摄像头。
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\...\scripts>test.py
[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (373) `anonymous-namespace'::SourceReader
CB::OnReadSample videoio(MSMF): OnReadSample() is called with error status: -214
7024891
[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (385) `anonymous-namespace'::SourceReader
CB::OnReadSample videoio(MSMF): async ReadSample() call is failed with error sta
tus: -2147024891
[ WARN:1] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (912) CvCapture_MSMF::grabFrame videoio(M
SMF): can't grab frame. Error: -2147024891
[ WARN:1] global C:\Users\appveyor\AppData\Local\Temp\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (435) `anonymous-namespace'::SourceReader
CB::~SourceReaderCB terminating async callback
我已经尝试了 'cv2.CAP_DSHOW' 中一些建议的修复,虽然它删除了警告,但我得到的只是一个黑框。
我解决了这个问题,原来是卡巴斯基反病毒软件将网络摄像头访问视为威胁,只有在从终端执行时才会发生。
感谢 johncasey 在此处的回答: Webcam + Open CV Python | Black screen
从卡巴斯基报告中可以清楚地看出,脚本文件被标记并受到限制,返回黑框或完全阻止 OpenCV 运行。我将 script.py 从 'Host Intrusion Protection' 下的 'Low Restricted' 类别移至 'Trusted',这解决了问题。
Kasperky Host Intrusion Protection
这也解释了现在与 MSMF 相关的警告。