Raspberry Pi AI Camera

来自Waveshare Wiki
跳转至: 导航搜索
Raspberry Pi AI Camera
{{{name2}}}
{{{name3}}}
功能简介
特性 1230万像素
模组 IMX500
视场角 78.3°
' 无特性,不解释
' 无特性,不解释
接口 CSI

硬件连接

要测试树莓派摄像头,需要给树莓派接入HDMI屏幕或者DSI屏幕

树莓派主板上的CSI (摄像头) 和 DSI (显示器) 两个接口的封装是相似的,接线的时候注意不要接错了。CSI接口在音频接口和HDMI接口中间, 树莓派Zero系列的摄像头接口在Power接口边上。 如果你使用的计算模块,具体以底板的布局为准。

  • 接入树莓派5
将排线的金属面朝向有线网口位置,插入接口
Pi5有两个CSI接口,任意口都可以接入
Raspberry-Pi-AI-Camera-details-13.jpg
  • 接入树莓派Zero 系列
将排线的金属面朝下,接入摄像头接口
RPi Camera Connect Zero.png
  • 其他树莓派主板
将排线的金属面朝向HDMI接口,接入摄像头接口
Raspberry-Pi-AI-Camera-details-13.jpg

关于型号

感光芯片型号 支持的树莓派主板型号 支持的驱动类型
OV5647 所有树莓派主板 libcamera / Raspicam
OV9281 所有树莓派主板 libcamera
IMX219 (树莓派官方) 所有树莓派主板 libcamera / Raspicam
IMX219 (第三方) 树莓派计算模块 libcamera
IMX290/ IMX327 所有树莓派主板 libcamera
IMX378 所有树莓派主板 libcamera
IMX477 (树莓派官方) 所有树莓派主板 libcamera / Raspicam
IMX477 (第三方) 所有树莓派主板 libcamera
IMX462 所有树莓派主板 libcamera
IMX519 树莓派主板 libcamera(另装驱动)
IMX708 (树莓派Camera Module 3) 所有树莓派主板 libcamera
IMX296(树莓派Global Camera) 所有树莓派主板 libcamera
IMX500(树莓派AI Camera) 所有树莓派主板 libcamera


测试摄像头

软件配置

如果使用的是最新的Raspberry Pi Camera Module 3 或者Raspberry Pi Global Shutter Camera,需要运行以下指令进行系统更新(需要联网操作).

sudo apt-get update -y
sudo apt-get upgrade -y

如果只调用一个摄像头,请将摄像头接入到CAM1口.
如果使用的是是非树莓派官方的摄像头,均需要另外配置config.txt 文件.
如果使用的是最新的Bookworm系统,需要配置的是/boot/firmware/config.txt。

sudo nano /boot/config.txt
#如果是bookworm系统
sudo nano /boot/firmware/config.txt

找到camera-auto-detect=1 语句,修改为 camera_auto_detect=0

在文件结尾,根据摄像头型号加入以下设置语句

型号 设置语句
OV9281 dtoverlay=ov9281
IMX290/IMX327/IMX462 dtoverlay=imx290,clock-frequency=37125000
IMX378 dtoverlay=imx378
IMX219 dtoverlay=imx219
IMX477 dtoverlay=imx477
IMX708 dtoverlay=imx708

注意:在树莓派5上使用IMX290,还需要添加json文件到指令目录才能使用。操作如下:

sudo wget https://www.waveshare.net/w/upload/7/7a/Imx290.zip
sudo unzip Imx290.zip
sudo cp imx290.json /usr/share/libcamera/ipa/rpi/pisp
双目摄像头配置
  • 目前CM4底板和树莓派5均支持接入两路摄像头
  • 如果用户需要同时接入两路摄像头调用,可以在对应的摄像头配置语句后面加入cam0和cam1指定摄像头。
    • 例如,如果同时接入imx219在cam0接口,ov5647摄像头接口在cam1
dtoverlay=imx219,cam0
dtoverlay=ov5647,cam1

AI Camera 软件配置

使用Raspberry Pi AI Camera,需要确保你使用的是树莓派最新系统。

  • 打开树莓派终端,使用指令更新系统
sudo apt update && sudo apt full-upgrade 
  • 安装imx500固件和相关驱动
sudo apt install imx500-all 
  • 安装完成后,重启系统
 sudo reboot 

测试摄像头指令

打开树莓派终端,并开启摄像头预览:
sudo rpicam-hello -t 0

如果要关掉预览窗口,可以直接组合按键Alt-F4,或者点击x关掉。 也可以回到终端界面,用ctrl-c终止程序。
注:如果是Camera module 3,会开启自动对焦功能

测试双目摄像头
  • 测试双目摄像头的时候,需要加--camera 指定摄像头,不加该参数设置默认指定cam0
sudo rpicam-hello -t 0 --camera 0
sudo rpicam-hello -t 0 --camera 1

测试AI 摄像头指令

  • 打开树莓派终端,并使用rpicam-apps 摄像头程序进行测试
  • 物体识别预览测试
    rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30 
  • 录制视频,并做物体检测
    rpicam-vid -t 10s -o output.264 --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --width 1920 --height 1080 --framerate 30 
  • 姿势检测预览
    rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_posenet.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30

前言

查看自己使用的系统版本是什么,请执行sudo cat /etc/os-release,看下是否有以下两个镜像的相关信息,然后再选择.

  • Raspberry Pi OS Bookworm将相机捕获应用程序从 libcamera-* 改为 rpicam-* ,目前允许用户继续使用旧的libcamera,但是libcamera后续将被弃用,所以请尽快使用rpicam.
  • 如果使用的是Raspberry Pi OS Bullseye系统,请下拉页面使用本教程的libcamera-*教程.

RPicam

运行最新版本的 Raspberry Pi OS 时,rpicam-apps已经安装了五个基本功能。在这种情况下,官方的 Raspberry Pi 相机也将被检测并自动启用。
您可以通过输入以下内容来检查一切是否正常:

rpicam-hello 

