在Ubuntu中select超时错误 – Opencv

我试图为我的最后一年项目设置OpenCv,并遇到了一些问题。 在本教程中,我成功地在Ubuntu中build立了它。

我现在遇到的问题是保持这个示例程序运行。 该程序是使用networking摄像头进行人脸检测。

它运行良好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 

如果有人想知道从哪里出发,我将非常感激一些帮助!

尝试这个:

 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搜索错误消息。

如果我们将下面几行添加到代码中,可以解决这个问题:

 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/

我的罗技C920有同样的问题。 我尝试了以下解决方案没有任何成功。 然而,它像C930e网络摄像头的魅力,所以我猜V4L的API与它有关。