树莓派超全系列教程文档--(60)树莓派摄像头操作命令及使用其二
树莓派摄像头操作命令及使用其二
- `rpicam-vid`
- 编码器
- 捕获高帧率视频
- `libav` 与 `rpicam-vid` 集成
- `rpicam-raw`
- `rpicam-detect`
文章来源: http://raspberry.dns8844.cn/documentation
原文网址
rpicam-vid
rpicam-vid
可帮助您在 Raspberry Pi 设备上捕获视频。 rpicam-vid
显示预览窗口并将编码的比特流写入指定的输出。这会生成未打包的视频比特流,该比特流未包装在任何类型的容器(例如 mp4 文件)格式中。
NOTE: 如果可用, rpicam-vid
使用硬件 H.264 编码。
例如,以下命令将十秒的视频写入名为’test.h264’的文件:
$ rpicam-vid -t 10s -o test.h264
您可以使用 VLC 和其他视频播放器播放生成的文件:
$ vlc test.h264
在 Raspberry Pi 5 上,您可以通过为输出文件指定’mp4’文件扩展名直接输出为 MP4 容器格式:
$ rpicam-vid -t 10s -o test.mp4
编码器
‘rpicam-vid’ 支持运动 JPEG 以及未压缩和未格式化的 YUV420:
$ rpicam-vid -t 10000 --codec mjpeg -o test.mjpeg
$ rpicam-vid -t 10000 --codec yuv420 -o test.data
codec 选项决定输出格式,而不是输出文件的扩展名。
segment
选项将输出文件分解为片段大小的块(以毫秒为单位)。通过指定非常短(1 毫秒)的片段,这可以方便地将运动 JPEG 流分解为单个 JPEG 文件。例如,以下命令将 1 毫秒的片段与输出文件名中的计数器组合起来,为每个片段生成一个新文件名:
$ rpicam-vid -t 10000 --codec mjpeg --segment 1 -o test%05d.jpeg
捕获高帧率视频
要最大限度地减少高帧率 (> 60fps) 视频的丢帧,请尝试以下配置调整:
- 使用
--level 4.2
将 H.264 目标级别 设置为 4.2。 - 通过将
denoise
选项设置为cdn_off
来禁用软件色彩降噪处理。 - 使用
nopreview
禁用显示窗口以释放一些额外的 CPU 周期。 - 在
/boot/firmware/config.txt
中设置force_turbo=1
以确保在视频捕获期间 CPU 时钟不会节流。有关更多信息,请参阅force_turbo
文档。 - 使用
--width 1280 --height 720
或更低的值调整 ISP 输出分辨率以实现您的帧速率目标。 - 在 Raspberry Pi 4 上,您可以通过在
/boot/firmware/config.txt
中添加gpu_freq=550
或更高来超频 GPU 以提高性能。有关更多详细信息,请参阅 超频文档。
以下命令演示了如何实现 1280×720 120fps 视频:
$ rpicam-vid --level 4.2 --framerate 120 --width 1280 --height 720 --save-pts timestamp.pts -o video.264 -t 10000 --denoise cdn_off -n
libav
与 rpicam-vid
集成
rpicam-vid
可以使用 ffmpeg
/ libav
编解码器后端来编码音频和视频流。您可以将这些流保存到文件中,也可以通过网络传输它们。 libav
使用硬件 H.264 视频编码(如果存在)。
要启用 libav
后端,请将 libav
传递给 codec 选项:
$ rpicam-vid --codec libav --libav-format avi --libav-audio --output example.avi
rpicam-raw
rpicam-raw
直接从传感器将视频记录为原始Bayer帧。它不显示预览窗口。要将两秒钟的原始视频录制到名为 test.raw
的文件中,请运行以下命令:
$ rpicam-raw -t 2000 -o test.raw
rpicam-raw
输出完全没有格式信息的原始帧,直接一个接一个。应用程序将像素格式和图像尺寸打印到终端窗口,以帮助用户解释像素数据。
默认情况下, rpicam-raw
会将原始图像输出到一个可能非常大的文件中。使用 segment
选项将每个原始图像帧导入单独的文件,并使用 %05d
directive 使每个图像帧的文件名独一无二:
$ rpicam-raw -t 2000 --segment 1 -o test%05d.raw
如果使用快速存储设备,rpicam-raw
能以 10fps 的速度将 18MB 的 1200 万像素 HQ 相机帧写入磁盘。rpicam-raw 无法将输出帧格式化为 DNG 文件;如需该功能,请使用 rpicam-still
。使用 framerate
选项时,速度应低于 10,以避免丢帧:
$ rpicam-raw -t 5000 --width 4056 --height 3040 -o test.raw --framerate 8
有关原始格式的更多信息,请参阅 mode
文档。
rpicam-detect
NOTE: Raspberry Pi OS 不包含 rpicam-detect
。不过,如果您安装了 已安装 TensorFlow Lite,则可以构建 rpicam-detect
。有关详细信息,请参阅 rpicam-apps
构建说明。运行 meson
时不要忘记传递 Denable_tflite=enabled
。
rpicam-detect
显示一个预览窗口,并使用Google MobileNet v1 SSD(单发探测器)神经网络监控内容,该网络经过训练,可以使用可可数据集识别大约80类物体。 rpicam-detect
识别人、汽车、猫和许多其他物体。
每当 rpicam-detect
检测到目标对象时,它都会捕获全分辨率JPEG。然后它返回到监控预览模式。
有关模型使用的一般信息,请参阅 TensorFlow Lite对象检测 部分。例如,您可能会在外出时偷偷监视您的猫:
$ rpicam-detect -t 0 -o cat%04d.jpg --lores-width 400 --lores-height 300 --post-process-file object_detect_tf.json --object cat