Raspberry Pi 官方AI摄像头模块的连接方式与之前的摄像头模块相同。CSI 摄像头端口位于主机上,基本功能相同。
AI摄像头模块与之前的模块不同,它在摄像头一侧安装了一个小型人工智能加速器(RP2040)。
RP2040 与 Raspberry Pi Pico 的 MCU 相同。
RP2040 可让摄像头执行人工智能所需的部分处理,因此可以利用 Raspberry Pi 本身的处理能力来实现这一目标。
工业级 Raspberry Pi 通过以下设备进行了测试 Compute Module 5 (CM5 ).传统的 PL-R4 配备了 CM4,但可以用相同外形尺寸的 CM5 代替。在这种情况下,我们使用了带有 CM5 的 PL-R5-M 型号。此外,我们还连接了人工智能加速器之一 Hailo。
参照官方文件,体验了基本操作。
AI摄像头模块和 Hailo 可在市场上买到,任何人都可以试用。
传统摄像机模块与AI摄像头模块的区别
官方文档中有一张清晰的示意图。左侧代表之前的摄像头模块。可选的人工智能加速器可以输入/输出。
右侧是AI摄像头模块,显示了 IMX500 内部的人工智能加速器。
AI摄像头模块中的芯片(MCU)是 RP2040,与 Raspberry Pi Pico 相似。
该芯片用作辅助芯片,因此可以在没有可选人工智能加速器的环境中工作。

当时的环境
这次,不仅是 AI 摄像头模块,Hailo(AI 加速器)也已作为选件连接到主机的 M.2 插槽上。
该设备安装了带有 ComputeModule 5 的 PL-R5-M。
- PL-R5-M USB IP20,带Compute Module 5(工业级树莓派)
- 树莓派操作系统Bookworm
- AI摄像头AI摄像头模块(IMX500)
- Hailo(人工智能加速器)

此处省略 Hailo 设置。请参阅官方文档。
AI摄像头模块有一个专用软件包;我在更新操作系统后用 apt 安装了它。
sudo apt update && sudo apt full-upgrade
sudo apt install imx500-all
正如之前所报告的,必须更改 config.txt 中的参数,摄像头模块才能正常工作。(参考:在工业级 Raspberry Pi 上轻松连接摄像头。)
对于 Pi 5(Bookworm),config.txt 位于固件下。
sudo nano /boot/firmware/config.txt
config.txt 中的更改明确关闭了相机自动识别功能,并指定了 AI摄像头模块 IMX500。
camera_auto_detect=0
[all]
dtoverlay=imx500,cam0
*试验中使用的 PL-R5-M 是Compute Module 5 的专有设备,因此还需要添加或更改其他部件。
重启后,使用该命令查看 AI 摄像机是否被自动识别。
imx500 已找到。现在可以开始了。
libcamera-hello --list-cameras
Available cameras
-----------------
0 : imx500 [4056x3040 10-bit RGGB] (/base/axi/pcie@120000/rp1/i2c@88000/imx500@1a)
Modes: 'SRGGB10_CSI2P' : 2028x1520 [30.02 fps - (0, 0)/4056x3040 crop]
4056x3040 [10.00 fps - (0, 0)/4056x3040 crop]
尝试物体检测
既然AI摄像头已经被识别,我们就可以运行样本了。 /usr/share/rpi-camera-assets
可与 rpicam-app 配合使用的文件安装在 .NET Framework 2.0 中。它们是 json 格式。
另外,AI 模型安装在/usr/share/imx500-models
。
我发现这可以通过 Python 命令指定。扩展名为 rpk。
如文件所述,我通过使用 rpicam-hello 命令运行imx500_mobilenet_ssd.json
,在对象上绘制了一个类似方框的边框。
rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json

由于我们这次设置的是 Hailo,因此也运行了标有 Hailo 的 json 文件。
,结果将显示相同的边框。
rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/Hailo_yolov6_inference.json

