摄像头软件
本文档介绍如何将支持的摄像头模块与我们的软件工具配合使用。所有 Raspberry Pi 摄像头都可以使用我们的软件工具录制高分辨率照片和全高清 1080p 视频(或更好)。
Raspberry Pi 生产多种官方摄像头模块,包括
- 最初的 500 万像素摄像头模块 1(已停产)
- 800 万像素 摄像头模块 2,带或不带红外滤镜
- 1200 万像素 摄像头模块 3,有标准镜头和广角镜头,带或不带红外滤光镜
- 1200 万像素的 高质量摄像头,配有 CS 和 M12 卡口,可与外置镜头配合使用
- 160 万像素 全局快门摄像头,用于快速动态摄影
- 1200 万像素的 AI摄像头,使用索尼IMX500成像传感器,为任何摄像头应用提供低延迟、高性能的AI功能
有关摄像机硬件的更多信息,请参阅摄像头硬件文档。
首先,安装摄像头模块。然后,按照本节中的指南使用你的摄像头模块。
本指南不再涵盖在 Bullseye 和早期 Raspberry Pi OS 版本中可用的传统相机栈。传统的相机栈使用 raspivid、raspistill 等应用程序和原始的 Picamera(而不是 Picamera2)Python 库,多年来已被弃用,现在已不再支持。如果您使用的是传统的相机栈,它将只支持 摄像头模块 1、摄像头模块 2 和 高质量摄像头,而不会支持任何更新的相机模块。
rpicam-apps
Raspberry Pi OS Bookworm 将摄像头捕捉应用程序从 libcamera-\* 更名为 rpicam-*。符号链接允许用户暂时使用旧名称。尽快采用新的应用程序名称。 Bookworm之前的 Raspberry Pi OS 版本仍使用 libcamera-* 名称。
Raspberry Pi 提供了一小套示例 rpicam-apps。这些建立在 libcamera 基础上的 CLI 应用程序可以从摄像头捕捉图像和视频。这些应用程序包括
rpicam-hello: 相当于摄像头的 "hello world",可启动摄像头预览流并显示在屏幕上。rpicam-jpeg: 运行预览窗口,然后捕捉高分辨率静态图像。rpicam-still: 模拟原始raspistill应用程序的许多功能。rpicam-vid: 捕捉视频。rpicam-raw: 直接从传感器捕捉原始(未经处理的拜尔)帧。rpicam-detect: 默认不内置,但如果用户在 Raspberry Pi 上安装了 TensorFlow Lite,则可以内置。在检测到特定物体时捕获 JPEG 图像。
最新版本的 Raspberry Pi OS 包含五个基本的 rpicam-apps,因此即使在刚安装 Raspberry Pi OS 的情况下,您也可以使用摄像头录制图像和视频。
用户可以创建自己的基于 rpicam 的应用程序,并根据自己的要求定制功能。rpicam-apps`源代码在 BSD-2-Clause 许可下免费提供。
libcamera
libcamera 是一个开源软件库,目的是在 Arm 处理器上直接从 Linux 操作系统支持摄像头系统。在 Broadcom GPU 上运行的专有代码被最小化。有关 libcamera 的更多信息,请参阅 libcamera网站。
libcamera 提供了一个 C++ API 配置摄像头,然后允许应用程序请求图像帧。这些图像缓冲区位于系统内存中,可直接传递给静态图像编码器(如 JPEG) 或视频编码器(如 h.264)。libcamera 本身并不编码或显示图像:该功能请使用 rpicam-apps。
您可以在 libcamera 官方资源库中找到源代码。Raspberry Pi OS 发行版使用 fork 来控制更新。
在 libcamera 核心之下,我们提供了一个自定义管道处理程序。libcamera 使用这一层来驱动 Raspberry Pi 上的传感器和图像信号处理器(ISP)。libcamera 包含一系列图像处理算法(IPA),包括自动曝光/增益控制(AEC/AGC)、自动白平衡(AWB)和自动镜头阴影校正(ALSC)。
Raspberry Pi 的 libcamera 支持以下摄像头:
- 官方摄像头:
- OV5647 (V1)
- IMX219 (V2)
- IMX708 (V3)
- IMX477 (HQ)
- IMX500 (AI)
- IMX296 (GS)
- 第三方传感器:
- IMX290
- IMX327
- IMX378
- IMX519
- OV9281
要扩展对新传感器的支持,请查看为 libcamera 做贡献。
rpicam-hello
rpicam-hello 会短暂显示一个预览窗口,其中包含所连接摄像头的视频画面。要使用 rpicam-hello 显示五秒钟的预览窗口,请在终端中运行以下命令:
rpicam-hello
您可以使用 timeout 选项传递一个可选的持续时间(以毫秒为单位)。值为 0 时,预览将无限期运行:
rpicam-hello --timeout 0
使用终端中的 Ctrl+C 或预览窗口上的关闭按钮停止 rpicam-hello。
显示图像传感器预览
大多数 rpicam-app 都会在窗口中显示预览图像。如果没有活动的桌面环境,预览图像会使用 Linux 直接渲染管理器 (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"
有关指令的完整列表,请参阅 info-text 参考资料。
rpicam-jpeg
rpicam-jpeg 可以帮助你捕捉 Raspberry Pi 设备上的图像。
要捕获全分辨率的 JPEG 图像并将其保存到名为 test.jpg 的文件中,请运行以下命令:
rpicam-jpeg --output test.jpg
你会看到一个五秒钟的预览窗口。然后,rpicam-jpeg 会捕获全分辨率的 JPEG 图像并保存。
使用 timeout 选项可更改预览窗口的显 示时间。width 和height选项可改变保存图像的分辨率。例如,以下命令显示预览窗口 2 秒钟,然后捕捉并保存分辨率为 640×480 像素的图像:
rpicam-jpeg --output test.jpg --timeout 2000 --width 640 --height 480
rpicam-still
和 rpicam-jpeg 一样,rpicam-still 可以帮助你在 Raspberry Pi 设备上捕捉图像。
与 rpicam-jpeg 不同,rpicam-still 支持传统的 raspistill 应用程序中提供的许多选项。
要捕获全分辨率的 JPEG 图像并将其保存到名为 test.jpg 的文件中,请运行以下命令:
rpicam-still --output test.jpg
编码器
rpicam-still 可以保存多种格式的图像,包括png、bmp以及 RGB 和 YUV 二进制像素转储。要读取这些二进制转储,任何读取文件的应用程序都必须理解像素排列。
使用 encoding 选项指定输出格式。传递给 output 的文件名对输出文件类型没有影响。
要捕捉全分辨率 PNG 图像并将其保存到名为 test.png 的文件中,请运行以下命令:
rpicam-still --encoding png --output test.png