会看到一个大约五秒钟的相机预览窗口.
注意:如果运行在 Bullseye 的 Raspberry Pi 3 和更早版本的设备上,您需要重新启用 Glamor,才能使 X Windows 硬件加速预览窗口正常工作。在终端窗口中输入sudo raspi-config,然后选择Advanced Options、Glamor和Yes.退出并重新启动您的 Raspberry Pi.默认情况下,运行 Bullseye 的 Raspberry Pi 3 和更早的设备可能未使用正确的显示驱动程序。请参阅 /boot/firmware/config.txt 文件,并确保 dtoverlay=vc4-fkms-v3d or dtoverlay=vc4-kms-v3d 当前处于活动状态。如果您需要更改此设置,请重新启动。

rpicam-hello

相当于相机的“hello world”,它启动相机预览流并将其显示在屏幕上,可以通过单击窗口的关闭按钮或在终端中使用ctrl^C来停止预览.
rpicam-hello -t 0
调谐文件

Raspberry Pi 的libcamera有针对每种不同类型的相机模块的调谐文件。文件里的参数将传递给算法和硬件以产生最佳质量的图像。 libcamera只能自动确定正在使用的图像传感器,而不能自动确定整个模块,即使整个模块会影响“调谐”。因此,有时需要覆盖特定传感器的默认调谐文件。
例如,无红外滤光片 (NoIR) 版本的传感器需要与标准版本不同的 AWB(白平衡) 设置,因此与 Pi 4 或更早设备一起使用的 IMX219 NoIR 应使用以下方式运行:

rpicam-hello --tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx219_noir.json

Raspberry Pi 5 在不同的文件夹中使用不同的调谐文件,因此在这里您将使用:

rpicam-hello --tuning-file /usr/share/libcamera/ipa/rpi/pisp/imx219_noir.json

这也意味着用户可以复制现有的调谐文件并根据自己的喜好进行更改,只要参数--tuning-file指向新版本即可。
--tuning-file参数与其他命令行选项一样,同样适用于所有rpicam-apps.

rpicam-jpeg

rpicam-jpeg是一个简单的静态图像捕捉应用程序。
要捕获全分辨率 JPEG 图像,请使用以下指令,这将显示大约五秒钟的预览,然后将全分辨率 JPEG 图像捕获到文件中test.jpg

rpicam-jpeg -o test.jpg

该-t <duration>选项可用于更改预览显示的时间长度,并且--width和--height选项将更改捕获的静态图像的分辨率。例如:

rpicam-jpeg -o test.jpg -t 2000 --width 640 --height 480
曝光控制

所有这些都rpicam-apps允许用户以固定的快门速度和增益运行相机。拍摄曝光时间为 20ms、增益为 1.5x 的图像,该增益将用作传感器内的模拟增益,直到达到内核传感器驱动程序允许的最大模拟增益,之后其余部分将用作数字增益。

rpicam-jpeg -o test.jpg -t 2000 --shutter 20000 --gain 1.5

Raspberry Pi 的 AEC/AGC 算法允许应用程序指定曝光补偿:能够通过给定的停止次数使图像变暗或变亮。

rpicam-jpeg --ev -0.5 -o darker.jpg
rpicam-jpeg --ev 0 -o normal.jpg
rpicam-jpeg --ev 0.5 -o brighter.jpg
数字增益

数字增益由 ISP 应用,而不是由传感器应用。数字增益将始终非常接近 1.0,除非:

  • 请求的总增益(通过选项--gain或通过相机调整中的曝光配置文件)超过了可以在传感器内用作模拟增益的增益。只有所需的额外增益才会用作数字增益。
  • 其中一个颜色增益小于 1(请注意,颜色增益也用作数字增益)。在这种情况下,公布的数字增益将稳定为 1 / 分钟(红色增益,蓝色增益)。这意味着其中一个颜色通道(而不是绿色通道)应用了单位数字增益。
  • AEC/AGC 正在发生变化。当 AEC/AGC 移动时,数字增益通常会发生一定程度的变化,以尝试消除任何波动,但它会很快恢复到正常值。

rpicam-still

模拟raspistill原始应用程序的许多功能.

rpicam-still -o test.jpg
编码器

rpicam-still允许文件以多种不同的格式保存。它支持png和bmp编码。它还允许将文件保存为 RGB 或 YUV 像素的二进制转储,没有编码或文件格式。在后一种情况下,读取文件的应用程序必须了解其自身的像素排列。

rpicam-still -e png -o test.png
rpicam-still -e bmp -o test.bmp
rpicam-still -e rgb -o test.data
rpicam-still -e yuv420 -o test.data

注意,保存图像的格式取决于-e(相当于——encoding)选项,不会根据输出文件名自动选择。

Raw图像捕捉

raw图是由图像传感器直接产生的图像,在ISP(图像信号处理器)或任何CPU内核对其进行任何处理之前。对于彩色图像传感器,这些通常是Bayer格式图像。请注意,原始图像与我们之前看到的经过处理但未编码的RGB或YUV图像有很大不同。
获取raw图:

rpicam-still --raw --output test.jpg

这里,-r选项(也是——raw)表示捕获原始图像和JPEG。实际上,原始图像就是生成JPEG的raw图像。原始图像以DNG (Adobe Digital Negative)格式保存,并与许多标准应用程序(如draw或RawTherapee)兼容。原始图像保存到具有相同名称但扩展名为. ng的文件中,因此是test.dng。
这些DNG文件包含与图像捕获有关的元数据,包括黑电平、白平衡信息和ISP用于生成JPEG的颜色矩阵。这使得这些DNG文件在以后使用上述一些工具进行“手动”原始转换时更加方便。使用exiftool显示编码到DNG文件中的所有元数据:

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

我们注意到只有一个校准光源(由AWB算法确定的光源,尽管它总是被标记为“D65”),并且将ISO数除以100给出正在使用的模拟增益。

超长曝光

