実際に独自の検知プログラムを開発する際、Raspberry Pi上ではなく、開発環境が入ったPC(Linux/Windows/Mac)上で開発を行うことが多いと思います。
そうしたPC上の開発環境上でaicapコマンドを実行する為のスタブモジュールを用意してあります。
このスタブモジュール(開発用aicapコマンド)は、コマンド引数などは、AIBOX OSに搭載されているaicapコマンドと同じなので、パスが通る場所に配置すれば、PC上で独自の検知プログラムを開発することが可能になります。
開発用aicapコマンドは、開発用PCにUSB接続されたWebカメラを使用し、Push通知の送信画像やJson文字列は、指定したローカルディレクトリに保存されます。
開発用aicapコマンドはFFmpegを使用しますので、開発環境にインストールしてください。
開発用aicapコマンドのインストール手順を説明します。
コマンド実行に必要な設定ファイル(aicap.conf)の作成方法は、次のステップで環境毎に説明します。
開発環境にあったFFmpegをインストールしてください。
インストール方法は他の情報を参照してください。
GitHubに公開されている開発用aicapコマンドの中から、環境にあったものをダウンロードしてください。
開発環境のUSBポートに、UVCカメラを接続してください。
開発用aicapコマンド用の設定ファイルを作成します。
作成手順は次のステップで説明します。
aicapコマンドをそのまま実行できるように、開発用aicapコマンドを配置した場所までのパスを設定します。
システムのパスに追加してもOKですが、VisualStudio Codeを使用している場合は、launch.jsonのenvにPATHを追加することでコマンドを実行できます。
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "extmod.py",
"console": "integratedTerminal",
"args": [],
"env": {
"MODEL_FILE_NAME" : "yolo11m.pt",
"PREVIEW_IMAGE_PATH" : "C:/Users/yukio/Desktop/temp/result.jpg",
// WindowsのPATHの区切りは [;]
// Linux/Macは [:]
"PATH": "${env:PATH};C:/Users/yukio/work"
}
}
]
}
開発用aicapコマンドを使用するには、設定ファイルを作成する必要があります。
設定ファイルは、開発用aicapコマンドと同じ場所に、aicap.confの名前で作成してください。
フォーマットはJSONで、パラメータは以下の2つです。
{
"VideoCaptureDevice" : [USB接続Webカメラの接続情報],
"PushResultOutputPath" : [Pushコマンドに指定した画像/JSON情報の保存先ディレクトリ]
}
VideoCaptureDeviceは、環境ごとに取得・設定方法が異なりますので、それぞれの環境での情報の取得方法と設定方法を説明します。
V4L2(Video for Linux2)が入っていなければインストール。(sudo apt install v4l2-utils)
v4l2-ctl --list-devicesで、接続したUVCカメラのデバイスパスを表示
$ v4l2-ctl --list-devices
Microsoft® LifeCam HD-3000: Mi (usb-0000:00:0b.0-1):
/dev/video0
/dev/video1
番号の若い方を設定します。(上記の場合、/dev/video0)
{
"VideoCaptureDevice" : "/dev/video0",
"PushResultOutputPath" : "/home/user/work/temp"
}
コマンドプロンプトで「ffmpeg -list_devices true -f dshow -i dummy」を入力
$ ffmpeg -list_devices true -f dshow -i dummy
[dshow @ 000002d291eebb80] "HD Webcam eMeet C960" (video)
[dshow @ 000002d291eebb80] Alternative name "@device_pnp_\\?\usb#vid_328f&pid_2013&mi_00#7&39fbeec7&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 000002d291eebb80] "マイク (HD Webcam eMeet C960)" (audio)
[dshow @ 000002d291eebb80] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{44545183-13C6-4A8E-A80C-20BD4E517837}"
videoデバイスの名前を設定します。(上記の場合、HD Webcam eMeet C960)
{
"VideoCaptureDevice" : "HD Webcam eMeet C960",
"PushResultOutputPath" : "/home/user/work/temp"
}
ターミナルで「ffmpeg -list_devices true -f avfoundation -i dummy」を入力
$ ffmpeg -list_devices true -f avfoundation -i dummy
[AVFoundation indev @ 0x7f8b4af05000] AVFoundation video devices:
[AVFoundation indev @ 0x7f8b4af05000] [0] Microsoft® LifeCam HD-3000
[AVFoundation indev @ 0x7f8b4af05000] [1] Capture screen 0
[AVFoundation indev @ 0x7f8b4af05000] AVFoundation audio devices:
[AVFoundation indev @ 0x7f8b4af05000] [0] Microsoft® LifeCam HD-3000
videoデバイスの番号を設定します。(上記の場合、0)
{
"VideoCaptureDevice" : "0",
"PushResultOutputPath" : "/home/user/work/temp"
}
番号は文字列として設定してください。
パスが通っていれば、使い方はAIBOX OSに組み込まれているaicapコマンドと同じですので、開発環境で開発した独自検知プログラムは、そのままAIBOXに搭載できるはずです。