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

2024-06-25 05:20:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

如果我在python IDLE或命令行IDLE中使用下面的视频捕获对象运行基本脚本,它将正常运行。My ENV PATH for python签出到相同的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”,虽然它删除了警告,但我得到的只是一个黑色的框架


Tags: pipbuildlocalcv2globalrequsersappdata
1条回答
网友
1楼 · 发布于 2024-06-25 05:20:27

我解决了这个问题,原来是卡巴斯基防病毒公司将网络摄像头的访问视为威胁,只有在终端执行时才会发生这种情况

承蒙johncasey的回答: Webcam + Open CV Python | Black screen

从卡巴斯基报告中可以清楚地看到,脚本文件被标记并被限制,返回黑色帧或根本阻止OpenCV运行。我将script.py从“主机入侵保护”下的“低限制”类别改为“受信任”,这就解决了这个问题

Kasperky Host Intrusion Protection

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

相关问题 更多 >