Pi AI Cameraを2つ繋いでマルチカメラシステム試してみた
こんにちは。
ソニーセミコンダクタソリューションズの明です。
本記事では、2台のカメラで撮影した風景に対し、異なるAIモデルで認識を行わせる方法について紹介します。
はじめに
2台のカメラで異なるAI認識をするためには、Raspberry Pi 5以前では下記のようにカメラ2台、Raspberry Pi 2台が必要でした。
しかし、Raspberry Pi 5ではCameraの入力が1系統から2系統に増えたことで、Raspberry Pi1台に対してカメラ2台まで接続が可能となっています。
そこで本記事では、1台のRaspberry Pi5で2台のRaspberry Pi AI Cameraを接続し、異なるAIモデルを動作させる方法を紹介します。
本記事では動作検証用のサンプルを公開し、下記の通り実行まで解説します。
- Prerequisites
- Raspberry Pi 5とRaspberry Pi AI Camera2台の接続
- サンプルアプリについて
- サンプルアプリのオプションについて
- 実行例
1. Prerequisites
最初にアップデートをかけます。
$ sudo apt update && sudo apt full-upgrade
Raspberry Pi AI Cameraで必要となる環境をインストールします。
$ sudo apt install imx500-all
Linux Kernel versionを確認します。
記事投稿時点では、下記のように"(2024-11-25)" と表示されます。
$ uname -a
Linux raspberrypi 6.6.62+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.62-1+rpt1 (2024-11-25) aarch64 GNU/Linux
2. Raspberry Pi 5とRaspberry Pi AI Camera2台の接続
カメラ2台をRaspberry Pi 5 へ2台接続します。
2台のカメラが認識されているか確認しましょう。
私の環境では2台とも認識され、下記のように表示されました。
$ rpicam-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]
1 : imx500 [4056x3040 10-bit RGGB] (/base/axi/pcie@120000/rp1/i2c@80000/imx500@1a)
Modes: 'SRGGB10_CSI2P' : 2028x1520 [30.02 fps - (0, 0)/4056x3040 crop] 4056x3040 [10.00 fps - (0, 0)/4056x3040 crop]
3. サンプルアプリについて
本記事で利用するサンプルは下記で公開しています。
リンク先のサンプルは、下記の構成で公開しています。
これらのサンプルから2つ選び、それぞれのカメラに対して使用します。
file | description |
---|---|
README.md | 各scriptのusageのまとめ |
imx500_classification_demo_roi.py | 特定のROIに対してClassificationを行うサンプル |
imx500_object_detection_demo_roi.py | 特定のROIに対してObject detectionを行うサンプル |
imx500_pose_estimation_higherhrnet_demo_roi.py | 特定のROIに対して、Pose estimationを行うサンプル |
imx500_segmentation_demo_roi.py | 特定のROIに対して、Segmentationを行うサンプル |
4. サンプルアプリのオプションについて
各サンプルでは、オプションを下記の通り3つのオプションを用意しています。
long format | description | default |
---|---|---|
--inference-roi | ROIを"X,Y,Width,Height"の形式で指定します。ROIの数値は4Kの解像度(4056,3040)を前提に設定してください。 | |
--camera-num | 実行するカメラの番号(0か1)を指定して下さい | 1 |
--show-preview-roi | ROI領域のみを拡大表示します |
下記にターミナルで入力例を示します。
$ imx500_xxx_demo_roi.py --inference-roi [X, Y, Width, Height] --camera-num CAMERA_NUM [0か1] --show-preview-roi
5. 実行例
本記事での実行環境は下記です。
- Raspberry Pi 5
- Raspberry Pi AI Camera 2台
- Linux version:Linux raspberrypi 6.6.62+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.62-1+rpt1 (2024-11-25) aarch64 GNU/Linux
まずは例として、カメラ0にclassification, カメラ1にobject detectionを動かします。
ターミナルを2つ立ち上げ、それぞれのターミナルでカメラ0、1の順に下記の通り入力してください。
- カメラ 0
$ python imx500_classification_demo_roi.py --inference-roi 1200,900,1200,1200 --camera-num 0 -i
- カメラ 1
$ python imx500_object_detection_demo_roi.py --inference-roi 1200,900,1200,1200 -i
起動に成功すると、このように2台のカメラで同じROIに対し、異なるAI認識をかけることができます。
なお、スクリーンショット内左の認識表示classificationがカメラ0、右の認識表示object detectionがカメラ1になります。
次の例として、カメラ0にsegmentation, カメラ1にobject detectionを動かします。
S
こちらも先ほどと同様ターミナルを2つ立ち上げ、それぞれのターミナルでカメラ0、1の順に下記の通り入力してくださSい。
- カメラ 0
$ python imx500_segmentation_demo_roi.py --inference-roi 1200,900,1200,1200 --camera-num 0 --show-preview-roi -i
- カメラ 1
$ python imx500_object_detection_demo_roi.py --inference-roi 1200,900,1200,1200 -i
起動に成功すると、先ほど同様に下記の通りそれぞれのカメラで異なる認識表示がされます。
まとめ
本記事では、Raspberry Piを用いて2台のRaspberry AI Cameraを稼働し、異なるAI認識を行う方法について紹介しました。
2台のカメラでは異なる視野になりますが、ROIで重なっている部分へ認識対象を絞ることで擬似的に同一風景への異なるAI認識が実現できたかと思います。
困った時は
もし、記事の途中でうまくいかなかった場合は、気軽にこの記事にコメントいただいたり、以下のサポートのページもご覧ください。
コメントのお返事にはお時間を頂く可能性もありますがご了承ください。
また、記事の内容以外で AITRIOS についてお困りごとなどあれば以下よりお問い合わせください。
RaspberryPiに関連する疑問がある場合は、下記フォーラムをご確認、ご活用ください。