我正在尝试为我的最后一年项目设置OpenCv并遇到了一些问题。我在this教程之后成功地在Ubuntu中设置了它。
我现在遇到的问题是保持这个sample程序运行。该程序使用网络摄像头进行人脸检测。
它可以运行3或4秒,然后捕获卡在窗口中的单帧。控制台显示以下输出。
tom@ubuntu:~/College/opencv/faceDetect_sample$ make
./faceDetect --cascade="haarcascade_frontalface_alt.xml" --nested-cascade="haarcascade_eye_tree_eyeglasses.xml"
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
init done
opengl support available
select timeout
select timeout
select timeout
select timeout
select timeout
select timeout
^Cmake: *** [run] Interrupt
如果有人知道从哪里开始,我真的很感激一些帮助!
答案 0 :(得分:13)
试试这个:
modprobe uvcvideo nodrop=1 timeout=6000
如果可行,只需编辑/etc/modprobe.d/modprobe.conf
即可永久更改。尝试将超时增加到一个非常大的数字。这应该解决问题,或者至少它对我有用。只是对select的调用没有返回准备好的描述符,这可能是由视频驱动程序或设备引起的。
如果这不起作用,
启用模块跟踪:
sudo echo 0xffff > /sys/module/uvcvideo/parameters/trace
运行程序直到找到错误,并尽快停止。然后禁用跟踪:
sudo echo 0 > /sys/module/uvcvideo/parameters/trace
使用dmesg
搜索错误消息。
答案 1 :(得分:3)
如果我们在代码中添加以下行,可以解决这个问题:
VideoCapture capture(<device id>);
capture.set(CV_CAP_PROP_FRAME_WIDTH , 352);
capture.set(CV_CAP_PROP_FRAME_HEIGHT , 288);
以下是一个很好的链接,详细解释了解决方案: http://derekmolloy.ie/beaglebone/beaglebone-video-capture-and-image-processing-on-embedded-linux-using-opencv/
答案 2 :(得分:1)
我的Logitech C920遇到了同样的问题。我尝试了以下解决方案,没有任何成功。然而,它就像C930e网络摄像头的魅力一样,所以我猜V4L API与它有关。