本文档介绍如何将支持的相机模块与我们的软件工具结合使用。所有 Raspberry Pi 相机都可以使用我们的软件工具录制高分辨率照片和全高清 1080p 视频(或更好)。 Raspberry Pi 生产了几个官方摄像头模块,包括: 有关相机硬件的详细信息,请参阅相机硬件文档。 首先,安装您的相机模块。然后,按照本节中的指南使用您的相机模块。 rpicam-apps注意:Raspberry Pi OS Bookworm 将相机捕获应用程序从 libcamera-* 重命名为 rpicam-*。符号链接允许用户暂时使用旧名称。尽快采用新的应用程序名称。Bookworm 之前的 Raspberry Pi OS 版本仍然使用 libcamera-* 名称。 Raspberry Pi 提供了一小组示例 rpicam-apps。这些 CLI 应用程序建立在 libcamera 之上,从相机捕获图像和视频。这些应用包括: rpicam-hello:相当于相机的“hello world”,用于启动相机预览流并将其显示在屏幕上。 rpicam-jpeg:运行预览窗口,然后拍摄高分辨率静止图像。 rpicam-still:模拟原始 raspistill 应用程序的许多功能。 rpicam-vid:捕获视频。 rpicam-raw:直接从传感器捕获原始(未处理的拜耳)帧。 rpicam-detect:默认情况下不构建,但如果用户在其 Raspberry Pi 上安装了 TensorFlow Lite,则可以构建它。在检测到某些对象时捕获 JPEG 图像。
最新版本的 Raspberry Pi OS 包括五个基本的 rpicam-app,因此即使在全新安装的 Raspberry Pi OS 上,您也可以使用相机录制图像和视频。 用户可以创建自己的基于 rpicam 的应用程序,并具有自定义功能以满足自己的要求。rpicam-apps 源代码在 BSD-2-Clause 许可下免费提供。 libcameralibcamera 是一个开源软件库,旨在直接从 Arm 处理器上的 Linux 操作系统支持相机系统。在 Broadcom GPU 上运行的专有代码被最小化。有关 libcamera 的详细信息,请参阅 libcamera 网站。 libcamera 提供了一个 C++ API,用于配置相机,然后允许应用程序请求图像帧。这些图像缓冲区驻留在系统内存中,可以直接传递给静止图像编码器(如 JPEG)或视频编码器(如 H.264)。libcamera 本身不会编码或显示图像:该功能使用 rpicam-apps。 您可以在官方 libcamera 存储库中找到源代码。Raspberry Pi OS 发行版使用分支来控制更新。 在 libcamera 核心下,我们提供了一个自定义管道处理程序。libcamera 使用此层来驱动 Raspberry Pi 上的传感器和图像信号处理器 (ISP)。libcamera 包含一系列图像处理算法 (IPA),包括自动曝光/增益控制 (AEC/AGC)、自动白平衡 (AWB) 和自动镜头阴影校正 (ALSC)。 Raspberry Pi 的 libcamera 实现支持以下摄像头: 官方相机: OV5647掀背/两厢车(V1) IMX219掀背/两厢车(V2) IMX477 (总部) IMX296 (GS) IMX708掀背/两厢车(V3)
第三方传感器: IMX290型 IMX327型 IMX378型 OV9281型
rpicam-helloRPicam-hello 会简要显示一个预览窗口,其中包含来自已连接摄像机的视频源。要使用 rpicam-hello 显示预览窗口 5 秒钟,请在终端中运行以下命令: rpicam-hello
您可以使用超时选项传递可选的持续时间(以毫秒为单位)。值为 0 将无限期运行预览: rpicam-hello --timeout 0
在终端中使用 Ctrl+C 或预览窗口中的关闭按钮停止 rpicam-hello。 显示图像传感器预览大多数 rpicam-apps 在窗口中显示预览图像。如果没有活动的桌面环境,则使用 Linux Direct Rendering Manager (DRM) 将预览直接绘制到显示器上。否则,rpicam-apps 会尝试使用桌面环境。这两种路径都使用零拷贝 GPU 缓冲区共享:因此,不支持 X 转发。 如果您运行 X 窗口服务器并希望使用 X 转发,请传递 qt-preview 标志以在 Qt 窗口中呈现预览窗口。Qt预览窗口使用的资源比替代方案更多。 注意:使用Gtk2的旧系统在与OpenCV链接时,可能会产生Glib-GObject错误,并且无法显示Qt预览窗口。在这种情况下,请以 root 身份编辑文件 /etc/xdg/qt5ct/qt5ct.conf,并将包含 style=gtk2 的行替换为 style=gtk3。 要完全禁止预览窗口,请传递 nopreview 标志: rpicam-hello -n
info-text 选项使用 % 指令在窗口标题栏上显示图像信息。例如,以下命令显示当前的红色和蓝色增益值: rpicam-hello --info-text "red gain %rg, blue gain %bg"
有关指令的完整列表,请参阅信息文本 参考。 rpicam-jpegrpicam-jpeg 可帮助您在 Raspberry Pi 设备上捕获图像。 若要捕获全分辨率 JPEG 图像并将其保存到名为 test.jpg 的文件,请运行以下命令: rpicam-jpeg --output test.jpg
您应该会看到一个预览窗口 5 秒钟。然后,rpicam-jpeg 捕获全分辨率 JPEG 图像并保存。 使用超时选项更改预览窗口的显示时间。宽度和高度选项可更改已保存图像的分辨率。例如,以下命令显示预览窗口 2 秒钟,然后捕获并保存分辨率为 640×480 像素的图像: rpicam-jpeg --output test.jpg --timeout 2000 --width 640 --height 480
rpicam-stillrpicam-still,就像 rpicam-jpeg 一样,可帮助您在 Raspberry Pi 设备上捕获图像。与 rpicam-jpeg 不同,rpicam-still 支持旧版 raspistill 应用程序中提供的许多选项。 若要捕获全分辨率 JPEG 图像并将其保存到名为 test.jpg 的文件,请运行以下命令: rpicam-still --output test.jpg
编码rpicam-still 可以保存多种格式的图像,包括 png、bmp 以及 RGB 和 YUV 二进制像素转储。若要读取这些二进制转储,任何读取文件的应用程序都必须了解像素排列。 使用编码选项指定输出格式。传递给输出的文件名对输出文件类型没有影响。 若要捕获全分辨率 PNG 图像并将其保存到名为 test.png 的文件中,请运行以下命令: rpicam-still --encoding png --output test.png
有关指定图像格式的详细信息,请参阅编码 选项参考。 捕获原始图像原始图像是由图像传感器直接生成的图像,然后由图像信号处理器 (ISP) 或 CPU 对它们进行任何处理。彩色图像传感器通常使用拜耳格式。使用 raw 选项捕获 raw 图像。 若要捕获图像,请将其保存到名为 test.jpg 的文件中,并将图像的原始版本保存到名为 test.dng 的文件中,请运行以下命令: rpicam-still --raw --output test.jpg
rpicam-still 以 DNG(Adobe Digital Negative)格式保存原始图像。为了确定原始图像的文件名,rpicam-still 使用与输出文件相同的名称,扩展名更改为 .dng。要使用 DNG 图像,请使用 Dcraw 或 RawTherapee 等应用程序。 DNG 文件包含有关图像捕获的元数据,包括黑电平、白平衡信息和 ISP 用于生成 JPEG 的颜色矩阵。使用 ExifTool 查看 DNG 元数据。以下输出显示了存储在 Raspberry Pi 使用 HQ 相机捕获的原始图像中的典型元数据: File Name : test.dng
Directory : .
File Size : 24 MB
File Modification Date/Time : 2021:08:17 16:36:18+01:00
File Access Date/Time : 2021:08:17 16:36:18+01:00
File Inode Change Date/Time : 2021:08:17 16:36:18+01:00
File Permissions : rw-r--r--
File Type : DNG
File Type Extension : dng
MIME Type : image/x-adobe-dng
Exif Byte Order : Little-endian (Intel, II)
Make : Raspberry Pi
Camera Model Name : /base/soc/i2c0mux/i2c@1/imx477@1a
Orientation : Horizontal (normal)
Software : rpicam-still
Subfile Type : Full-resolution Image
Image Width : 4056
Image Height : 3040
Bits Per Sample : 16
Compression : Uncompressed
Photometric Interpretation : Color Filter Array
Samples Per Pixel : 1
Planar Configuration : Chunky
CFA Repeat Pattern Dim : 2 2
CFA Pattern 2 : 2 1 1 0
Black Level Repeat Dim : 2 2
Black Level : 256 256 256 256
White Level : 4095
DNG Version : 1.1.0.0
DNG Backward Version : 1.0.0.0
Unique Camera Model : /base/soc/i2c0mux/i2c@1/imx477@1a
Color Matrix 1 : 0.8545269369 -0.2382823821 -0.09044229197 -0.1890484985 1.063961506 0.1062747385 -0.01334283455 0.1440163847 0.2593136724
As Shot Neutral : 0.4754476844 1 0.413686484
Calibration Illuminant 1 : D65
Strip Offsets : 0
Strip Byte Counts : 0
Exposure Time : 1/20
ISO : 400
CFA Pattern : [Blue,Green][Green,Red]
Image Size : 4056x3040
Megapixels : 12.3
Shutter Speed : 1/20
要找到模拟增益,请将 ISO 值除以 100。自动白平衡 (AWB) 算法确定单个校准的光源,该光源始终标记为 D65。 捕捉长时间曝光要拍摄长时间曝光的图像,请禁用自动曝光/增益控制 (AEC/AGC) 和自动白平衡 (AWB)。否则,这些算法将迫使用户在收敛时等待许多帧。 要禁用这些算法,请提供增益和 AWB 的显式值。由于长时间曝光已经花费了大量时间,因此使用immediate 选项完全跳过预览阶段通常是有意义的。 要执行 100 秒曝光捕获,请运行以下命令: rpicam-still -o long_exposure.jpg --shutter 100000000 --gain 1 --awbgains 1,1 --immediate
要查找官方 Raspberry Pi 相机的最长曝光时间,请参阅相机硬件规格。 创建延时视频要创建延时视频,请定期拍摄静止图像,例如每分钟一次,然后使用应用程序将照片拼接成视频。 通过 RPiCam-静止延时摄影模式要使用 rpicam-still 的内置延时摄影模式,请使用延时摄影选项。此选项接受一个值,该值表示您希望 Raspberry Pi 在捕获之间等待的时间段(以毫秒为单位)。: mkdir timelapse
运行以下命令以创建超过 30 秒的时间延时,每两秒录制一张照片,将输出保存到 image0001.jpg 到 image0014.jpg: rpicam-still --timeout 30000 --timelapse 2000 -o timelapse/image%04d.jpg
通过 Cron您还可以使用 cron 自动进行延时摄影。首先,创建名为 timelapse.sh 的脚本,其中包含以下命令。将<username>占位符替换为 Raspberry Pi 上的用户帐户名称: #!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
rpicam-still -o /home//timelapse/$DATE.jpg
然后,使脚本可执行: chmod +x timelapse.sh
创建延时摄影目录,将延时摄影图片保存到其中: mkdir timelapse
打开 crontab 进行编辑: crontab -e
在编辑器中打开文件后,添加以下行以计划每分钟捕获一次图像,并将<username>占位符替换为主要用户帐户的用户名: * * * * * /home//timelapse.sh 2>&1
保存并退出,您应该会看到以下消息: crontab: installing new crontab
提示:要停止录制延时摄影的图像,请再次运行 crontab -e 并从 crontab 中删除上述行。 将图像拼接在一起一旦你有了一系列延时照片,你可能想把它们组合成一个视频。使用 ffmpeg 在 Raspberry Pi 上执行此操作。 首先,安装 ffmpeg: sudo apt install ffmpeg
从包含延时摄影目录的目录中运行以下命令,将 JPEG 文件转换为 mp4 视频: ffmpeg -r 10 -f image2 -pattern_type glob -i 'timelapse/*.jpg' -s 1280x720 -vcodec libx264 timelapse.mp4
上面的命令使用以下参数: -r 10:在输出视频中将帧速率(Hz值)设置为每秒10帧 -f image2:将 ffmpeg 设置为从模式指定的图像文件列表中读取 -pattern_type glob:使用通配符模式(通配)解释带有 -i 的文件名输入 -i 'timelapse/*.jpg':指定输入文件以匹配延时摄影目录中的JPG文件 -s 1280x720:缩放到 720p -vcodec libx264 使用软件 x264 编码器。 timelapse.mp4 输出视频文件的名称。
有关 ffmpeg 选项的更多信息,请在终端中运行 ffmpeg --help。 rpicam-vidrpicam-vid 可帮助您在 Raspberry Pi 设备上捕获视频。rpicam-vid 显示预览窗口,并将编码的比特流写入指定的输出。这将生成未打包的视频比特流,该比特流未包装在任何类型的容器(例如 mp4 文件)格式中。 注意:如果可用,rpicam-vid 使用硬件 H.264 编码。 例如,以下命令将一个 10 秒的视频写入名为 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
|