以前的检测率为 62%,而 Hailo_yolov6_inference.json 中的检测率为 91%。
执行后,终端屏幕上会出现一个进度条(网络固件更新),在安装 Hailo 的情况下,这个进度条的速度很快(几秒钟)。
顺便提一下,通过--viewfinder-width 1920 --viewfinder-height 1080 --framerate 30
命令选项,您可以指定图像的宽高比、帧频等。
Hailo_yolov6~ 中的 “YOLO “是物体检测算法。您有 6 版、8 版等不同版本。
如果您查看我之前提到的imx500_mobilenet_ssd.json
文件,就会发现我使用的是/usr/share/imx500-models
.(rpk 文件)中的人工智能模型。
{
"imx500_object_detection":
{
"max_detections" : 5,
"threshold" : 0.6,
"network_file": "/usr/share/imx500-models/imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk",
...(以下、略)
其他资产文件
我已尝试安装其他 json 文件。
,您可以在 json 文件中指定每个参数。
以下是按原样运行的一些结果。
./usr/share/rpi-camera-assets
├── annotate_cv.json
├── face_detect_cv.json
├── Hailo_classifier.json
├── Hailo_pose_inf_fl.json
├── Hailo_scrfd.json
├── Hailo_yolov5_personface.json
├── Hailo_yolov5_segmentation.json
├── Hailo_yolov6_inference.json
├── Hailo_yolov8_inference.json
├── Hailo_yolov8_pose.json
├── Hailo_yolox_inference.json
├── hdr.json
├── imx500_mobilenet_ssd.json
├── imx500_posenet.json
├── motion_detect.json
├── negate.json
└── sobel_cv.json
annotate_cv.json
显示的帧数和其他处理细节(注释)。

Hailo_classifier.json
你可以看到左上角的文字随着摄像头方向的改变而改变。

Hailo_scrfd.json
启动另一个窗口,我可以放大、复制到剪贴板等。

negate.json
否定显示。

sobel_cv.json
Sobel 滤波器,用于增强边缘效果。

到此为止,已经使用了 rpicam 命令。
接下来,我们将使用 Picamera2 运行 Python 文件的演示。
安装 Picamera2
要在 Python 代码中控制相机模块,我们需要在代码中导入 Picamera2。
Picamera2 预装了当前操作系统;必须使用 Raspberry Pi OS Bullseye 之前的操作系统镜像文件或操作系统精简镜像文件单独安装。
参考https://github.com/raspberrypi/picamera2)
大多数示例都使用 OpenCV。安装依赖项。
sudo apt install python3-opencv python3-munkres
我用 git 克隆了 Picamera2,并在演示示例中找到了人工智能相机模块(IMX500)的目录。
git clone https://github.com/raspberrypi/picamera2.git
cd picamera2/examples/imx500
用 Python 编写的五个演示文件。
./picamera2/examples/imx500
├── imx500_classification_demo.py
├── imx500_object_detection_demo_mp.py
├── imx500_object_detection_demo.py
├── imx500_pose_estimation_higherhrnet_demo.py
└── imx500_segmentation_demo.py
Hailo目录中也有三个。
./picamera2/examples/Hailo
├── coco.txt
├── detect.py
├── pose.py
└── pose_utils.py
试用 Python 演示程序
根据官方文档,使用人工智能模型imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk
运行imx500_object_detection_demo.py
。
python imx500_object_detection_demo.py --model /usr/share/imx500-models/imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk

泰迪熊的事你说对了。
这个毛绒玩具是 Raspberry Pi 的官方吉祥物。它的名字叫 Babbage Bear,但在没有学习过这个名字的情况下,我们无法确定它的身份。泰迪熊是作为毛绒玩具预设的,因为它实际上是一只泰迪熊,所以没有问题。
ssd_mobilenetv2 “是一个用于在移动设备等资源稀缺环境中检测对象的模型,正如 “移动 “一词所表示的那样。
它已发布到 MobileNET v3。
接下来,我们还尝试了一个姿势(骨骼)检测演示。
这个演示只需要按原样运行即可。
python imx500_pose_estimation_higherhrnet_demo.py

对不起,我对相机模块和机械臂之间的距离有疑问。
什么都不用做,三个点?我什么都不用做,3 个点就被识别并连接成一个骨架。有人告诉我,骨架的数量可以通过指定最大骨架数等方式进行调整。
如果距离太近,我无法让它工作,但如果距离是 60 厘米,骨架线就会自动出现。
人工智能模型 rpk 共有 24 个文件。
如果你了解深度学习、人工智能和 Python 语言,为什么不编写一个 Python 程序来指定每个人工智能模型呢?
./usr/share/imx500-models
├── imx500_network_deeplabv3plus.rpk
├── imx500_network_efficientdet_lite0_pp.rpk
├── imx500_network_efficientnet_bo.rpk
├── imx500_network_efficientnet_lite0.rpk
├── imx500_network_efficientnetv2_b0.rpk
├── imx500_network_efficientnetv2_b1.rpk
├── imx500_network_efficientnetv2_b2.rpk
├── imx500_network_higherhrnet_coco.rpk
├── imx500_network_inputtensoronly.rpk
├── imx500_network_levit_128s.rpk
├── imx500_network_mnasnet1.0.rpk
├── imx500_network_mobilenet_v2.rpk
├── imx500_network_mobilevit_xs.rpk
├── imx500_network_mobilevit_xxs.rpk
├── imx500_network_nanodet_plus_416x416_pp.rpk
├── imx500_network_nanodet_plus_416x416.rpk
├── imx500_network_posenet.rpk
├── imx500_network_regnetx_002.rpk
├── imx500_network_regnety_002.rpk
├── imx500_network_regnety_004.rpk
├── imx500_network_resnet18.rpk
├── imx500_network_shufflenet_v2_x1_5.rpk
├── imx500_network_squeezenet1.0.rpk
└── imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk
试试人工智能摄像头。
尽管这只是一个示例操作,但如果您执行命令并在摄像头前拿着东西,它似乎会毫无压力地识别出来。
因为我们同时使用了人工智能相机模块和人工智能加速器,所以整个过程非常顺利。
只有 AI 摄像机模块在执行命令后,网络固件更新需要一点时间。一旦成功,其余的操作都是一样的。
人工智能中使用的许多单词和机制,如 YOLO、TensorFlow 和 Hailo,如果没有相关知识,看起来会很复杂。由于这是一款相机,因此了解图像和视频知识也是一个好主意。
另一方面,如果您熟悉它们,您可能会对 Raspberry Pi 的功能感到惊讶。
虽然发布的文档相当详细,但示例将让您更好地了解人工智能摄像头模块的功能。
参考资料人工智能相机模块正式文件
文章由拉斯必达提供
非工程师也能愉快使用的 Raspberry Pi 信息网站。 raspida.com Raspida 经营着 raspida.com,这是一个非工程师也能愉快使用的 Raspberry Pi 信息网站。他为 PiLink 网站提供有关工业级 Raspberry Pi 的技术博文。