RDK X5 无法同时读取2个USB摄像头画面

1、硬件环境:RDK X5

2、系统软件版本:地平线镜像:rdk_os_3.2.3

3、问题涉及的技术领域:硬件-USB摄像头

4、目标:在rdk x5设备上同时采集两个USB摄像头的图像(在不 release cv2.VideoCapture 对象的情况下)

5、问题描述:只能采集一个摄像头的图像,后采集的摄像头无读取内容

6、复现概率:必现

7、测试方法:

板端运行:

import cv2
import time

if __name__ == '__main__':
    camera_list = []
    for i in range(4):
        cap = cv2.VideoCapture(i)
        if cap.isOpened():
            camera_list.append(i)
            cap.release()

    cam1 = cv2.VideoCapture(camera_list[0])
    cam2 = cv2.VideoCapture(camera_list[1])

    while True:
        ret1, frame1 = cam1.read()

        if ret1:
            cv2.imwrite("camera 1.jpg", frame1)
            print("camera 1.jpg 已保存")
        else:
            print("camera 1 未能读取内容")

        ret2, frame2 = cam2.read()
        if ret2:
            cv2.imwrite("camera 2.jpg", frame2)
            print("camera 2.jpg 已保存")
        else:
            print("camera 2 未能读取内容")

        print("-----------")
        time.sleep(2)

结果:


运行前已通过 rmmod uvcvideo;modprobe uvcvideo quirks=128 修改了带宽

电脑上运行则无此问题

  1. 在X3或X5上调用两个USB摄像头无法取到图像数据

你好,X3和X5的USB口是通过一个USB3.0接口hub出来的,第一个USB摄像头作为一个UVC设备会在声明时占掉所有的带宽,从而第二个摄像头在声明时就会取不到图像数据,需要使用modprobe uvcvideo quirks=128 命令限制 uvcvideo带宽占用,同时也要测试两路USB摄像头取流的图像不会超过一个USB 3.0的总带宽,推荐的图像数据是MJPEG@720p左右。

USB摄像头的详细使用请参考RDK手册:https://developer.d-robotics.cc/rdk_doc/Basic_Application/Image/usb_camera