python读取网络摄像头的帧_是否可以并行读取网络摄像头帧?

本文探讨了一种尝试通过OpenCV并行读取网络摄像头帧的Python脚本,以提高处理速度。作者遇到的问题是,虽然单线程能以3FPS稳定读取,但CPU资源未充分利用。尝试使用多线程读取导致‘VIDIOC_QBUF: Invalid argument’错误,并使生成的视频文件损坏。尽管如此,脚本在启动后的一段时间内仍能无错运行。作者寻求解决方案以优化并行读取过程。
摘要由CSDN通过智能技术生成

我有一个简单的Python脚本,它使用OpenCV捕获网络摄像头。^{3fps}我只能读30帧流,但我不能读。当运行脚本时,我的一个CPU内核被最大化为100%,但其余的核心都是未被触及的,所以我试图将读取的数据分成尽可能多的线程,以便最大限度地利用我的CPU,轻松地达到30 FPS。在

那么,是否可以并行读取网络摄像头帧?在

这是我的尝试:import numpy as np

import cv2

import time

from threading import Thread

CV_CAP_PROP_FPS = 5

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'MJPG')

out = cv2.VideoWriter('output.avi', fourcc, cap.get(CV_CAP_PROP_FPS), (640, 480))

threads = []

class MyThread(Thread):

def run(self):

ret, frame = cap.read()

if __name__ == '__main__':

try:

while(cap.isOpened()):

thread = MyThread()

thread.start()

threads.append(thread)

time.sleep(0.035)

except keyboardInterrupt:

for thread in threads:

thread.join()

cap.release()

out.release()

当运行这个脚本时,我在我的终端中得到两个VIDIOC_QBUF: Invalid argument(通常4次)。睡眠值越大,收到的错误消息就越少。例如,如果我time.sleep(0.1),我可能会得到2-3条错误消息,而不是4条。在

这是有问题的,因为在我的脚本的第二部分中生成的视频文件(没有在这里发布)已损坏。此错误仅在并行读取网络摄像头源时发生。当按顺序执行所有操作时,视频文件很好,我可以毫无问题地读取它。在

任何洞察力都是值得赞赏的。干杯!在

编辑:

我认为还需要注意的是,VIDIOC_QBUF: Invalid argument错误消息发生在读取前几帧之后。例如,我可以启动我的脚本,这几乎会立即触发这些错误,但是我的脚本可以在“无限”的时间内正常运行,而不会出现任何错误消息。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值