こんにちは。
ソニーセミコンダクタソリューションズの明です。
今回はちょっと遊び心のあるサンプルを紹介します。
Raspberry Pi AI Camera(IMX500) で物体検出を行い、もし「鳥(bird)」が検出されたら Mattr対応スマートライト を点滅させる、という簡単な仕組みです(※本当に鳥が逃げるかどうかは環境次第です😂)。
本記事ではサンプルの内容と利用方法について紹介します。
はじめに
私事なのですが、最近、外から鳥が飛んできてベランダのトマトを食べてしまうため困っています。
そこで「もし自動で鳥を追い払う装置を作れたらいいな!」と思い立ち、Matter対応のスマートライトとRaspberry Piを組み合わせて、鳥よけの小さな装置を作りました!
検出ではModel Zooの物体検出モデル「nanodet_plus_416x416_pp」を使用し、鳥を認識します。
鳥が認識された場合、Matter対応スマートライト を点滅させます。
本記事では、動作検証用のサンプルを公開し、下記の通り実行まで解説します。
- Prerequisites
- Raspberry Pi 5 とRaspberry Pi AI Cameraでの動作確認
- サンプルスクリプト
- 実行例
1. 前準備
1.IMX500 環境構築
まず、下記のコマンドを実行して最新環境へ更新します。
$ sudo apt update && sudo apt full-upgrade
IMX500ファームウェアをインストールします。
$ sudo apt install imx500-all
現時点では、Linux Kernel version
"uname -a"と打つと下記のように "(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
picamera2をインストールします。
$ sudo apt install -y python3-picamera2
$ export PYTHONPATH=/usr/lib/python3/dist-packages:$PYTHONPATH
2.Matter 環境構築
今回使用しているMatterデバイスは、マルチカラー対応のスマートLEDランプ「Tapo L535E」です。
仕組みについては、こちらの資料をご参照ください。
https://www.tp-link.com/jp/smart-home/tapo/tapo-l535e/