为了捕捉长时间曝光的图像,请禁用AEC/AGC和AWB,因为这些算法将迫使用户在收敛时等待许多帧。
禁用它们的方法是提供显式的值。此外,可以使用——immediate选项跳过捕获的整个预览阶段。
因此,要执行100秒曝光捕捉,使用;

rpicam-still -o long_exposure.jpg --shutter 100000000 --gain 1 --awbgains 1,1 --immediate

作为参考,三款官方树莓派相机的最大曝光时间可以在这个表格中找到。

rpicam-vid

rpicam-vid可以帮助我们在树莓派设备上捕获视频。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
捕获高帧率视频

为了尽量减少高帧率(> 60fps)视频的帧丢失,请尝试以下配置调整:

  • 将H.264的目标水平用 --level 4.2 这个参数设置为4.2
  • 通过将denoise选项设置为cdn_off来禁用软件颜色降噪处理。
  • 禁用nopreview的显示窗口以释放一些额外的CPU周期。
  • 在/boot/firmware/config.txt中设置force_turbo=1,确保在视频捕获过程中CPU时钟不节流。有关更多信息,请参阅force_turbo文档。
  • 将ISP输出分辨率参数调整为--width 1280 --height 720或更低,以实现帧率目标。
  • 在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与picam-vid的集成

Rpicam-vid可以使用ffmpeg/libav编解码器后端对音频和视频流进行编码。您可以将这些流保存到文件中,也可以通过网络将它们流式传输。
要启用libav后端,将libav传递给 codec 选项:

rpicam-vid --codec libav --libav-format avi --libav-audio --output example.avi
UDP

要使用树莓派作为服务器在UDP上流式传输视频,使用以下命令,将< IP -addr>占位符替换为客户端或多播地址的IP地址,并将<port>占位符替换为您想要用于流式传输的端口:

rpicam-vid -t 0 --inline -o udp://<ip-addr>:<port>

使用树莓派作为客户端通过UDP查看视频流,使用以下命令,将<port>占位符替换为您想要流式传输的端口:

vlc udp://@:<port> :demux=h264

或者,在客户端使用以下命令使用ffplay进行流:

ffplay udp://<ip-addr-of-server>:<port> -fflags nobuffer -flags low_delay -framedrop
TCP

还可以通过TCP传输视频。使用树莓派作为服务器:

rpicam-vid -t 0 --inline --listen -o tcp://0.0.0.0:<port>

使用树莓派作为客户端通过TCP查看视频流,使用以下命令:

vlc tcp/h264://<ip-addr-of-server>:<port>

或者,在客户端使用以下命令以每秒30帧的速度使用ffplay流:

ffplay tcp://<ip-addr-of-server>:<port> -vf "setpts=N/30" -fflags nobuffer -flags low_delay -framedrop
RTSP

要使用VLC通过RTSP传输视频,使用树莓派作为服务器,使用以下命令:

rpicam-vid -t 0 --inline -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream1}' :demux=h264

使用树莓派作为客户端查看RTSP上的视频流,使用以下命令:

ffplay rtsp://<ip-addr-of-server>:8554/stream1 -vf "setpts=N/30" -fflags nobuffer -flags low_delay -framedrop

或者在客户端使用以下命令使用VLC进行流:

vlc rtsp://<ip-addr-of-server>:8554/stream1

如果需要关闭服务器上的预览窗口,使用nopreview命令。
使用内联标志强制流报头信息进入每个内帧,这有助于客户端在错过开头时理解流。

rpicam-raw

rpicam-raw直接从传感器将视频记录为原始的 Bayer帧。它不显示预览窗口。将两秒钟的原始剪辑记录到一个名为test.raw的文件中,执行如下命令:

rpicam-raw -t 2000 -o test.raw

Rpicam-raw输出没有任何格式信息的原始帧。应用程序将像素格式和图像尺寸打印到终端窗口,以帮助用户解析像素数据。
默认情况下,rpicam-raw在单个可能非常大的文件中输出原始帧。使用segment选项将每个原始帧定向到一个单独的文件,使用%05d指令使每个帧文件名唯一:

rpicam-raw -t 2000 --segment 1 -o test%05d.raw

通过快速存储设备,rpicam-raw可以以10fps的速度将18MB的1200万像素HQ相机帧写入磁盘。rpicam-raw无法将输出帧格式化为DNG文件;要实现这个功能,请使用 rpicam-still以低于10的帧率选项来避免掉帧的情况:

rpicam-raw -t 5000 --width 4056 --height 3040 -o test.raw --framerate 8

有关原始格式的更多信息,请参阅mode文档。

rpicam-detect

注意:树莓派操作系统不包含rpicam-detect。如果您已经安装了TensorFlow Lite,则可以构建rpicam-detect。有关更多信息,请参见rpicam-apps构建说明。不要忘记在运行cmake时传递-DENABLE_TFLITE=1。
rpicam-detect显示一个预览窗口,并使用Google MobileNet v1 SSD (Single Shot Detector)神经网络来监控内容,该神经网络经过训练,可以使用Coco数据集识别大约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

rpicam参数设置

  • --help -h 打印全部选项,以及每个选项的简要介绍
rpicam-hello -h
  • --version 输出libcamera和rpicam-apps的版本字符串
rpicam-hello --version

示例输出:

rpicam-apps build: ca559f46a97a 27-09-2021 (14:10:24)
libcamera build: v0.0.0+3058-c29143f7
  • --list-cameras 列出连接到树莓派的摄像头及其可用的传感器模式
rpicam-hello --list-cameras

传感器模式标识符有以下形式:

S<Bayer order><Bit-depth>_<Optional packing> : <Resolution list>

裁剪在原生传感器像素(即使在像素分割模式下)中指定为(<x>, <y>)/<Width>×<Height>。(x, y)指定 width × height大小的裁剪窗口在传感器阵列中的位置。
例如,以下输出显示索引为0的IMX219传感器和索引为1的IMX477传感器的信息:

