【问题标题】:Video Capture fails when script is run from the command line从命令行运行脚本时视频捕获失败
【发布时间】:2021-03-10 04:04:39
【问题描述】:

我已在此设备上广泛使用 OpenCV for Python,但从未遇到过此问题。我正在运行 Windows 8.1 Pro x64。我在两个不同的网络摄像头上遇到了同样的问题。

当我使用多处理将脚本迁移到不同的进程时,我首先遇到了这个问题。 (OpenCV 仅在一个进程中运行,带有一个网络摄像头)。我担心像其他一些模块一样,这是 OpenCV 在不同的环境中运行,但无论如何我只遇到了多线程的问题。似乎与此无关,而是我现在从命令行执行整个程序的事实。

如果我在 python IDLE 或命令行 IDLE 中使用下面的 Video Capture 对象运行基本脚本,它会正常运行。我用于 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”修复一些建议,虽然它删除了警告,但我得到的只是一个黑框。

【问题讨论】:

  • 抱歉,sn-p 只是要点,我已经用实际的脚本内容更新了它。
  • 抱歉,帮不上忙。我无法重现您的问题,在 Windows 上运行良好。试试看这个:stackoverflow.com/questions/59371075/… 或者这个answers.opencv.org/question/212468/…
  • 感谢您的尝试。不幸的是,其中任何一个都没有运气。
  • 可能是配置或第 3 方库安装问题。检查您的 cmake 以获取正确编译的 3rd 方库。并检查它们是否兼容

标签: python windows opencv cmd python-multiprocessing


【解决方案1】:

我解决了这个问题,原来是卡巴斯基杀毒软件将网络摄像头访问作为威胁,仅在从终端执行时才会发生。

感谢 johncasey 的回答: Webcam + Open CV Python | Black screen

从卡巴斯基报告中可以清楚地看出,脚本文件被标记并受到限制,返回黑框或完全阻止 OpenCV 运行。我将 script.py 从“Host Intrusion Protection”下的“Low Restricted”类别移到“Trusted”,这解决了这个问题。

Kasperky Host Intrusion Protection

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

【讨论】:

    猜你喜欢
    • 2019-05-24
    • 2011-10-03
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2016-12-11
    • 2017-12-07
    相关资源
    最近更新 更多