当前位置:   article > 正文

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

连接网络相机 两帧之间 sleep

我有一个简单的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错误消息发生在读取前几帧之后。例如,我可以启动我的脚本,这几乎会立即触发这些错误,但是我的脚本可以在“无限”的时间内正常运行,而不会出现任何错误消息。在

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/280337
推荐阅读
相关标签
  

闽ICP备14008679号