嘿,我正在关注Derek Molloy的教程:
使用Linux UVC驱动程序支持的Logitech c310网络摄像头。
root@beaglebone:/boneCV# v4l2-ctl --all
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : UVC Camera (046d:081b)
Bus info : usb-musb-hdrc.1.auto-1
Driver version: 3.8.13
Capabilities : 0x84000001
Video Capture
Streaming
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV'
Field : None
Bytes per Line: 1280
Size Image : 614400
Colorspace : SRGB
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 640, Height 480
Default : Left 0, Top 0, Width 640, Height 480
Pixel Aspect: 1/1
Video input : 0 (Camera 1: ok)
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
Priority: 2
所以我们可以看到它被Beagleboard阅读没问题。当我尝试捕获视频时,我只是收到此错误:
root@beaglebone:/boneCV# ./capture -f -c 600 -o > output.raw
Force Format 1
select timeout
看看其他主题,人们似乎不知道如何回答这个问题,任何有这个项目经验的人能帮助我吗?
我可以说问题已经解决了。重新启动并在几个小时后再次尝试相机后,它似乎神奇地工作。
我唯一改变的是捕获调用现在更简单:
./capture -o > output.raw
我还没有将原始文件转换为mpeg4,因为我正在安装ffmpeg,因为我输入了这个,但是我可以确认抓取静止图像是有效的。 output.raw的文件大小确认它确实正在捕获视频。如果有人发现这个并且卡住了,我会很乐意尽我所能给予帮助。
奇怪的是,它似乎只是在首先使用图片采集程序后捕获视频。因此抓取器必须有一些初始化的东西,这在捕获中不会发生。
更新:好的事实证明YUYV视频模式不起作用,但mjpeg确实如此,将其置于抓取模式初始化mjpeg模式,这就是它工作的原因。不知道为什么YUYV还没有用。
如果你比较YUYV的图像大小和MJPEG的图像大小,你会发现前者远大于后者。 BBB的USB端口带宽有限,因此无法以YUYV格式操作相机。 MJPEG输出压缩视频流。不同的opencv版本倾向于更改使用v4l2-ctl
命令设置的分辨率,因此您必须更改boneCV代码中的分辨率。我不确定它是如何在c ++中完成的,但是在python中,检查Changing camera resolution in opencv code。根据Matthew的说法,Bandwidth limitations测试并发现带宽为13.2MB / s。