このプログラムは、AI検知すると、家電等の電源をONにし、指定時間後に自動でOFFにします。
AI検知処理の内容としては、標準搭載のAI検知プログラムと同じですが、電源のON/OFFにSwitchBotミニプラグを使用します。
Raspberry Piで電源ON/OFFというとGPIO経由での制御が一般的ですが、100VのAC家電を操作するとなると、リレー回路が必要です。感電・火災リスクを考えると、自作リレーは専門知識がない場合はやめておいたほうが無難でしょう。
このプログラムでは、手軽にプログラムから家電の電源をON/OFFできるデバイスとして、SwitchBotプラグミニを使います。
このSwitchBotプラグミニにBluetoothで接続して、物体を検知した際に家電の電源をONにします。
ちなみに、このプログラムで使用する場合、SwitchBotの専用アプリなどは一切不要です。購入したら箱から出してコンセントに差し込めば、それで準備完了です!
AIBOX OSには、標準でYOLO11をNCNNで実行できるDocker Imageが登録されています。
REPOSITORY TAG
aicap/arm64/ultralytics 1.0.250923
aicap/arm64/ultralytics 1.0.250923-audio-bt
このイメージは、Ultralyticsが公開しているYOLO11用のイメージをベースに、ncnn変換・実行に必要なモジュールのインストールや、aicapコマンドを実行するための環境構築処理が行われていますので、 AIBOX OS上で稼働させるYOLO11を使用した基本的な検知プログラムは、このイメージから起動したコンテナ上で動作させることが可能になっています。
バージョン番号のみのTag(1.0.250923)がついたイメージは、他には何も追加されていないベースイメージです。
バージョン番号の後ろに[-audio-bt]がついたイメージ(1.0.250923-audio-bt)は、ベースイメージに、オーディオ再生に必要なモジュールとBluetoothデバイスアクセスに必要なモジュールが追加されたものになります。
今回実行するプログラムは、YOLOによる物体検知の他に、SwitchBotミニプラグをBluetoothで制御するための機能が追加で必要になりますので、Bluetoothデバイスアクセス機能が入った「1.0.250923-audio-bt」の方を使用します。
基本的なAI検知処理内容は、標準搭載のAI検知プログラムと同じです。
ただ、docker-compose.ymlの内容は、使用するDockerイメージがホスト側のBluetooth機能にアクセスするための設定が追加されています。
また、aicapコマンドやSwitchBotへのアクセスは別ファイルに定義しています。
標準搭載AI検知プログラムから変更・追加があるファイルは以下になります。
| ファイル名 | 説明 |
|---|---|
| extmod.py | 物体検出を行うPythonのプログラム |
| aicap.py | aicapコマンドを実行する関数を定義 |
| switchbot.py | Bluetoothデバイスアクセス処理をまとめたクラスを定義 |
| docker-compose.yml | Dockerコンテナの構成・設定をまとめたファイル |
これらのファイルを更新するスクリプトを用意してあります。
AIBOXにログインし、下記のコマンドを実行して、GitHubで公開されているupdate.zipをダウンロードし、解凍後に、update.shを実行すると、必要なファイルが一括で更新できます。
$ wget https://github.com/daddyYukio/AICAPTURE/raw/refs/heads/main/programs/power_on_appliance/update.zip
更新できたら、SwitchBotミニプラグをコンセントに挿してから、再起動してください。
デフォルトでは検知物体は人に設定されています。
人を検知すると、「カチッ」と音がなって、SwitchBotミニプラグが電源ON状態になります。
そのまま放置すると、10秒後に自動的に電源がOFFになります。
自動でOFFになる前に再度検知されると、その時点から10秒後に電源がOFFになるように時間が延長されます。
検知の結果をリアルタイムに確認するには、検知結果のプレビュー機能を有効にしてください。
ウェブブラウザで検知結果をリアルタイムに確認できるようになります。
検知プログラムの解説は、Zennに記事として投稿していますので、そちらを参照してください。
検知する物体の変更方法や検知精度の修正方法は、標準搭載AI検知プログラムと同じです。
また、電源をONにしておく時間は、extmod.pyファイルの下記の外部変数で定義されています。
# Switchbotの電源ONの時間(秒)
POWER_ON_TIME_SEC = 10