RaspberryPi AI CameraとOpenPLCを接続して、人物検出状況をパトランプで通知してみた

## はじめに

こんにちは！

ソニーセミコンダクタソリューションズの平尾と申します。

2024年9月、Raspberry Pi AI Cameraが発売されました。公式サイトでは、クラス分類や物体検出といった複数のタスクのサンプルが公開されており、誰でも簡単にエッジ環境でAIモデルを実行できるようになりました。

AIの活用事例の1つに人物検出があります。人物検出AIモデルは、人流計測、侵入検知、混雑検知など、様々な用途に応用可能です。従来の画像による人物検出では、撮影した画像を環境構築済みのPCやクラウドに転送し、AIモデルによる推論を行う必要がありました。しかし、この方式では撮影画像がPCやクラウドに残る可能性があり、プライバシー保護の観点から導入の障壁となっています。

これに対し、RaspberryPi AI Cameraでは、センサ内部でAI処理が完結し、人の検出状況や位置情報のみをメタデータとして転送できるため、プライバシーに配慮した人物検出が実現可能です。

本記事では、Raspberry Pi AI Cameraで人物検出を行い、PLCを用いて人物検出状況をパトランプで通知するシステムを構築します。PLCは製造設備のシーケンス制御を行うための専用コンピュータで、製造業を中心に幅広く使用されています。PLCを介した通知方法には様々な選択肢がありますが、本記事では視覚的な理解のしやすさを重視し、動画のようにパトランプの点灯による人物検出情報の通知を実装します。

<img width="1200" alt="human_detection1.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/9ebf3710-9dc4-418a-baa9-7b6d9e5da5a4.gif">

::: note warn

人物のモザイク処理については別途実装しています。詳細は記事をご覧ください。

