AI CAPTURE Logo

スタートガイド

オリジナルのAI検知プログラムの作り方!

Contents

1

準備

事前にセットアップを完了し、スマホアプリでカメラ映像が見える状態にしておきます。

1-1 ディスプレイとキーボードを接続

AIBOX(Raspberry Pi 5)にディスプレイとキーボードを接続します。

1-2 ログイン

AIBOX OSはRaspberry Pi OS(Lite)をベースに開発されていますので、デスクトップはなく、CLIでのログイン画面が表示されます。

次のアカウントでAIBOXにログインします。

デフォルトユーザー
ユーザー名: cap
パスワード: cap

1-3 設定変更(任意)

AIBOX OSは、Raspberry Pi OSをベースに開発されていますので、基本的な操作や設定はRaspberry Pi OSと同様です。

ただ、/home以外はRAMディスク化されている為、OSの設定変更を行う前には、必ずramdiskコマンドでRAMディスク化を解除してから行う必要があります。

RAMディスク化とは

RAMディスク化とは、構築したSDカード上のディスクイメージを書き込み禁止にして、その上に物理メモリ上に構築した書き込み可能なRAMディスク領域を重ねて、論理的なディスク領域を作成します。

これにより、ディスク領域への書き込みは実メモリ(RAM)上で行われることになり、SDカードへの書き込みが行われなくなり、SDカードの寿命が延びることになります。 さらに、シャットダウンを行わずに、直接電源ケーブルを抜いたとしても、次回起動時には、RAMディスク化する前の正常な状態で起動させることができるようになります。

ただし、RAMディスク化した後に行った変更は実メモリ上に反映されるため、電源OFFですべて消えてしまい、次回起動時には、RAMディスク化する前の状態に戻って起動されることになります。

RAMディスクについての詳しい説明はこちらをご覧ください。

ramdhiskコマンド

RAMディスク化を解除したり、再度有効化するためのAIBOX OSの組み込みコマンドです。

OSの設定変更(パスワード変更やSSH有効化、WiFi接続など)を行う前には、以下のコマンドでRAMディスク化を無効化してから、設定変更を行ってください。(AIBOXは一旦再起動します)

コマンド
sudo ramdisk disable

設定変更後は、再度RAMディスク化を有効にします。(AIBOXは一旦再起動します)

コマンド
sudo ramdisk enable

セキュリティやリモート開発のため、パスワードの変更やSShの有効化、WiFi接続などを必要に応じて設定します。

※設定方法は、通常のRaspberry Pi OSの手順と同じですので、他の情報を参照してください。

2

スマホにPush通知を送ってみる

準備ができたら、スマホにPush通知を送ってみましょう。
以下の1文をシェル上で実行してください。

コマンド
aicap push

スマホに通知が届くはずです。

通知をタップすると、AI CAPTUREアプリが起動して、カメラの画像が表示されます。

aicap pushコマンドは、単にPush通知を送るだけでなく、コマンドで指定したJsonフォーマットのパラメータも一緒に送ります。
スマホアプリの画面上のプロパティボタンを押すと、その内容を確認できます。
今回は何も指定していないので、空のパラメータ({})が表示されます。

さらに、録画映像のaicap pushコマンドを実行した時間に、タグを設定します。
スマホアプリの画面上の再生ボタンを押すと、aicp pushコマンドを実行した5秒前の位置から動画の再生が始まります。

注意事項

Push通知はすぐにスマホに送られますが、録画映像がアップロードされて再生可能になるまで1分程度かかります。
そのため、Push通知が送られてすぐに再生しようとしても再生できないことがありますので、その場合は少し時間をおいてから再度再生してください。

設定されたタグ情報や送信された画像は、録画映像と一緒にクラウドに保存されていますので、あとからスマホアプリで確認することができます。

注意事項

録画映像の保存期間が終了すると、設定されたタグや送信された画像も録画映像と一緒に削除されます。
録画映像の保存期間は選択したカメラビューライセンスの種類によって異なります。