Available cameras
-----------------
0 : imx219 [3280x2464] (/base/soc/i2c0mux/i2c@1/imx219@10)
    Modes: 'SRGGB10_CSI2P' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]
                             1640x1232 [41.85 fps - (0, 0)/3280x2464 crop]
                             1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]
                             3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]
           'SRGGB8' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]
                      1640x1232 [41.85 fps - (0, 0)/3280x2464 crop]
                      1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]
                      3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]
1 : imx477 [4056x3040] (/base/soc/i2c0mux/i2c@1/imx477@1a)
    Modes: 'SRGGB10_CSI2P' : 1332x990 [120.05 fps - (696, 528)/2664x1980 crop]
           'SRGGB12_CSI2P' : 2028x1080 [50.03 fps - (0, 440)/4056x2160 crop]
                             2028x1520 [40.01 fps - (0, 0)/4056x3040 crop]
                             4056x3040 [10.00 fps - (0, 0)/4056x3040 crop]
  • --camera 选择要使用的相机。从可用摄像机列表中指定一个索引。
rpicam-hello --list-cameras 0 
rpicam-hello --list-cameras 1 
  • --config -c,指定一个文件,里面包含了指令参数选项和值。一般是起名为example_configuration.txt的文件,将选项和值指定为键值对,每行一个选项
timeout=99000
verbose=

注意:省略通常在命令行中使用参数的前缀--。对于缺少值的标志,例如上面示例中的verbose,必须包含尾随的=。
然后可以运行以下命令,来指定99000毫秒的超时和详细输出:

rpicam-hello --config example_configuration.txt 
  • --time -t,默认5000毫秒的延时
rpicam-hello -t  

指定应用程序在关闭前运行多长时间。这适用于视频录制和预览窗口。当捕获静止图像时,应用程序在捕获输出图像之前显示一个超时毫秒的预览窗口。

rpicam-hello -t 0
  • --preview 设置桌面或DRM预览窗口的位置(x,y坐标)和大小(w,h尺寸)。不会影响从相机请求的图像的分辨率或宽高比

以以下逗号分隔的形式传递预览窗口尺寸:x,y,w,h

rpicam-hello --preview 100,100,500,500
  • --fullscreen -f,强制预览窗口使用整个屏幕,没有边框或标题栏。缩放图像以适应整个屏幕。不接受值
rpicam-hello -f
  • --qt-preview 使用Qt预览窗口,它比其他选项消耗更多的资源,但支持X窗口转发。与全屏标志不兼容。不接受值。
rpicam-hello --qt-preview
  • --nopreview 使应用程序不显示预览窗口。不接受值
rpicam-hello --nopreview
  • --info-text

默认值: "#%frame (%fps fps) exp %exp ag %ag dg %dg"
在桌面环境中运行时,将提供的字符串设置为预览窗口的标题。支持以下图像元数据替换:

指令 说明
%frame 帧序列号
%fps 瞬时帧速率
%exp 捕捉图像时的快门速度, 单位是ms
%ag 感光芯片控制的图像模拟增益
%dg 通过ISP控制的图像数值增益
%rg 每个像素点红色组件的增益
%bg 每个像素点蓝色组件的增益
%focus 图像的角点度量,数值越大表示图像越清晰
%lp 当前镜头的屈光度 (1/米为单位的距离)
%afstate 自动对焦状态 (idle, scanning, focused, failed)
rpicam-hello --info-test "Focus measure: %focus" 
  • --width
  • --height

每个都接受一个单独的数字来定义所捕获图像的尺寸(以像素为单位)。
对于rpicam-still、rpicam-jpeg和rpicam-vid,指定输出分辨率。
对于rpicam-raw,指定原始帧分辨率。对于具有2×2 bin读出模式的相机,指定一个等于或小于bin模式的分辨率捕获2×2 bin原始帧。
对于rpicam-hello没有效果。
录制1080p的视频

rpicam-vid -o test.h264 --width 1920 --height 1080

捕获2028×1520分辨率的JPEG。如果与HQ相机一起使用,则使用2×2 bin模式,因此原始文件(test. ng)包含2028×1520原始Bayer图像。

rpicam-still -r -o test.jpg --width 2028 --height 1520
  • --viewfinder-width
  • --viewfinder-height

每个参数都能接受一个数字,以像素为单位定义预览窗口中显示的图像的尺寸。不影响预览窗口的尺寸,因为图像会调整大小以适应。不影响捕获的静止图像或视频。

rpicam-still --viewfinder-width 1920 --viewfinder-height 1080
  • --mode 允许以以下冒号分隔格式指定相机模式:<width>:<height>:<bit-depth>:<packing>,如果提供的值没有精确匹配,系统将为传感器选择最接近的可用选项。可以使用packed(P)或者unpacked(U)的打包格式,影响存储的视频和静止图像的格式,但不影响传递到预览窗口的帧的格式。

Bit-depth和packing是可选的,Bit-depth默认是12,Packing默认为P(已打包)。
有关传感器可用的位深度、分辨率和packing选项的信息,请参见list-cameras。
如下所示:

    • 4056:3040:12:P - 4056×3040 resolution, 12 bits/pixel, packed.
    • 1632:1224:10 - 1632×1224 resolution, 10 bits/pixel.
    • 2592:1944:10:U - 2592×1944 resolution, 10 bits/pixel, unpacked.
    • 3264:2448 - 3264×2448 resolution.
  • --viewfinder-mode 与mode选项相同,但它适用于传递给预览窗口的数据。有关更多信息,请参阅mode文档。
  • --lores-width 和 --lores-height

提供来自相机的第二个低分辨率图像流,按比例缩小到指定的尺寸。每个都接受一个数字来定义低分辨率流的维度(以像素为单位)。可用于预览和视频模式。不提供静态捕获。对于rpicam-vid,禁用额外的颜色去噪处理。对结合图像后处理的图像分析有用。

rpicam-hello --lores-width 224 --lores-height 224
  • --hflip 水平翻转图像。不接受值。
rpicam-hello --hflip -t 0
  • --vflip 垂直翻转图像。不接受值。
 rpicam-hello --vflip -t 0
  • --rotation 旋转从传感器提取的图像。只接受值0或180。
