Beaglebone Black 视频捕获:错误 "select timeout"
Beaglebone Black Video Capture: Error "select timeout"
嘿,我正在学习 Derek Molloy 的教程:
使用 Linux UVC 驱动程序支持的罗技 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. According to Matthew, Bandwidth limitations 他测试并发现带宽为 13.2MB/s。
嘿,我正在学习 Derek Molloy 的教程:
使用 Linux UVC 驱动程序支持的罗技 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. According to Matthew, Bandwidth limitations 他测试并发现带宽为 13.2MB/s。