このaicapコマンドをシェルスクリプトやプログラムから実行することで、外部センサーや独自の検知処理と連動した監視システムを構築することができます。
また、一緒に送信するJsonパラメータに、取得したセンサーの値や、物体検知時のパラメータなどを設定することで、検知精度の確認なども行えます。

では、このaicapコマンドを使用した簡単なPush通知のシェルプログラムを作成してみましょう。

3

プログラム配置フォルダの説明

AIBOXには、下記の場所に検知プログラムを配置する場所が作成されています。

配置場所
/home/cap/aicap/extmod
ヒント

/home配下の場所は、RAMディスク化されていませんので、変更前にRAMディスクを解除する必要はありません。

デフォルトでは、YOLOを使用した物体検知プログラムが配置されています。

YOLOについてはこちらを参照

いくつかファイルがありますが、その中で独自検知プログラムの配置に必要なファイルは以下の2つです。

ファイル名説明
start.shAIBOXのメインプログラム起動時にコールされるシェルスクリプト(実行権限が必要)
stop.shAIBOXのメインプログラム終了時にコールされるシェルスクリプト(実行権限が必要)

これらのシェルスクリプトは、AIBOXのメインプログラム(capture.service)が、systemdによって起動/終了されるときに、一緒に呼び出されます。

独自に開発した検知プログラムを配置するときは、これらのシェルスクリプトに、作成したプログラムの起動/終了処理を記述することで、検知プログラムの自動起動/終了が実現できます。

4

検知プログラムを作ってみる

それでは、検知プログラムのサンプルとして、10秒毎にPush通知を送るプログラムをシェルスクリプトで作成して、AIBOXに配置してみましょう。

プログラムは以下です。

コード
#!/bin/sh while true; do echo "★★★★ aicap push at $(date) ★★★★" aicap push -J '{"param1" : "TEST PUSH!"}' # 10秒待つ sleep 10 done

まずは、現状のextmodフォルダをバックアップします。

バックアップ
cd /home/cap/aicap # aicapフォルダに移動 cp -r ./extmod ./extmod.back # 現状のextmodをextmod.backとしてコピー

その後、extmod内のstart.sh/stop.sh以外のファイルやフォルダを削除します。

不要ファイルの削除
cd extmod rm -r docker-compose.yml extmod.py yolo11m.torchscript yolo11m_ncnn_model

エディタ(nano)を開いて、このコードを貼り付けて、sample.shという名前で、プログラム配置フォルダに保存します。

エディタを開く
nano ./sample.sh
ヒント

nanoエディタは、Ctrl+O で保存、Ctrl+X で終了します。

保存したsample.shに実行権限を付与します。

実行権限の付与
chmod +x ./sample.sh

sample.shを実行して、Push通知がスマホに飛ぶかを確認します。

スマホにPush通知が飛べば成功です!

ただ、シェル上にはエラーが出ていると思います。

エラー
Error executing push command: Rate limit: please wait 30 seconds before pushing again

aicap pushコマンドは、サーバー側の負荷低減のために、連続Pushは30秒の時間を開ける必要があります。 今回のサンプルでは10秒毎にコマンドを実行していますので、このエラーが発生していますが、30秒経てば正しくコマンドが実行されますので、問題ありません。

プログラムが正しく実行できることが確認できたら、実行しているプログラムを終了(Ctrl+C )させてください。

最後に、このプログラムを自動起動/終了させます。

nanoエディタでstart.sh/stop.shの内容をsample.shのバックグラウンド起動と終了の手順に書き換えます。

start.sh
#!/bin/sh set -e # extmodディレクトリに移動 EXTMOD_DIR=$(cd "$(dirname "$0")" && pwd) cd "$EXTMOD_DIR" # sample.shをバックグラウンド起動 ./sample.sh &
stop.sh
#!/bin/sh # extmopdディレクトリに移動 EXTMOD_DIR=$(cd "$(dirname "$0")" && pwd) cd "$EXTMOD_DIR" #sample.shを終了 pkill -f sample.sh

その後、AIBOX OSを再起動して、動作を確認してください。

正しく動いていれば、30秒毎にスマホにPush通知が飛んでくるはずです。