rpicam-hello  --rotation 0
  • --roi 对从传感器全域提取的图像进行裁剪。接受四个十进制值,范围从0到1,格式如下:<x>,<y>,<w>,<h>。这些值中的每一个都以0到1之间的小数表示可用宽度和高度的百分比。

这些值定义了以下比例:
<x>:在提取图像之前要跳过的x坐标
<y>:在提取图像之前要跳过的y坐标
<w>:要提取的图像宽度
<h>:要提取的图像高度
默认为0,0,1,1(从第一个X坐标和第一个Y坐标开始,使用100%的图像宽度,使用100%的图像高度)。
例子:
rpicam-hello --roi 0.25,0.25,0.5,0.5选择从图像中心裁剪的像素总数的一半(跳过前25%的X坐标,跳过前25%的Y坐标,使用图像总宽度的50%,使用图像总高度的50%)。
rpicam-hello --roi 0,0,0.25,0.25选择从图像左上角裁剪的像素总数的四分之一(跳过X坐标的前0%,跳过Y坐标的前0%,使用图像宽度的25%,使用图像高度的25%)。

  • --hdr 默认值:关闭,在HDR模式下运行相机。如果没有传递值,则假定为auto。接受下列值之一:
    • off -禁用HDR。
    • auto -在支持的设备上启用HDR。如果可用,使用传感器的内置HDR模式。如果传感器没有内置HDR模式,则使用板载HDR模式(如果可用)。
    • single-exp 在支持的设备上启用HDR。如果可用,使用传感器的内置HDR模式。如果传感器没有内置HDR模式,则使用板载HDR模式(如果可用)。
rpicam-hello --hdr

使用板载HDR模式,如果可用,即使传感器有一个内置的HDR模式。如果板载HDR模式不可用,则禁用HDR。
Raspberry Pi 5及更高版本的设备具有板载HDR模式。
要检查传感器中内置的HDR模式,将此选项添加到列表相机中。

camera控制选项

以下选项控制影响相机图像质量的图像处理和算法。

  • sharpness

设置图像清晰度。接受以下范围内的数值:

    • 0.0是不应用锐化
    • 大于0.0但小于1.0的值应用的锐化量小于默认值
    • 1.0应用默认锐化量
    • 大于1.0的值应用额外的锐化
rpicam-hello --sharpness 0.0
  • contrast

指定图像对比度。接受以下范围内的数值:

    • 0.0适用最小对比度
    • 大于0.0但小于1.0的值应用的对比度小于默认值
    • 1.0应用默认的对比度
    • 大于1.0的值应用额外的对比度
rpicam-hello --contrast 0.0
  • brightness

指定图像亮度,作为输出图像中所有像素的偏移量添加。接受以下范围内的数值:

    • -1.0最小亮度(黑色)
    • 0.0应用标准亮度
    • 1.0应用最大亮度(白色)

对于更多的用法,推荐ev

rpicam-hello --brightness 1.0
  • saturation

指定图像颜色饱和度。接受以下范围内的数值:

    • 0.0应用最小饱和度(灰度)
    • 大于0.0但小于1.0的值应用的饱和度小于默认值
    • 1.0应用默认的饱和度
    • 大于1.0的值应用额外的饱和度
rpicam-hello --saturation  0.6
  • ev

指定图像的曝光值(EV)补偿。接受一个数值,该数值控制沿着以下频谱传递给自动曝光/增益控制(AEC/AGC)处理算法的目标值:

    • -10.0应用最小目标值
    • 0.0应用标准目标值
    • 10.0应用最大目标值
rpicam-hello --ev  10.0
  • shutter

指定使用快门的曝光时间,以微秒为单位。当您使用此选项时,增益仍然可以变化。如果相机运行的帧率太快,它不允许指定的曝光时间(例如,帧率为1fps,曝光时间为10000微秒),传感器将使用帧率允许的最大曝光时间。
有关官方相机的最小和最大快门时间列表,请参阅相机硬件文档。高于最大值的值会导致未定义的行为。

rpicam-hello --shutter 10000
  • gain

analoggain与gain的效果是一样的
设置组合模拟和数字增益。当传感器驱动可以提供所要求的增益时,只使用模拟增益。当模拟增益达到最大值时,ISP应用数字增益。接受数值。
有关官方摄像机的模拟增益限制列表,请参阅摄像机硬件文档
有时,即使在不超过模拟增益限制的情况下,数字增益也会超过1.0。这可能发生在以下情况:
其中任何一个颜色增益低于1.0,这将导致数字增益稳定在1.0/min(红增益,蓝增益)。这使总数字增益应用于任何高于1.0的颜色通道,以避免变色伪影。
自动曝光/增益控制(AEC/AGC)变化时的轻微差异。

rpicam-hello --gain 0.8
  • metering 默认值:centre

设置自动曝光/增益控制(AEC/AGC)算法的测光模式。接受以下值:

    • centre 中心加权计量
    • spot 点测光
    • average 平均或全帧测光
    • custom 自定义测光模式定义在相机调整文件

有关定义自定义测光模式和在现有测光模式中调整区域权重的更多信息,请参阅Raspberry Pi相机和libcamera的调谐指南

rpicam-hello --metering centre
  • exposure

设置曝光配置文件。更改曝光配置文件不应影响图像曝光。相反,不同的模式调整增益设置,以达到相同的净结果。接受以下值:

    • sport:曝光时间短,收益大
    • normal:正常暴露,正常增益
    • long:曝光时间长,收益小

您可以使用调谐文件编辑曝光配置文件。有关更多信息,请参阅Raspberry Pi相机和libcamera的调谐指南

rpicam-hello --exposure sport
  • awb

设置曝光配置文件。更改曝光配置文件不应影响图像曝光。相反,不同的模式调整增益设置,以达到相同的最终结果。接受以下值: 可用的白平衡模式:

