两个网络摄像头在一个usb 2.0集线器-工作在windows,但不linux



下面的openCV代码从两个相机获取同时的图像。它在窗口上运行良好,摄像头都连接在一个usb 2.0集线器上。当我在linux中尝试相同的代码时,它一次只有一个相机足够的带宽。我也试过用guvcview一次查看两个流,同样的问题。我需要的是某种方法来强制网络摄像头一起工作,可能通过设置驱动程序请求的带宽量。

capture = cv.CaptureFromCAM(0)
capture2 = cv.CaptureFromCAM(1)
while True: 
    frame = cv.QueryFrame(capture)
    frame2 = cv.QueryFrame(capture2)
    cv.ShowImage("w1", frame)
    cv.ShowImage("w2", frame2)    
    if cv.WaitKey(10) != -1:
        break

我也有网络摄像头(LifeCam Cinema)的USB带宽问题,并通过使用uvcvideo驱动程序的FIX_BANDWIDTH quirk来解决它。

没有怪癖,对于我尝试过的一些USB主机控制器,两个lifecam工作(每个控制器);对其他人来说,只有一个。这是我的一台机器视觉机器的控制器:

uli@KL04:~$ lspci | grep USB
00:1a.0 USB controller: Intel Corporation C600/X79 series chipset USB2 Enhanced Host Controller #2 (rev 06)
00:1d.0 USB controller: Intel Corporation C600/X79 series chipset USB2 Enhanced Host Controller #1 (rev 06)
03:00.0 USB controller: VIA Technologies, Inc. Device 3483 (rev 01)
0a:00.0 USB controller: ASMedia Technology Inc. Device 1142
0b:00.0 USB controller: ASMedia Technology Inc. Device 1142

(Intel和ASMedia控制器在主板上,VIA在PCIe卡上)没有quirk,每个ASMedia控制器只支持一个LifeCam。

问题可能是相机在windows驱动程序中运行某种视频压缩,而它们可能在Linux中以更高的数据速率运行未压缩的视频。

如果是这种情况,那么您可能需要将它们放在不同的USB 总线上以使它们在Linux中同时工作。这可能需要您在系统中添加PCI或PCIe USB卡-许多主板只实现一个USB2.0高速总线。

您可以配置网络摄像头使用较低的分辨率或帧率,从而减少带宽吗?

最新更新