Warm tip: This article is reproduced from serverfault.com, please click

python-从命令行运行脚本时,视频捕获失败

(python - Video Capture fails when script is run from the command line)

发布于 2020-11-27 10:59:55

我在此设备上广泛使用了适用于Python的OpenCV,而从未遇到过此问题。我正在运行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\1\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\1\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\1\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\1\pip-req-build-h4wtvo23\o
pencv\modules\videoio\src\cap_msmf.cpp (435) `anonymous-namespace'::SourceReader
CB::~SourceReaderCB terminating async callback

我已尝试使用“ cv2.CAP_DSHOW”提出一些修复建议,尽管它删除了警告,但返回的所有内容都是黑框。

Questioner
Alex
Viewed
0
Alex 2020-11-28 21:18:36

我解决了这个问题,原来是卡巴斯基反病毒软件将网络摄像头访问视为一种威胁,这种情况只有在从终端执行时才发生。

此处提供了johncasey的回答: 网络摄像头+ Open CV Python | 黑屏

从卡巴斯基报告中可以清楚地看到,脚本文件被标记并被限制,返回黑框或完全阻止OpenCV运行。我将script.py从“主机入侵防护”下的“受限制的”类别中移至“受信任的”,这解决了该问题。

卡巴斯基主机入侵防护

这也解释了与MSMF有关的警告。