树莓派官方摄像头模块 Camera Module 3 发布之后,有些朋友使用 libcamera 软件库来拍摄会发现报错:
[0:11:48.500378214] [2153] INFO Camera camera_manager.cpp:299 libcamera v0.0.4+22-923f5d70 ERROR: *** no cameras available ***
假设你已经在断电状态下正确连接好了摄像头和树莓派主板的 CSI 接口。下面我们介绍在树莓派官方系统 Raspberry Pi OS 下使用 V3 版摄像头(IMX708 传感器)的正确方法。
给树莓派上电进入系统,首先依然需要运行 sudo raspi-config 命令进入系统配置工具,选择 Interfacing Options – Legacy Camera 菜单禁用 Legacy 摄像头。
然后运行下面的命令修改配置文件:
sudo nano /boot/config.txt
找到下面几行配置,修改后面的数值如下。如果某行没有找到,可在文件末尾添加一行。
camera_auto_detect=0 gpu_mem=128
在最后面再加一行,手动配置摄像头传感器型号:
dtoverlay=imx708
CTRL+X 后键入 Y 回车保存。
运行下面的命令修改 /etc/modules 内容:
sudo nano /etc/modules
在文件末尾添加一行:
bcm2835-v4l2
同样 CTRL+X 后键入 Y 回车保存。
运行命令 sudo reboot 重启树莓派。
然后就可以使用 libcamera 工具中的命令来拍摄了。
libcamera-hello 命令相当于相机的 “hello world” 应用程序。它启动相机,显示预览窗口,而不执行任何其他操作。例如:
libcamera-hello
应显示预览窗口约 5 秒钟。-t
libcamera-hello -t 0
可以通过单击窗口的关闭按钮或在终端中使用 Ctrl-C 来停止预览。
libcamera-jpeg
libcamera-jpeg 命令是一个简单的静止图像捕获应用程序。它故意避免了 libcamera-still 的一些附加功能,它试图更充分地模仿 raspistill。因此,代码明显更容易理解,并且在实践中仍然提供许多相同的功能。
要捕获全分辨率 JPEG 图像,请使用:
libcamera-jpeg -o test.jpg
这将显示大约 5 秒的预览,然后捕获全分辨率 JPEG 图像到文件 test.jpg。
-t 选项
libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480
将捕获 VGA 大小的图像。
libcamera-still
libcamera-still 与 libcamera-jpeg 非常相似,但支持更多的 raspistill 选项。和以前一样,可以使用:
libcamera-still -o test.jpg
编码
libcamera-still 允许以多种不同的格式保存文件。它支持 png 和 bmp 编码。它还允许将文件另存为 RGB 或 YUV 像素的二进制转储,完全没有编码或文件格式。在后一种情况下,读取文件的应用程序必须自行了解像素排列。
libcamera-still -e png -o test.png libcamera-still -e bmp -o test.bmp libcamera-still -e rgb -o test.data libcamera-still -e yuv420 -o test.data
请注意,保存图像的格式取决于 -e(等效的 –encoding)选项,并且不会根据输出文件名自动选择。
原始图像(Raw)捕获
原始图像是由图像传感器直接生成的图像,在ISP(图像信号处理器)或任何 CPU 内核对其应用任何处理之前。对于彩色图像传感器,这些通常是拜耳格式的图像。请注意,原始图像与我们之前看到的已处理但未编码的 RGB 或 YUV 图像有很大不同。
捕获原始图像使用下面的命令:
libcamera-still -r -o test.jpg
在这里,-r 选项(也称为 –raw)表示捕获原始图像以及 JPEG。实际上,原始图像是生成JPEG的确切图像。原始图像以 DNG(Adobe Digital Negative)格式保存,并与许多标准应用程序兼容,例如 dcraw 或 RawTherapee。原始图像将保存到具有相同名称但扩展名为 .dng 的文件中,因此在本例中为 test.dng。
libcamera-vid
Libcamera-vid 是视频捕获应用程序。默认情况下,它使用树莓派的硬件 H.264 编码器。它将显示一个预览窗口,并将编码的比特流写入指定的输出。例如,要将 10 秒的视频写入文件,请使用:
libcamera-vid -t 10000 -o test.h264
生成的文件可以使用 vlc 播放(以及其他应用程序)
vlc test.h264
请注意,这是一个未打包的视频比特流,它没有包装在任何类型的容器格式(例如 mp4 文件)中。–save-pts 选项可用于输出帧时间戳,以便随后可以使用 mkvmerge 等工具将比特流转换为适当的格式。
libcamera-vid -o test.h264 --save-pts timestamps.txt
然后,如果你想要一个 MKV 文件:
mkvmerge -o test.mkv --timecodes 0:timestamps.txt test.h264
有关 libcamera 的更多使用方法可以参考官方文档。
发表评论