模式 色温
auto 2500K ~ 8000K
incadescent 2500K ~ 3000K
tungsten 3000K ~3500K
fluorescent 4000K ~ 4700K
indoor 3000K ~ 5000K
daylight 5500K ~ 6500 K
cloudy 7000K ~ 8500K
custom 自定义范围, 通过调谐文件设置

这些值只是近似值:值可能会根据相机调整而变化。
没有模式完全禁用AWB。相反,你可以用awbgains来修正颜色增益。
有关AWB模式的更多信息,包括如何定义自定义模式,请参阅Raspberry Pi相机和libcamera的调谐指南

rpicam-hello --awb auto
  • awbgains

设置一个固定的红蓝增益值来代替自动白平衡(AWB)算法。设置非零值禁用AWB。接受以逗号分隔的数字输入,格式如下:<red_gain>,<blue_gain>

rpicam-jpeg -o test.jpg --awbgains 1.5,2.0
  • denoise

默认值:auto
设置去噪模式。接受以下值:

    • auto:启用标准空间降噪。对视频使用超快的彩色去噪,对图像使用高质量的彩色去噪。在预览窗口中不启用额外的颜色噪点。
    • off:关闭空间和颜色去噪。
    • cdn_off:禁用颜色噪点。
    • cdn_fast:使用快速颜色去噪。
    • cdn_hq:使用高质量的颜色去噪。由于吞吐量降低,不适合视频/取景器。

即使是快速的色彩降噪也会降低帧率。高质量的色彩降噪显著降低了帧率。

rpicam-hello --denoise off
  • tuning-file

指定摄像机调谐文件。调整文件允许您控制图像处理的许多方面,包括自动曝光/增益控制(AEC/AGC),自动白平衡(AWB),色彩阴影校正,色彩处理,去噪等等。接受调谐文件路径作为输入。 有关调谐文件的详细信息,请参见调谐文件

  • autofocus-mode

默认值:default 指定自动对焦模式。接受以下值:

    • default:将相机置于连续自动对焦模式,除非镜头位置或自动对焦捕捉覆盖到手动模式
    • manual:不移动镜头,除非手动配置镜头位置
    • auto:仅在相机启动时或在捕捉之前移动镜头进行自动对焦扫描,如果也使用了自动对焦捕捉功能
    • continuous:随场景变化自动调整镜头位置

此选项仅支持某些相机模块。

rpicam-hello --autofocus-mode auto
  • autofocus-range

默认值:normal
指定自动对焦范围。接受以下值:

    • normal:聚焦范围相当接近无穷远
    • macro:仅对焦近处的物体,包括相机支持的最近焦距
    • full:聚焦整个范围,从最近的物体到无穷远

此选项仅支持某些相机模块。

rpicam-hello autofocus-range normal
  • autofocus-speed

默认值:normal
指定自动对焦速度。接受以下值:

    • normal:以正常速度改变镜头位置
    • fast:快速改变镜头位置

此选项仅支持某些相机模块。

rpicam-hello --autofocus-speed normal
  • autofocus-window

指定传感器全域内的自动对焦窗口。接受四个十进制值,范围从0到1,格式如下:<x>,<y>,<w>,<h>。这些值中的每一个都以0到1之间的小数表示可用宽度和高度的百分比。
这些值定义了以下比例:
<x>:在应用自动对焦之前要跳过的x坐标
<y>:在应用自动对焦之前要跳过的y坐标
<w>:自动对焦区域宽度
<h>:自动对焦区域高度
默认值在两个维度中使用输出图像的中间三分之一(总图像区域的1/9)。
例子:

rpicam-hello—autofocus-window 0.25,0.25,0.5,0.5

选择从图像中心裁剪的像素总数的一半(跳过前25%的X坐标,跳过前25%的Y坐标,使用图像总宽度的50%,使用图像总高度的50%)。

rpicam-hello—autofocus-window 0,0,0.25,0.25

选择从图像左上角裁剪的像素总数的四分之一(跳过X坐标的前0%,跳过Y坐标的前0%,使用图像宽度的25%,使用图像高度的25%)。
此选项仅支持某些相机模块。

  • lens-position

默认值:default 将镜头移动到一个固定的焦距,通常以屈光度表示(单位为1/米距离)。接受以下值范围:

    • 0.0:将镜头移动到“无限远”位置
    • 任何其他数字:将镜头移动到1 /数字位置。例如,值2.0将聚焦在大约0.5m处
    • normal:将镜头移动到与镜头超焦距位置相对应的默认位置

镜头校准并不完善,因此同一型号的不同相机模块可能会有所不同。

  • verbose

别名:-v
默认值:1 设置详细程度。接受以下值:

    • 0:无输出
    • 1:正常输出
    • 2:详细输出
rpicam-hello --verbose 1

更详细的资料,点击这里参考。

代码调用摄像头

树莓派官方提供的picamera2库是针对libcamera 驱动提供的 python库。
注意:Picamera2仅支持Raspberry Pi OS Bullseye 镜像。

库安装

安装picamera2,Picamera2 现已预装在最新的几版Raspberry Pi OS Bullseye镜像中,您可以通过终端做以下操作来更新库:

sudo apt update
sudo apt upgrade
sudo apt install -y python3-picamera2

CSI摄像头使用

CSI摄像头检测

使用前需要先打开终端输入以下指令,来检查摄像头是否正常工作

libcamera-hello -t 0 

预览窗口实现

预览窗口参数
  • x - 预览窗口的 x 偏移量
  • y - 预览窗口的 y 偏移量
  • width - 预览窗口的宽度
  • height - 预览窗口的高度
  • transform - 允许相机图像在显示器上水平和/或垂直翻转的变换

所有参数都是可选的,如果省略,将选择默认值。以下示例将放置一个800x600像素的预览窗口位于显示屏上的(100,200),并将水平镜像相机预览图像:

from picamera2 import Picamera2, Preview
from libcamera import Transform
picam2 = Picamera2()
picam2.start_preview(Preview.QTGL, x=100, y=200, width=800, height=600,
transform=Transform(hflip=1))
picam2.start()
支持的转换
  • Transform() - 恒等转换,这是默认值
  • Transform(hflip=1) - 水平翻转
  • Transform(vflip=1) - 垂直翻转
  • Transform(hflip=1,vflip=1) - 水平和垂直翻转(相当于180度旋转)

