1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IMX500 × Matterスマートライトで作る鳥検出&点滅システム

Last updated at Posted at 2025-11-04

こんにちは。

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

今回はちょっと遊び心のあるサンプルを紹介します。
Raspberry Pi AI Camera(IMX500) で物体検出を行い、もし「鳥(bird)」が検出されたら Mattr対応スマートライト を点滅させる、という簡単な仕組みです(※本当に鳥が逃げるかどうかは環境次第です😂)。
本記事ではサンプルの内容と利用方法について紹介します。

bird_part1_cropped.gif

はじめに

私事なのですが、最近、外から鳥が飛んできてベランダのトマトを食べてしまうため困っています。
そこで「もし自動で鳥を追い払う装置を作れたらいいな!」と思い立ち、Matter対応のスマートライトとRaspberry Piを組み合わせて、鳥よけの小さな装置を作りました!

検出ではModel Zooの物体検出モデル「nanodet_plus_416x416_pp」を使用し、鳥を認識します。
鳥が認識された場合、Matter対応スマートライト を点滅させます。

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

  1. Prerequisites
  2. Raspberry Pi 5 とRaspberry Pi AI Cameraでの動作確認
  3. サンプルスクリプト
  4. 実行例

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/
image.png

以下は 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を認識した例になります。

image.png

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.サンプルスクリプトの紹介

サンプルスクリプトは、下記の流れで作成しました
bird_detection_flow.png

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エリア内に入った際にシステムが反応し、ライトが点滅して動作を知らせる仕組みになっています。
bird_part1_cropped.gif

bird_part2_17to27_cropped.gif

サンプル公開

GitHub上で公開していますので、ご使用になる場合はそちらからダウンロードをお願いします。
(linkは公開次第に)

困った時は

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

また、記事の内容以外で AITRIOS についてお困りごとなどあれば以下よりお問い合わせください。

RaspberryPiに関連する疑問がある場合は、下記フォーラムをご確認、ご活用ください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?