是否可以在 Ubuntu 18.04 上使用 cv2.Videocapture 访问索引大于 7 的视频设备?

问题描述

目前正在尝试使用 10 个 USB 摄像头同时捕获 10 个图像,这些摄像头连接到 RaspBerry Pi 4(通过板载 USB 端口和 USB 集线器)并安装了 Ubuntu 18.04。我正在使用多线程方法来创建多个将捕获照片的相机对象。我目前为 4 个摄像头工作(这上升到 /dev/video7,每个物理摄像头占用 2 个设备索引。

我目前遇到的问题是访问索引大于 7 的任何相机设备(不会访问 5 或更高的物理相机)。我目前收到以下错误

“视频错误:V4L:索引 8 不正确!”

它与位于 modules/videoio/src/cap_v4l.cpp 中的 opencv_3.4.1 源文件相关联。在此源文件中,它提到它已针对多达 8 个输入进行了测试,是否有人设法获得超过 8 个输入设备来使用 RaspBerry Pi 拍摄照片?

我还会添加一些我已经尝试过的调试信息。

  • 将#define MAX_CAMERAS 8(位于 cap_v4l.cpp)更改为更大的值并重建 opencv 模块,但它没有影响。
  • 我还尝试过单独访问设备索引大于 7 的任何相机,但它仍然存在。
  • 我设法在 ROS melodic 上使用 usb_cam 访问这些摄像头,因此它们可以正常工作和连接。如果可能的话,我更愿意通过 opencv-python 进行这项工作,但如果没有解决方案,我将探索一种 ROS 方法解决该任务。

感谢任何帮助或建议,谢谢。

解决方法

经过无休止的调试后,我找到了一种变通方法,该方法允许我使用索引高于 7 的相机捕获图像。在下面的第一行代码上创建 VideoCapture() 对象后,这会导致 VIDEOIO 错误仍然发生。在此之后,我检查相机是否正确打开,如果没有,我再次打开相机继续工作。

    self.cam = cv2.VideoCapture(camID)
    if(self.cam.isOpened() is False):
        self.cam.open("/dev/video" + str(camID))