注意:这里的显示转换对实际图像并没有任何影响,在上面的示例中,必须在调用picam2.start()之前调用start_preview()函数,如果相机的图像与预览窗口的长宽比不同,它们将被变成letter-boxed或者pillar-boxed式以使图像保持合适的长宽比

无预览(NULL preview)

通常是预览窗口通过接收和传递相机图像来驱动libcamera系统到应用程序,然后在用户不再需要这些缓冲区时将它们回收回libcamera。结果是,即使没有显示预览图像,仍然需要运行一些东西来接收和返回这些相机图像。这正是无预览所做的。它什么也没有显示,它只是驱动摄像系统。如果系统尚未运行预览,则必须提前开启备用预览窗口。实际上每当启动相机系统 (picam2.start())时,都会自动启动无预览。您可以开启无预览显示,像这样:

from picamera2 import Picamera2, Preview
picam2 = Picamera2()
picam2.start_preview(Preview.NULL)
开启和关闭预览

start_preview函数的第一个参数可以采用以下值:

  • None - 不启动任何类型的预览。应用程序必须提供自己的代码来驱动摄像头系统。
  • False - NULL预览启动。
  • True - 其他三个预览中的一个已经开始。

不建议开始和停止预览窗口同时进行,因为在此期间摄像头帧很可能被丢弃。Start函数会接受一个show_preview形参,该形参可以是这些相同值中的任意一个。这是只是一种简写,可以减少代码的书写量。注意,停止相机(Picamera2.stop)不会停止预览窗口,因此必须在此之前显式调用stop_preview函数,例如,下面的脚本将启动相机系统运行,运行一会儿,然后尝试自动检测要使用哪个预览窗口,以便实际开始显示图像:

from picamera2 import Picamera2, Preview
import time
picam2 = Picamera2()
config = picam2.create_preview_configuration()
picam2.configure(config)
picam2.start() #启动相机捕获
time.sleep(2) #为等待相机初始化完成延迟2秒
picam2.stop_preview() #停止相机预览,防止占用资源,从而开启相机失败
picam2.start_preview(True) #开启相机预览
time.sleep(2) #两秒后关闭相机

Picamera2的高级API

Picamera2有一些高级和非常方便的功能,用于捕获图像和视频录制。寥寥几句代码便可实现捕获图像:

from picamera2 import Picamera2
picam2 = Picamera2()
picam2.start_and_capture_file("test.jpg")

也可以使用start_and_capture_files函数捕获多个图像,或者录制一个五秒钟的视频:

from picamera2 import Picamera2
picam2 = Picamera2()
picam2.start_and_record_video("test.mp4", duration=5)

如果想了解底层代码,您可以参考以下代码:

from picamera2 import Picamera2, Preview
import time
picam2 = Picamera2() # 创建一个 Picamera2 实例
camera_config = picam2.create_preview_configuration() # 创建摄像头预览配置
picam2.configure(camera_config) # 配置摄像头
picam2.start_preview(Preview.QTGL) # 启动摄像头预览(使用 QTGL 预览窗口管理器)
picam2.start() # 启动摄像头
time.sleep(2) # 等待 2 秒,确保摄像头已启动
picam2.capture_file("test.jpg")  # 拍摄照片并保存为 "test.jpg"

配置摄像头

Picamera2提供了许多配置生成方法,可用于提供合适的配置,常见的用例如下:

  • Picamera2. create_preview_configuration 将生成用于在显示器上或在捕获静止图像之前显示相机预览图像的配置
  • Picamera2. create_still_configuration 将生成一个适合捕获高分辨率静止图像的配置
  • Picamera2. create_video_configuration 将生成一个适合录制视频文件的配置

例如,设置摄像头,让它开始传送你可能会用到的预览图像流:

