Pi AI Cameraを2つ繋いでマルチカメラシステム試してみた

## Pi AI Cameraを2つ繋いでマルチカメラシステム試してみた


こんにちは。

ソニーセミコンダクタソリューションズの明です。

本記事では、2台のカメラで撮影した風景に対し、異なるAIモデルで認識を行わせる方法について紹介します。


## はじめに
2台のカメラで異なるAI認識をするためには、Raspberry Pi 5以前では下記のようにカメラ2台、Raspberry Pi 2台が必要でした。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995866/3f50735b-cae7-447d-96e8-047c9129373c.png)

しかし、Raspberry Pi 5ではCameraの入力が1系統から2系統に増えたことで、Raspberry Pi1台に対してカメラ2台まで接続が可能となっています。

そこで本記事では、1台のRaspberry Pi5で2台のRaspberry Pi AI Cameraを接続し、異なるAIモデルを動作させる方法を紹介します。

本記事では動作検証用のサンプルを公開し、下記の通り実行まで解説します。

1. Prerequisites
2. Raspberry Pi 5とRaspberry Pi AI Camera2台の接続
3. サンプルアプリについて
4. サンプルアプリのオプションについて
5. 実行例


# 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台接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995866/14b019fb-32dc-404e-a914-7f01c7e04a5c.png)

２台のカメラが認識されているか確認しましょう。

私の環境では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. サンプルアプリについて

本記事で利用するサンプルは下記で公開しています。

https://github.com/SonySemiconductorSolutions/aitrios-rpi-sandbox-dev/tree/develop/examples/20250124_2camera_ROI_Script


リンク先のサンプルは、下記の構成で公開しています。

これらのサンプルから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つのオプションを用意しています。

<table>
  <tr>
    <th>long format</th>
    <th>description</th>
    <th>default</th>
  </tr>
  <tr>
    <td>--inference-roi</td>
    <td>	
ROIを"X,Y,Width,Height"の形式で指定します。ROIの数値は4Kの解像度(4056,3040)を前提に設定してください。</td>
    <td></td>
  </tr>
  <tr>
    <td>--camera-num</td>
    <td>実行するカメラの番号(0か1)を指定して下さい</td>
    <td>1</td>
  </tr>
  <tr>
    <td>--show-preview-roi</td>
    <td>ROI領域のみを拡大表示します</td>
    <td></td>
  </tr>
</table>

下記にターミナルで入力例を示します。

```
$ 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


まずは例として、カメラ０にclassification, カメラ１に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になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995866/11b886a4-ee40-4071-a59c-7f59b33ef560.png)



次の例として、カメラ０にsegmentation, カメラ１に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
```
起動に成功すると、先ほど同様に下記の通りそれぞれのカメラで異なる認識表示がされます。

         
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3995866/2102ef64-b874-496a-a401-7b97a05e7336.png)


  
### まとめ

本記事では、Raspberry Piを用いて2台のRaspberry AI Cameraを稼働し、異なるAI認識を行う方法について紹介しました。

2台のカメラでは異なる視野になりますが、ROIで重なっている部分へ認識対象を絞ることで擬似的に同一風景への異なるAI認識が実現できたかと思います。

# 困った時は

もし、記事の途中でうまくいかなかった場合は、気軽にこの記事にコメントいただいたり、以下のサポートのページもご覧ください。  
コメントのお返事にはお時間を頂く可能性もありますがご了承ください。

<!-----------------RasPiのみに関連する記事の場合、下記のAITRiOSサポートへの誘導は記載しないでください。------------------->  
- [Support (FAQ)](https://developer.aitrios.sony-semicon.com/edge-ai-sensing/support)

<!-----------------RasPiのみに関連する記事の場合、下記のAITRiOSサポートへの誘導は記載しないでください。------------------->  
また、記事の内容以外で AITRIOS についてお困りごとなどあれば以下よりお問い合わせください。
- [Contact Us](https://developer.aitrios.sony-semicon.com/edge-ai-sensing/contact-us)

<!-----------------RasPiに関する記事が含まれる場合は下記を追加してください。------------------->  
RaspberryPiに関連する疑問がある場合は、下記フォーラムをご確認、ご活用ください。
- [Raspberry Pi Forums](https://forums.raspberrypi.com/)