下面的openCV代码抓取来自两个摄像头的同时图像。它在Windows中工作正常,相机都连接到一个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
答案 0 :(得分:1)
问题可能在于,摄像机在其Windows驱动程序中运行某种视频压缩,而它们可能在Linux中以未压缩的速度运行 - 数据速率更高。
如果是这种情况,那么您可能需要将它们放在不同的USB 总线上,以使它们在Linux中同时工作。这可能需要您在系统中添加PCI或PCIe USB卡 - 许多主板只能实现一个USB2.0高速总线。
答案 1 :(得分:1)
我的网络摄像头(LifeCam Cinema)存在USB带宽问题,并使用uvcvideo驱动程序的FIX_BANDWIDTH quirk解决了这个问题。有关使用quirk的详细信息,请参阅此answer。
如果没有怪癖,我试过一些USB主机控制器,两个LifeCams工作(每个控制器);对于其他人,只有一个。这是我的一台机器视觉机器中的控制器:
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
(英特尔和ASMedia控制器在主板上,VIA在PCIe卡上。)没有怪癖,每个ASMedia控制器只支持一个LifeCam。
答案 2 :(得分:0)
您是否可以将网络摄像头配置为使用较低的分辨率或帧速率,从而减少带宽?