我在这里遇到一些奇怪的问题。 简单地说,我试图从摄像头(Mercury 2.0网络摄像头嵌入式摄像头)抓取一个框架,但它并没有像预期的那样。
我在BeagleBone Black上运行Debian Jessie。 我已经安装了OpenCV 3.2并对其进行了测试,我的Vision算法与imread()工作正常,因此是时候开始使用相机了。 我遇到的第一个问题是相机无法在Ubuntu 16.04 minimal中工作。所以我切换到了Debian Jessie,现在我可以在不到一秒的时间内使用fswebcam(fswebcam -r 1600x1200 --jpeg 95 -D 0 test.jpg)抓取1600x1200帧,正如预期的那样。
当它工作时我感到非常高兴,所以我现在开始变得相当恼火,因为VideoCapture>> Mat没有像预期的那样工作。 这里是踢球者,如果我将分辨率设置为800x600,它可以正常工作。 当我将分辨率设置为1600x1200时,它首先给我选择超时,但随后立即获得成功结果。 所以,它能够抓住框架,但不是第一次尝试。在我看来,这是一个时间问题。所以我尝试使用grab()和retrieve(),但这似乎没有帮助。
其他人对此问题有一些好的想法/建议/提示或经验吗?
一些规格:
$ uname -a
Linux arm 4.9.13-bone4 #1 [date] armv7l GNU/Linux
$ gcc --version
gcc (Debian 4.9.2-10) 4.9.2
$ v4l2-ctl --all
Driver Info (not using libv4l2):
Driver name: uvcvideo
Card type: Mercury USB2.0 Camera
Bus info: usb-musb-hdrc.1.auto-1.1
Driver version: 4.9.13
$ fswebcam -r 1600x1200 --jpeg 95 -D 0 test.jpg
Opening /dev/video0
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Capturing frame...
Captured frame in 0.00 seconds.
Processing captured image...
Setting output format to JPEG, quality 95
Writing JPEG image to 'test.jpg'.
基本代码功能
VideoCapture cam(0);
cam.set(CAP_PROP_FRAME_WIDTH,width);
cam.set(CAP_PROP_FRAME_HEIGHT,height);
/*check cam.isOpened()*/
/*echo some camera properties*/
if(cam.grab()) cam.retrieve(frame);
imwrite(filename, frame);
cam.release();
另外,我试过了:
modprobe uvcvideo nodrop=1 timeout=6000
但这并没有帮助...... 我也尝试使用旧的CvCapture类,但这也没有帮助。
整天都在努力,并想出一些额外的事情: BeagleBone似乎很难插入和拔出USB设备。我想查看我拍的照片,所以我插上了我的USB闪存盘,安装它,卸下它,拿出来,欣赏这些照片。然后,即使使用fswebcam,相机也不会再工作了。不得不重新启动才能让它再次运行。
此外,使用fswebcam连续快速拍摄几张200万像素,似乎也会出现问题。有时我会拍几张照片,其他时间只需要一次,然后再重新启动。当我无法拍摄2MP照片时,我仍然可以拍摄800x600的照片。 简单地重新插入USB并没有帮助。
答案 0 :(得分:2)
对于处理同一问题的每个人(选择超时)。我为我的情况修好了,我不知道这对每个人都有用,但如果这有助于其他人,我会很高兴。
问题可能是因为您尝试使用的相机仅兼容半UVC。 UVC熟悉与UVC兼容的产品,实际上它们不是。所以他们添加了一些名为 quirks 的东西。 在此处详细了解:UVC FAQ
那么,如何修复选择超时?好吧,显然很容易。 首先,我们关闭uvcvideo模块
# rmmod uvcvideo
接下来我们再次启用它,但启用带宽quirk;并且以防万一添加nodrop和超时标志。
# modprobe uvcvideo quirks=128 nodrop=1 timeout=6000
如果您希望解决方案在重新启动后工作,请将这两行添加到.bash_profile
在彻底解决了这个问题后,我用USB2.0相机测试了BeagleBone Black: 平均帧率:4(高度依赖光线,在较暗的环境下获得5 FPS) 平均错误百分比:2.4%(2000年读取()中的1953张成功图片
通过在循环中抓取100帧并执行此操作20次进行测试。我在10点后重新启动,以确保我的.bash_profile编辑工作正常,并在重新启动后查看是否有任何性能差异。没有;)