- [Raspberry Pi AI Cameraでプライバシーマスク付与してみた](https://qiita.com/SSS-ShuntaKoyama/private/72f2aceb5fafe005f349)

:::

## この記事でできること
- Raspberry Pi AI cameraを使用した人物検知アプリケーションの実行
  - 本記事で作成するコードは下記githubから取得可能です。
  - https://github.com/SonySemiconductorSolutions/aitrios-rpi-sandbox/blob/main/examples/plc_human_detection
- Raspberry Pi AI Cameraの推論結果を用いたOpenPLC経由での外部機器の制御
  - ※ 本記事では外部機器としてパトランプを使用していますが、使用しない場合もアプリケーション上から動作確認が可能です。 

## 必要機材
必要機材のリストは以下のとおりです。

|    |  Item  |  必須  |  メモ  |
| ---- | ---- | ---- | ---- |
|  1  |  Raspberry Pi AI Camera  |  *  |  購入先は[こちら](https://www.raspberrypi.com/products/ai-camera/)  |
|  2  |  Raspberry Pi × 2 |  *  | 本記事ではRaspberry Pi 4を1台, Raspberry Pi 5を1台使用しています。OpenPLCの使用にはRaspberry Pi 4以前のデバイスが必要です。Raspberry Pi AI Cameraの対応可能機種は[こちら](https://www.raspberrypi.com/documentation/accessories/ai-camera.html#prerequisites)  |
|  3  |  TypeCケーブル  |  *  | 電源接続用  |
|  4  |  micro SDカード  |  *  | 32GB以上推奨  |
|  5  |  マウス  |    | 開発で必要な方のみ  |
|  6  |  モニタ  |    | 開発で必要な方のみ  |
|  7  |  キーボード  |    | 開発で必要な方のみ  |
|  8  |  HDMIケーブル  |    | 開発で必要な方のみ  |
|  9  |  パトランプ  |    | 本記事では使用していますが、用途に応じて変更可能です。本記事で使用した機器は[こちら](https://www.amazon.co.jp/dp/B07WNP5CLF?ref=ppx_yo2ovdt__b_fedasin__title)です。  |
|  10  |  スイッチング電源  |    | パトランプへの電源供給用。本記事で使用した機器は[こちら](https://www.amazon.co.jp/dp/B07538V92C?ref=ppx_yo2ovdt__b_fedasin__title)です。   |
|  11  |  リレーモジュール  |    | パトランプとRaspberry Piの接続用。本記事で使用した機器は[こちら](https://www.amazon.co.jp/dp/B08QJ47P8K?ref=ppx_yo2ovdt__b_fedasin__title&th=1)です。  |
|  12  |  GPIO Pin  |    | パトランプとRaspberry Piの接続用。本記事で使用した機器は[こちら](https://www.amazon.co.jp/gp/product/B06WD5GBPT/r%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%20LED%20%E3%83%A9%E3%82%A4%E3%83%88%20ef=ppx_yo%20dt%20b%20asin%20title%20_%20_%20_%20_%20_%20o09_s00?ie=UTF8&psc=1)です。  |
| 13   |  ヒートシンク&ケース  |    | 必要な方のみ (ヒートシンクについては使用推奨)。本記事で使用した機器は[こちら](https://www.marutsu.co.jp/pc/i/46427919/)です。  |
| 14   |  PC  |    | OpenPLC Editorインストール用。Windows / MacOS / Linux 対応です。インストールは[こちら](https://autonomylogic.com/)です。  |

## セットアップ

### Raspberry Pi Imageの書き込み
Raspberry Pi OS Imager ([ダウンロード先](https://www.raspberrypi.com/software/)) を使うことで、SDカードへのOSイメージの書き込みができます。Windows、MacOS、Ubuntu対応です。
手順は[こちら](https://www.raspberrypi.com/software/)を参照ください。

### Raspberry Pi AI Cameraセットアップ
Raspberry Pi AI Cameraの同封物は写真のとおりです。

<img width="1200" alt="AICamera" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/da018aa3-8295-4a50-844c-468daaf90a05.jpeg">

- Raspberry Pi AI Camera
- mipi DSIケーブル ディスプレイ用FPC (Standard - Standard 20 cm)
  - Raspberry Pi 4シリーズに接続する場合はこちらのケーブルを使用します
- mipi DSIケーブル ディスプレイ用FPC (Standard - Mini 20 cm)
  - Raspberry Pi 5、Pi Zeroシリーズに接続する場合はこちらのケーブルを使用します
- 小型フォーカス調整工具
  - 工具をはめ込み、回すことでフォーカスの調整が可能です

Raspberry Pi AI CameraとRaspberry Piを画像のように接続します。

<img width="1200" alt="AICamera_connect" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/2b38fa8f-7bea-41f7-a92d-e5555e4e4b32.jpeg">

<img width="1200" alt="Raspi_connect" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/ecbe3a47-9fda-405b-b076-5769e745a050.jpeg">

:::note warn 

ケーブルには表裏があります。接続の際は注意してください。

:::

<img width="1200" alt="Raspi_cable" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/a1410b17-4e71-49fc-b849-a8a48cbb9b80.png">

接続後、Raspberry Piの[公式ドキュメント](https://www.raspberrypi.com/documentation/accessories/ai-camera.html#ai-camera)の手順に沿ってセットアップを進めてください。

### 動作確認
正しく接続できているかの確認のためにサンプルスクリプトを動かすことができます。物体検出のサンプルスクリプトを試す場合は以下のコードを実行します。

`rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30`

実行結果は以下のとおりです。画像内のリンゴの検知が正しく行えていることが確認できます。

<img width="1200" alt="detection_sample_apple" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/5f084a29-bb10-4f5a-bbd7-7f7ec37fc150.png">

## 実装内容
本記事では、物体検出のAIモデルを使用して人物検出を行います。検出結果をOpenPLCで監視し、その結果に応じてパトランプの点灯状態を制御します。具体的には、人物が検出された場合は赤色LEDを点灯させ、人物が検出されない場合は緑色LEDを点灯させます。

システム構成としては以下のとおりです。2つのRaspberry Piについては同一LAN内に接続してください。

<img width="1200" alt="system" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/cd55ed8f-1aec-47f6-b563-fe9e59f296d5.png">


### OpenPLC
OpenPLCは、オープンソースのPLCソフトウェアです。公式サイトは[こちら](https://autonomylogic.com/)から確認いただけます。PLCの国際規格IEC61131-3に準拠しており、5種類のPLCプログラミング言語に対応しています。実機のPLC機器は導入コストが高く、用意が困難であるため、OpenPLCは学習やデモ用途の代替ソリューションとして使用されています。本記事では、対応している5種類のPLCプログラミング言語の1つであるラダー言語を使用して、PLC制御プログラムを作成します。

## 実装
### AI Camera撮影スクリプト
人物検出には、AICameraセットアップ時にインストールされる物体認識のサンプルモデルの1つである`nanodet_plus_416×416.rpk`を使用します。モデルの一覧は`/usr/share/imx500-models`ディレクトリで確認できます。

このモデルは[cocoデータセット](https://cocodataset.org/#home)で学習されており、そのラベルの1つに`person`が含まれています。このラベルを用いて人物検出を実装します。

人物検出のコードについては、RaspberryPi財団が公開している[物体認識のサンプルスクリプト](https://github.com/raspberrypi/picamera2/tree/f6b356357dcee4a20045858154daa1978082ab70/examples/imx500)を参考にします。まず、以下のコマンドでスクリプトをクローンします。

```bash
git clone https://github.com/raspberrypi/picamera2.git
```

動作確認は以下のコマンドで実行できます。

```bash
python picamera2/examples/imx500/imx500_object_detection_demo.py --model=/usr/share/imx500-models/imx500_network_nanodet_plus_416x416.rpk
```

実行結果は以下のとおりです。人物の検出が正しく行えていることが確認できます。(モザイク処理は別途実装)

<img width="1200" alt="detection_sample_person_mosaic" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/862a29ba-3664-44a7-ab33-a5d2b0066a42.png">

また、手のみの検出も可能です。(モザイク処理は別途実施)

<img width="1200" alt="detection_sample_hand" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/d63da6bf-aee5-4696-b20c-7309b2366c22.png">

### 検出結果の解析
実装の前にRaspberry Pi AI Cameraの物体検出出力について確認します。カメラからの出力は`parse_detections`関数の`np_outputs`で受け取り、結果は`last_detections`に格納されます。

`last_detections`には`Detection`クラスのオブジェクトとして、検出サンプルごとのデータが格納されます。`Detection`クラスのデータメンバは以下のとおりです。
- `category`：検出サンプルのカテゴリ
- `conf`：検出結果の確信度 (confidence score)
- `box`：検出結果の位置情報 (x,y,w,h)

よって、人の検出情報は`category = person`の有無によって判定できます。

### Pymodbus実装
AICameraを接続したRaspberry PiとOpenPLCを動かすRaspberry Pi間の通信にはModbus TCPプロトコルを使用します。これは産業用機器間の標準的な通信プロトコルの1つで、OpenPLCでも採用されています。

Pythonでの実装には[Pymodbus](https://pymodbus.readthedocs.io/en/latest/)ライブラリを使用します。AI Camera側のRaspberry Piで以下のコマンドを実行して必要なライブラリをインストールします。


```bash
sudo pip install pymodbus==2.5.3 twisted==24.7.0 #今回はpymodbus==2.5.3
```

:::note warn 

Modbus通信で使用する502番ポートは特権ポートのため、管理者権限での実行が必要です。

:::

Modbus Serverを使用するために必要なpythonスクリプトの基本的な設定は以下のとおりです。

```python:app.py
#pymodbus module
from pymodbus.server.asynchronous import StartTcpServer
from pymodbus.datastore import ModbusSequentialDataBlock, ModbusSlaveContext, ModbusServerContext
from pymodbus.device import ModbusDeviceIdentification

# Setting of modbus Server
store = ModbusSlaveContext(
        di=ModbusSequentialDataBlock(0, [0,0,0]) # Initialize of di
    )
context = ModbusServerContext(slaves={0x01: store}, single=False) #0x0n：slave device number n

def modbus_server(context):
    identity = ModbusDeviceIdentification()
    identity.VendorName = 'RaspberryPi'
    identity.ProductCode = 'RPi'
    identity.VendorUrl = 'http://www.raspberrypi.org/'
    identity.ProductName = 'RPi Modbus Server'
    identity.ModelName = 'RPi Model'
    identity.MajorMinorRevision = '1.0'

    StartTcpServer(context, identity, ("", 502))
```

続いて、AI Cameraの出力をもとに、Modbus Serverの値を変更する部分の実装を行います。`check_including_person`関数は`update_di`を呼び出し、人物の検出状況に応じて接点の値を動的に変更します。実装は以下のとおりです。

```python:app.py
# Setting of Detection Area
is_detection_area = False # ON = True / OFF = False

class Detection_Area: 
    def __init__(self, x, y, w, h):
        self.x = x # 0 <= x <  640
        self.y = y # 0 <= y <  480
        self.w = w # 1 <  w <= 640 - x
        self.h = h # 1 <  h <= 480 - y

if is_detection_area:
    detection_area = Detection_Area(0, 0, 320, 480)

# Check for person in detection area
def check_including_person(request):    
    global context
    detections = last_detections
    labels = get_labels()
    if detections == []:
        update_di(context, in_person=False)
        return 
    else:
        for detection in detections:
            if labels[int(detection.category)] == "person":
                if is_detection_area:
                    p_x, p_y, p_w, p_h = detection.box # detection area of person
                    if not((detection_area.x + detection_area.w <= p_x) or (p_x + p_w <= detection_area.x) or (detection_area.y + detection_area.h <= p_y) or (p_y + p_h <= detection_area.y)):
                        update_di(context, in_person=True)
                        return 
                else:
                    update_di(context, in_person=True)
                    return
        update_di(context, in_person=False)
        return 

# Update di based on detection results
def update_di(context, in_person):
    if in_person:
        values = [1,0,0]
        context[0x01].setValues(2, 0, values)
    else:
        values = [0,1,0]
        context[0x01].setValues(2, 0, values)
```

Raspberry Pi AI Cameraの物体認識モデルは、デフォルトでは画面全体に対してAI推論を行います。しかし、実用上は特定の領域のみで人物検出を行いたいケースが考えられます。そこで`detection_area`パラメータを導入し、指定された検出領域内で人物が検知された場合のみパトランプの点灯状態が切り替わるように実装しています。

最後に、Modbus Serverをスレッドとして起動することで準備完了です。詳細はコードを確認ください。コード全体は[こちら](https://github.com/SonySemiconductorSolutions/aitrios-rpi-sandbox/blob/main/examples/plc_human_detection)から確認いただけます。

### OpenPLC Editor
OpenPLC側の実装に移ります。今回、PLC制御に使用するラダープログラムは、人物検出状況に応じてパトランプの点灯を制御する単純な機能のみを実装しているため、非常にシンプルな構成となっています。ラダープログラムの作成には[OpenPLC Editor](https://autonomylogic.com/docs/installing-openplc-editor/)を使用しました。インストールは[公式サイト](https://autonomylogic.com/docs/installing-openplc-editor/)を参考にしてください。今回はWindowsPCにインストールして使用しています。

#### プログラム作成
OpenPLC Editorではラダー言語を使用して、PLC制御のプログラム作成が可能です。基本的にはEditor上部のアイコンから使用するコンポーネントを選択し、各コンポーネントを接続することでコードを作っていきます。詳細な使い方については[公式サイト](https://autonomylogic.com/docs/3-2-creating-your-first-project-on-openplc-editor/)を参考にしてください。

<img width="300" alt="top_icon" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/39b8827f-feb5-4c43-8888-ceb0aca16426.png">

今回作成したラダー図は以下のとおりです。

<img width="1200" alt="ladder_1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/3435712c-ea26-43b0-8011-5d8430417790.png">

:::note info

よりシンプルな以下の構成でも同様の機能が実装可能です。

<img width="1200" alt="ladder_2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/25240c6f-590b-4f30-89b9-3eff233ff4f9.png">

:::

作成したラダープログラムは、OpenPLC Runtimeで使用するために.st (Structure Text) 形式への変換が必要です。変換はEditor上部の下矢印アイコンから実行できます。

<img width="300" alt="st" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/4dd2137e-3648-4bf6-b0ab-dfad8eb78aa8.png">


### OpenPLC Runtime
続いて[OpenPLC Runtime](https://autonomylogic.com/docs/installing-openplc-runtime-on-windows/)の設定を行います。ここでは実行プログラムの選択、環境設定、Slave Device (OpenPLC Runtime内での表記に準拠) の設定などを行います。インストールは[公式サイト](https://autonomylogic.com/docs/installing-openplc-runtime-on-linux-systems/)を参考にしてください。githubは[こちら](https://github.com/thiagoralves/OpenPLC_v3)です。

OpenPLC Runtimeをインストール後、`<Raspberry Pi 4のIPアドレス>:8080`にアクセスすると、ログイン画面が表示されます。初回認証情報は以下のとおりです。
- username：openplc
- password：openplc
    
    <img width="1200" alt="OpenPLC_Runtime_Login" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/094a7380-c400-44a6-8ac9-bb0853f1d8ca.png">

**設定手順**
1. **ハードウェア設定**
   
   Hardwareタブを選択し、`OpenPLC Hardware Layer`にて`Raspberry Pi`を選択します。これによりRaspberry Pi用のGPIOピン割り当てが設定されます。

    ![OpenPLC_Runtime_Hardware1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/5cc79d3e-ae9a-4e80-a97c-0190f553ca00.png)

:::note warn 

画面下部のSave deviceの押し忘れにご注意ください。


:::

2. **プログラムのアップロード**
    
    Programsタブを選択し、実行するプログラムの選択を行います。先ほどOpenPLC Editorで作成した.stファイルを選択し、適当な名前をつけて`Upload Programs`を実行します。コンパイル完了後、`Go to Dashboard`と表示されればプログラムのアップロード完了です。
    
    <img width="1200" alt="OpenPLC_Runtime_Programs" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/fcbcc9c4-81a8-4ee5-a77e-3f6fb8515ac4.png">

    <img width="1200" alt="OpenPLC_Runtime_Program_Upload" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/f124272d-5994-4faa-b869-e1e57277b6c9.png">

    <img width="1200" alt="OpenPLC_Runtime_Program_Compile" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/60d845e9-1f1d-4c31-9837-832a62b34e0e.png">

3. **Slave Deviceの設定**

    Slave Devicesタブを選択し、Deviceの設定を行います。本記事ではRaspberry Pi 5(AICamera側)がSlave Deviceになります。設定項目は以下のとおりです。詳細は[公式サイト](https://autonomylogic.com/docs/2-5-modbus-addressing/)を参照してください。
    - Slave ID：各Slave Deviceごとに一意の識別子
    - IP Address：Slave DeviceのIPアドレス
    - IP Port：Modbus通信を行うPort番号 (通常は502)
    - Discrete Inputs：Slave Deviceの接点

    <img width="1200" alt="OpenPLC_Runtime_SlaveDevice_Register" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/ad85ee56-1ddc-4b1b-a96b-659fbfb64332.png">

    :::note warn

    IP PortについてはSettingsタブのModbus Server Portと一致させてください。

    <img width="1200" alt="OpenPLC_Runtime_Settings" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/99ce29b1-7826-4129-ab25-fe3a1f7acbdd.png">
    
## GPIO設定
Raspberry PiのGPIOは3.3 Vまたは5 Vの低電圧出力のため、より高い電圧を必要とする機器の制御には追加の電源とリレー回路が必要です。今回使用するパトランプは15 V - 24 V駆動のため、24Vリレー回路を構築し、AC - DCスイッチング電源 (24 V設定) を使用します。配線は以下の図のとおりです。

<img width="1200" alt="GPIO" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/f224c040-2a65-410c-86ed-662856b0de3d.png">

<img width="1200" alt="GPIO_Hardware" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/5a604a95-12fd-4432-93e4-3b61d282a210.jpeg">

## 実行結果
実際に作成したコードを動かし、人物検出状況に応じたパトランプの点灯制御が正しく機能するかの検証を行います。

### 実行手順
1. **OpenPLC Runtimeの起動**
   
    Dashboardタブを選択し、`Start PLC`を押してPLC制御を開始します。

    ![OpenPLC_Runtime_StartPLC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/42e40620-ed6d-47a5-b2d8-98420f7eb208.png)


2. **AI Cameraの起動**
    
    [コード](https://github.com/SonySemiconductorSolutions/aitrios-rpi-sandbox/blob/main/examples/plc_human_detection)を取得し、以下のコマンドで実行します。

    ```
    sudo python app.py
    ```

    :::note warn 

    Modbus通信で使用する502番ポートは特権ポートのため、管理者モードで実行してください。

### 検証結果
1. **`detection_area`未設定時**
   
   画像内の人の検出状況に応じてパトランプの点灯が切り替わっていることが確認できます。

    <img width="1200" alt="human_detection1.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/9ebf3710-9dc4-418a-baa9-7b6d9e5da5a4.gif">

2. **`detection_area`設定時**
   
    `detection_area`を画像の左半分(赤枠)に設定して実行します。結果を見てわかるとおり、`detection_area`に入っていない場合、パトランプは緑色のままであり、`detection_area`に入った場合にのみパトランプが赤色に切り替わっていることが確認できます。
    
    <img width="1200" alt="human_detection2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/e9b46425-5075-4744-877e-2aa8801cc43c.gif">

3. **OpenPLC Runtime内での動作確認**
   
    制御の様子は実際のパトランプの点灯状況だけでなく、OpenPLC Runtime内のMonitoringタブから確認可能です。

   - 人物検出時(LED_Red = TRUE)
   
   <img width="1200" alt="OpenPLC_Runtime_Monitoring2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/84583e42-8453-4e29-baf9-3357cbed7913.png">

   - 人物未検出時(LED_Green = TRUE)
   
   <img width="1200" alt="OpenPLC_Runtime_Monitoring1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964705/f84c6838-eef9-4cb8-bbd0-2194f29e7c47.png">

今回のデモンストレーションでは動作確認用に映像出力を行っていますが、Raspberry Pi AI Cameraではメタデータのみの取得も可能です。これにより、画像データを保存せずにプライバシーへ配慮した人物検出システムの構築も可能です。

## まとめ
本記事では、Raspberry Pi AI CameraとOpenPLCを接続して、人物検出情報をパトランプで通知するシステムを構築しました。PLCは工場設備制御の自動化にも多く使われているため、今回のような人検出タスクだけでなく、幅広いタスクに活用できます。例えば、異常検出を行い異常品が検出された場合にアラートを出すシステムも同様の構成で構築可能です。一方で、異常検知システムの構築において、最大の課題は異常サンプルの収集です。多くのケースで、十分な異常サンプルを用意できないことが導入の障壁となっています。そこでおすすめなのが、Brain Builderを使用したAIモデルの作成です。Brain Builderでは正常品の画像50枚程度のみで高精度な異常検出AIモデルの作成が可能です。さらに、GUIツールが用意されているため、AI開発に慣れていない方でも簡単にモデル作成ができます。Brain Builderについて詳細が知りたい場合は[こちら](https://developer.aitrios.sony-semicon.com/en/studio/brain-builder)を確認ください。

## 困った時は

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

<!-----------------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/)