带有两个网络摄像头的 Raspberry pi 4

问题描述

我正在尝试使用 raspbian 操作系统在 raspBerry pi 4 上运行两个网络摄像头。它很少在非常低的 FPS 下工作。大多数时候我都会收到此错误

[ WARN:0] global /tmp/pip-wheel-qd18ncao/opencv-python/opencv/modules/videoio/src/cap_v4l.cpp (1004) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout. No more frames

我从操作系统中删除了 uvcvideo 模块,然后我用新参数安装了它:

sudo rmmod uvcvideo
sudo modprobe uvcvideo nodrop=1 timeout=5000 quirks=0x80

相机运行速度很快,但在一台相机上存在问题: Two camera problem on Raspberry pi 4

如果我一一运行相机,就没有问题。不过我觉得还是慢了。

我需要同时运行两个摄像头,我该如何解决

我使用最新版本的 Raspbian: 带桌面的树莓派操作系统 发布日期:2021 年 5 月 7 日

相机:Microsoft LifeCam Studio - 型号:1425 (我之前用过两个便宜的相机也遇到了同样的问题)

我通过 USB 3.0 端口连接它们

我正在使用 python3 和 opencv 用我的代码同时拍摄一些照片:

我的代码

import cv2

# Set the values for your cameras
capL = cv2.VideoCapture(2)
capR = cv2.VideoCapture(0)    

# Use these if you need high resolution.
capL.set(cv2.CAP_PROP_FRAME_WIDTH,640) # width
capL.set(cv2.CAP_PROP_FRAME_HEIGHT,480) # height

capR.set(cv2.CAP_PROP_FRAME_WIDTH,640) # width
capR.set(cv2.CAP_PROP_FRAME_HEIGHT,480) # height    

i = 1

def main():
    global i

    while True:
        # Grab and retreive for sync
        
        if not (capL.grab() and capR.grab()):
            print("No more frames")
            break            

        _,leftFrame = capL.retrieve()
        _,rightFrame = capR.retrieve()

        cv2.imshow('capL',leftFrame)        
        cv2.imshow('capR',rightFrame)

        key = cv2.waitKey(1)
        if key == ord('q'):
            break
        elif key == ord('c'):
            cv2.imwrite("left/" + str(i) + ".png",leftFrame)
            cv2.imwrite("right/" + str(i) + ".png",rightFrame)
            i += 1

    capL.release()
    capR.release()
    cv2.destroyAllWindows()    

if __name__ == '__main__':
    main()

更新:我发现问题出在 USB 带宽上。我将这个神奇的 2 行代码添加到我的程序中,并且它起作用了!

capL.set(cv2.CAP_PROP_FPS,10)
capL.set(cv2.CAP_PROP_FPS,10)

是的,10 FPS 非常低,但对我来说已经足够了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)