以下は connectedhomeip レポジトリの Python 向けビルド方法 に基づいた、
Raspberry Pi 上で Matter デバイスを扱うための事前セットアップ手順になります。
1. ZAP のインストール(※場合によっては不要)
ZAP はコード生成に用いられるツールです。必要な場合のみインストールしてください。
ダウンロード(例:v2025.05.14)
https://github.com/project-chip/zap/releases/tag/v2025.05.14
$ cd ~/Documents
$ wget https://github.com/project-chip/zap/releases/download/v2025.05.14/zap-linux-arm64.zip
$ unzip zap-linux-arm64.zip -d zap_2025.05.14
$ export ZAP_INSTALL_PATH="/home/pi/Documents/zap_2025.05.14"
【参考ページ】
https://github.com/project-chip/connectedhomeip/blob/master/docs/zap_and_codegen/code_generation.md
2. Matter のビルド & インストール
必要パッケージのインストール
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y \
git gcc g++ pkg-config libssl-dev libdbus-1-dev libglib2.0-dev \
libavahi-client-dev ninja-build python3-venv python3-dev python3-pip \
unzip libgirepository1.0-dev libcairo2-dev bluez pi-bluetooth \
cmake libreadline-dev default-jre libsdl2-dev avahi-utils
$ sudo reboot
リポジトリ取得とビルド
$ cd ~/Documents
$ git clone https://github.com/project-chip/connectedhomeip.git
$ cd connectedhomeip
サブモジュール更新
$ git submodule update --init
必要に応じてupdate
$ git submodule update -f --init --recursive
Python モジュールのビルド
$ scripts/build_python.sh -m platform -i matter/python_env
仮想環境の有効化
$ source out/python_env/bin/activate
エラーが出ずに完了すれば準備 OK です。
2. Raspberry Pi 5 とRaspberry Pi AI Cameraでの動作確認
Raspberry Pi 5とRaspberry Pi AI Cameraの環境構築については省略します。
以前こちら の記事で紹介していますので、気になる方はご確認ください。
リンク先の記事にて、2章まで完了していれば本記事用のセットアップとしては十分です。
では、セットアップが完了した前提で、AIモデルが動くか動作確認を実施します。
下記の通り、Cloneしたpicamera2のディレクトリへ移動し、AIモデルを動作させて下さい。
$ cd ~/picamera2/examples/imx500
$ python imx500_object_detection_demo_phone.py --model /usr/share/imx500-models/imx500_network_nanodet_plus_416x416_pp.rpk
実行に成功するとカメラ画面が立ち上がり、何か物体が認識されると結果が画面内に表示されるようになります。
下記は、私の環境でcupを認識した例になります。
3. ライトとの接続(.env の準備)
Matter デバイスを操作するためには、接続情報を環境変数として設定しておく必要があります。
プロジェクト直下に .env ファイル を作成し、以下のように記述してください。
# デバイスのセットアップコード(QR に印字されている11桁の数字)
SETUP_CODE=24056126xxx
# デバイスノードID(任意の数字。例: 1234)
DEVICE_NODE_ID=1234
# Wi-Fi 情報(ラズパイ自身も同じ Wi-Fi に接続しておくこと)
WIFI_SSID=Buffalo-A-31xx
WIFI_PASSWORD=abcdcexxx
ポイント
- SETUP_CODE: Matter デバイスの QR コードに記載されている 11 桁の数字を入力
- DEVICE_NODE_ID: 任意の数字で OK(例: 1234)
- Wi-Fi 情報: スマートライトと Raspberry Pi の両方が同じ SSID に接続されている必要あり
このように設定しておけば、Python 側で python-dotenv を使って読み込むだけで、簡単に接続情報を呼び出せます。
4. プロジェクト構成(GitHub 提供ファイル)
私の GitHub リポジトリでは、Matter ライトと連携するために 2つの主要な Python ファイル を用意しています。
📂 ファイル概要
-
light_controller.py
Matter デバイスを初期化・接続するためのクラスを定義しています。- セットアップコード (
SETUP_CODE) を使ったペアリング - 既存デバイスのディスカバリ
- ライトの On/Off や Flash 制御
- セットアップコード (
-
app_bird.py
メインアプリケーションです。- Raspberry Pi AI Camera (IMX500) を使った物体検出
- 「bird」が検出された場合、
light_controllerを呼び出してライトを点滅 - クールダウン制御を行い、無限点滅を防止
📄 .env ファイル
- 環境変数をまとめた設定ファイルです。
例:SETUP_CODE=24056126666 # QRコードにある11桁の数字 DEVICE_NODE_ID=1234 # 任意の数字 WIFI_SSID=Buffalo-G-3140 WIFI_PASSWORD=ct6b38h5cedsb
セキュリティのため GitHub には .env をアップロードしない ようにしましょう。
📂 配置場所のおすすめ
これらのファイルは、Matter SDK(connectedhomeip)をクローンしたフォルダ直下にまとめておくと管理が楽です。
connectedhomeip/
├─ .env
├─ scripts
├─├─ app_bird.py
├─├─ light_controller.py
└─ (その他 connectedhomeip の公式ファイル)
実行方法の例
cd connectedhomeip && source matter/python_env/bin/activate && python app_bird.py
5.サンプルスクリプトの紹介
1) 鳥の検知ロジック
IMX500 の推論結果を解析し、「bird」が含まれるかどうかを判定します。
さらに 閾値設定したある時間を超えていた場合のみ、イベントをキューに送ります
def parse_and_draw_detections(request):
global _last_bird_trigger_ts
dets = parse_detections(request.get_metadata())
draw_detections(request, dets)
has_bird = False
for d in dets:
try:
name = labels[int(d.category)]
except Exception:
continue
if name == BIRD_NAME and d.conf >= THRESHOLD:
has_bird = True
break
if has_bird:
now = time.time()
if now - _last_bird_trigger_ts >= BIRD_COOLDOWN_SEC:
_last_bird_trigger_ts = now
if asyncio_loop is not None:
asyncio_loop.call_soon_threadsafe(
bird_queue.put_nowait, {"ts": now}
)
4. 実行例
サンプル準備
3章で説明したサンプルの公開場所をこの記事の最後に記載しています。まずはそちらからサンプルをダウンロードし、下記の通り解凍をしてください。
$ unzip imx500_object_detection_demo_bird.zip
解凍したサンプルに移動し、scripts内imx500_object_detection_demo_bird.pyを実行します。
$ export PYTHONPATH=/usr/lib/python3/dist-packages:$PYTHONPATH
$ cd connectedhomeip/
$ ~/connectedhomeip $ source out/python_env/bin/activate
$ cd ~/connectedhomeip/scripts
$ ~/connectedhomeip/scripts $ python app_bird.py
検知結果
動画をご覧いただくと分かるように、ROIエリアとは「関心領域(Region of Interest)」を意味し、この部分が検出対象の中心となります。鳥がこのROIエリア内に入った際にシステムが反応し、ライトが点滅して動作を知らせる仕組みになっています。

サンプル公開
GitHub上で公開していますので、ご使用になる場合はそちらからダウンロードをお願いします。
(linkは公開次第に)
困った時は
もし、記事の途中でうまくいかなかった場合は、気軽にこの記事にコメントいただいたり、以下のサポートのページもご覧ください。
コメントのお返事にはお時間を頂く可能性もありますがご了承ください。
また、記事の内容以外で AITRIOS についてお困りごとなどあれば以下よりお問い合わせください。
RaspberryPiに関連する疑問がある場合は、下記フォーラムをご確認、ご活用ください。