from picamera2 import Picamera2
picam2 = Picamera2()
config = picam2.create_preview_configuration()
picam2.configure(config)
picam2.start()
一般参数配置
  • transform -无论相机图像水平或垂直镜像或两者兼而有之(给予180度旋转)。
    可以使用transform关键字参数将转换传递给所有的配置生成方法,Picamera2只支持上面所示的转换。其他变换(包括图像变换)存在,但是不支持。如果未指定,则转换始终默认为恒等转换。如下:
    from picamera2 import Picamera2
    from libcamera import Transform
    picam2 = Picamera2()
    preview_config = picam2.create_preview_configuration(transform=Transform(hflip=True))
    

  • colour_space -输出图像的颜色空间。主流和 lores 流必须始终共享相同色彩空间。原始流总是在相机特定的色彩空间中。
    libcamera中色彩空间的实现与Linux V4L2 API非常接近。具体的选择有为每种原色提供传递函数、YCbCr编码矩阵和量化(或范围)。此外,libcamera为常用的色彩空间提供了方便的速记形式:
    >>> from libcamera import ColorSpace
    >>> ColorSpace.Sycc()
    <libcamera.ColorSpace 'sYCC'>
    >>> ColorSpace.Rec709()
    <libcamera.ColorSpace 'Rec709'>
    

    这些实际上是Pi的相机系统所支持的唯一色彩空间。所需的选择可以传递给所有使用 color_space 关键字参数的配置生成方法:

    from picamera2 import Picamera2
    from libcamera import ColorSpace
    picam2 = Picamera2()
    preview_config = picam2.create_preview_configuration(colour_space=ColorSpace.Sycc())
    

    当省略时,Picamera2将根据用例选择默认值:
    •create_preview_configuration和create_still_configuration将默认使用sYCC颜色空间平均sRGB原色和传递函数和全范围BT.601 YCbCr编码)。
    •如果主流请求RGB格式,create_video_configuration将选择sYCC。对于YUV格式,如果分辨率小于1280x720,它会选择SMPTE 170M,否则选择Rec.709。

  • buffer_count -分配给相机系统的缓冲区的数量。一组缓冲区表示每个被请求的流都有一个缓冲区。
    这定义了为相机系统分配多少组缓冲区(每个请求流一个)使用。分配更多的缓冲可以意味着相机将运行更平稳,丢帧更少,缺点是,特别是在高分辨率下,可能没有足够的可用内存。
    •create_preview_configuration请求四组缓冲区
    •create_still_configuration只请求一组缓冲区(因为这些通常是大的全分辨率缓冲区)
    •create_video_configuration请求六个缓冲区,作为编码和输出视频所涉及的额外工作流使得它更容易受到抖动或延迟的影响,这可以通过更长的缓冲区队列来缓解。
    可以使用buffer_count关键字参数在所有配置生成方法中重写缓冲区的数量:
    from picamera2 import Picamera2
    picam2 = Picamera2()
    preview_config = picam2.create_still_configuration(buffer_count=2)
    
  • queue -是否允许系统将准备捕获请求的帧排队。
    默认情况下,Picamera2保留从相机接收到的最后一帧,当你进行捕获时请求时,此帧可能会返回给您。这对于突发捕获很有用,特别是当应用程序正在进行一些处理时,可能需要比帧周期稍长的时间。在这些情况下,排队的帧可以是立即返回,而不是闲置到下一个相机帧到达。 但这确实意味着返回的帧可以在捕获请求发生之前稍早一点,最多一个帧周期。如果不需要此行为,请将队列参数设置为False。例如:
    from picamera2 import Picamera2
    picam2 = Picamera2()
    preview_config = picam2.create_preview_configuration(queue=False)
    

    注意,当buffer_count设置为1时(仍然是捕获配置的默认情况),则没有帧永远排队(因为唯一的缓冲区会完全停止相机管道)。

  • display - 这个名称(如果有的话)的流将显示在预览窗口。它实际上不会以任何方式影响相机图像,只会影响Picamera2对它们的处理。
    通常我们会在预览窗口中显示主流。在某些情况下,最好是显示较低分辨率的图像(来自lores流)。我们可以用:
    from picamera2 import Picamera2
    picam2 = Picamera2()
    config = picam2.create_still_configuration(lores={"size": (320, 240)}, display="lores")
    

    这将请求一个全分辨率的主流,但随后也会显示一个QVGA图像流(即使应用程序没有显式地请求,主流也总是被定义的)。display参数可以取None值,这意味着没有图像将被呈现到预览窗口。事实上,这是create_still_configuration方法的默认选择。

  • encode - 这个名称(如果有的话)的流是要编码的,如果一个视频录制开始。这也是不会以任何方式影响相机图像,只会影响Picamera2对它们的处理。
    这类似于display参数,因为它命名了在开始视频录制时将被编码的流为main或lores。默认情况下,我们通常会对主流进行编码,但用户可以有一个应用程序,如果用户想要录制低分辨率的视频流的话:
    from picamera2 import Picamera2
    picam2 = Picamera2()
    config = picam2.create_video_configuration(main={"size": (2048, 1536)}, lores={"size": (320,
    240)}, encode="lores")
    

    这将允许录制QVGA流,同时允许同时捕获2048 × 1536静态图像。encode参数也可以取值None,这也是create_still_configuration的默认选择方法。

自动对焦功能

  • 仅适用于能自动对焦的摄像头

自动对焦控制和其他控制一样遵循同样的一般规则。只要使用libcamera的版本(如libcamera),这些控件就可以正常工作(由Raspberry Pi提供)正确地实现了libcamera发布的自动对焦API,以及附加的相机模块实际上有自动对焦(如树莓派相机模块3)。 不支持自动对焦的相机模块(包括早期的树莓派相机模块和HQ相机)这些选项不可用(在 Picamera2.camera_controls属性中),当尝试设置会显示失败。 以下为将相机设置为连续自动对焦模式:

from picamera2 import Picamera2
from libcamera import controls
import time
picam2 = Picamera2()
config = picam2.create_preview_configuration()
picam2.configure(config)
picam2.start(show_preview=True)
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous})
time.sleep(2)

USB摄像头

Picamera2对USB摄像头(如网络摄像头)的支持有限。可以连接多个USB摄像头和CSI2摄像头(后者连接到Pi的专用摄像头端口),可以用通常的方式创建Picamera2对象,但是只有主流可用。支持的格式将取决于相机,但Picamera2原则上可以处理MJPEG和YUYV相机,在哪里相机支持两种格式,您可以通过请求格式“MJPEG”或“YUYV”来选择。 USB相机只能使用软件渲染的Qt预览窗口(preview . Qt)。没有硬件辅助支持渲染。MJPEG流可以直接渲染,但是YUYV需要安装OpenCV以便将图像转换为Qt可以理解的格式。这两种情况都将使用大量额外的CPU。capture_buffer方法将为你提供每帧的原始相机数据(来自MJPEG相机的JPEG比特流,或来自YUYV相机的未压缩YUYV图像)。如下:

from picamera2 import Picamera2, Preview
picam2 = Picamera2()
config = picam2.create_preview_configuration({"format": "MJPEG"})
picam2.configure(config)
picam2.start_preview(Preview.QT)
picam2.start()
jpeg_buffer = picam2.capture_buffer()

如果您有多个相机,需要发现要打开哪个摄像头,请使用Picamera2.global_camera_info方法。一般来说,用户应该假设其他功能,如视频录制,摄像头控制是支持的树莓派(Raspberry Pi)摄像头等等都是不可用的。USB摄像头也不支持热插拔, 当增加或减少摄像头时,应完全关闭并重新启动。

资料

文档

相关链接

树莓派入门教程(新)
树莓派入门教程
树莓派OpenCV教程
树莓派littleGL系列教程
树莓派QT教程
树莓派OpenWrt教程


FAQ



技术支持


联系人:张工
邮箱:3004637648@qq.com
QQ:3004637648
微信:扫下方二维码添加
QRCode SiminZhang.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证