2024/11/30 現在、Local Edition は v1.4.0 が公開されています。
この記事で紹介している v1.3.0 以前からは大幅にUIやインストール手順が変わっているため、v1.4.0 以降をお使いの方は本記事を参考にしないようお願いいたします。
こんにちは!
SSS の高橋です。
Local Edition という、ブラウザを利用せずにローカルPCの環境で AITRIOS のデバイスを動かせるソフトウェアが新しくリリースされたので触ってみました。
Local Edition については以下を参照してください。
上記ページでも紹介されていますが、Local Edition の特徴を簡潔に箇条書きでまとめると以下のようになるかなと思っています。
- 個人でもすぐに利用が可能
- Windows PC とデバイスが直接接続されるので、データをインターネットに送信しなくてよい
- AI モデルの作成や、デバイスの制御や、推論結果の表示がより直感的にわかりやすく行える
下記の画像は左が Local Console と右が Local Studio (Brain Builder) ですが、Local Console では推論結果がバウンディングボックス付きですぐに確認できるのが素敵で、Local Studio は AI モデルを非常にわかりやすく作ることができます。
前提
こちらの記事は 2024/09/30 の情報をもとに執筆されています。
今後のアップデートでUIが変わる可能性があるのでご注意ください。
(追記) 2024/10/02
記事を書いている途中に新しいバージョンが出たので、追って修正します🙇♂
v1.3.0では、ファームウェアの更新が簡単になっているようです!
Local Edition とは?
Local Edition とは下記のソフトウェア群の名称です。
- Local Console: カメラとの接続や、推論、ファームウェア更新、AI モデルや Edge Application のデプロイを担うソフトウェア
- Local Studio (Brain Builder): 画像をもとに、Classifier と Object Detection の AI モデルを作成するソフトウェア / Local Studio はPC で AI モデルを作成するツール群の総称で、現在は Brain Builder がツールとして存在している
- Converter/Packager: AI モデルを AITRIOS のデバイス向けに変換するソフトウェア
ブラウザ上で動作する Developer Edition の、まさにローカル版のソフトウェアになります。
準備するモノ
【最も必要なもの】
- 管理者権限があり
- WSL の Ubuntu (22.04) が利用でき
- ファイアウォール(FW)が制御できる (inboundの1883ポート)
- Windows 10 か 11 の PC
- CSV26 (有線/PoEモデル) もしくは AIH-IVRW2 (Wi-Fiモデル)
- この記事は有線モデルの CSV26 を対象としています
- そのため、Wi-Fiモデルをご利用の方は接続方法や、ファームウェアのバージョンがこの記事の記載と違うのでお気を付けください
- この記事は有線モデルの CSV26 を対象としています
- Local Studio 一式
- 各販売店様よりご購入いただくとダウンロードリンクが提供されます
- 本記事は V1.2.2 (2024/08/31 最新) を利用しています
- Brain Builder のソフトウェアライセンス
- (CSV26の場合) PoE スイッチ、インターネットと接続できる回線(NTPのため)、LANケーブル
- (あるとトラブル発生時に助かるかも) ポートミラーリングができるスイッチと Wireshark
上記に加えて、WSL や Python を少しでも触ったことがあることが望ましいです。
本チュートリアルの作業の流れ
1. Local Console をインストールする
2. カメラを接続する
3. カメラのFWを更新する
4. Brain Builder をインストールする
5. Brain Builderでモデルを作る
6. Converter / Packager をインストールする
7. Brain Builder で作ったモデルを変換する
8. AI モデルと Edge App をデプロイする
9. 推論の下準備
10. 推論をする
11. メタデータをデシリアライズする
本文
Local Studio をインストールしよう (チュートリアル:"2.1. Installing Local Console")
まずは Local Studio の zip をダウンロードし、解凍します。
中身はこのようになっています
"Local Console"フォルダ内の local-console-setup.exe を実行します。
特にこだわりがなければそのまま続行。
ユーザーアカウント制御(UAC)を有効にしている場合には、PowerShellのポップアップが出てくるので"はい"を選択。
インストール中では以下のソフトウェアがインストールされていなければインストールされます。
- Mosquitto
- Git
- Python 3.11
続いて、whlファイルでLocal Consoleがインストールされます。
その際に環境によってはもう一度PowerShellの実行許可画面が出るので、"はい"を選択します。
これでLocal Consoleインストール完了です。
デスクトップのショートカットファイルが作られているはずなので、ダブルクリックで起動したら成功です。
下の画像が、Local Console のメインメニューです!
カメラを接続してみよう (チュートリアル: "3.1. Installing the Edge Device")
まず、PoEスイッチングハブに電源を入れ、ハブにインターネットに接続できる回線、CSV26、PCを接続します。
※ 同じLAN内であればPCは有線ではなくWi-Fiでも問題ありませんが、できればデバイスと同じ通信環境のほうが何か問題があったときにデバッグできるので良いかもしれません。
デバイスやPCを接続したら、まず PC がインターネットに接続できるかをGoogle等で検索して確認し、回線の有効性を確かめます。
続いて、カメラが QR コード読み取りモードになっているか、つまり Power LED がオレンジ色に点滅しているかを確認します。
そして、Local Consoleを起動し、Connection
を選択します。
このとき、Powershell やコマンドプロンプトを起動し、ipconfig
で PC の IP(v4) アドレスを確認します。 (今回の場合は 192.168.11.24
)
Local Consoleに表示されているIPアドレスが ipconfig
で確認した情報と等しいかを確認して Generate
を押し、QR コードを生成します。
Wi-Fi モデルのデバイスをご利用の方は Wi-Fi の SSID と Password の入力を忘れないように!
QR コードの読み取りにはコツがいるので、ぜひ下の記事を参照してください。
https://qiita.com/SSS-keijimorikawa/items/240e6243eb9178c59457
Local Console
のウィンドウを最大化し、QRコードを大きくするとカメラから読み取りやすいです。
カメラが QR コードを読み取り、Connection Status: Connected [No TLS]
になったら Local Console とデバイスの接続が成功です!
Local Console のホームに戻り、Streaming
→ Start Streaming
でカメラからの映像が映れば成功です。
映ったことを確認したら Stop Streaming
をクリックします。
続いて次のステップのために、デバイスのファームウェアのバージョンを確認します。
ホームに戻って AI Model
でFWの情報を確認できるので、メモ帳などにコピーして保存しておきましょう。
■ 例
{
"OTA": {
"SensorFwLastUpdatedDate": "",
"SensorLoaderLastUpdatedDate": "",
"DnnModelLastUpdatedDate": [],
"ApFwLastUpdatedDate": "20240624062554",
"UpdateProgress": 100,
"UpdateStatus": "Done"
},
"Version": {
"SensorFwVersion": "010500",
"SensorLoaderVersion": "020301",
"DnnModelVersion": [],
"ApFwVersion": "0700F8",
"ApLoaderVersion": "010301"
}
}
Local Console は開いたままにしておきましょう。
カメラのFWを更新しよう (チュートリアル: "3.4. Updating the firmware")
引き続き Local Console の Connection
で、接続状況が Connected [No TLS]
であるかを確認しましょう。
最初に解凍したフォルダの中の EdgeDeviceFW
フォルダを開き、SZP123S-001_20240607_00_0700F9_010707_020301.zip
を解凍し、展開されたフォルダを開きます。
以下、このフォルダ※を ☆ とします。
※ Local_edition_1.2.2\EdgeDeviceFW\SZP123S-001_20240607_00_0700F9_010707_020301
Local Editionのバージョンが更新された場合、ファームウェアが更新されている可能性があるので、以下はご自身がダウンロードしたものに合わせて読み替えてください。
また、この記事は有線モデルの記事なので、Wi-Fiモデルの場合にも同様に読み替えてください。
☆のフォルダ内の version.txt
を開いて、先にメモしたデバイスのファームウェアの JSON と見比べましょう。
- ota.bin(ApFwVersion): 0700F9 かどうか
- firmware.fpk(SensorFwVersion): 010707 かどうか
もし、バージョンが違えばファームウェアのアップデートを実行します。
もう一度念のため PowerShell などで ipconfig
を実行し、自分の PC の IP アドレスをメモします。
今回の私の環境であれば 192.168.11.24
ですが、以下、192.168.11.24
はご自身の環境に置き換えてください。
☆のフォルダをエクスプローラーで表示し、何もないところで Shift を押しながら右クリックし、Open Git Bash here
を選択
Git Bashをスタートメニューなどから普通に起動して、☆に移動してもらってもOKです。
Git Bash を開いたら、念のため python --version
で Python が実行できることを確認しましょう。
(例)
$ python --version
Python 3.11.9
実行できた場合には、python -m http.server 8000 --bind {IPアドレス}
を実行し、サーバーを起動します。
(例)
python -m http.server 8000 --bind 192.168.11.24
上記を実行しても特に何も表示されませんが、それでOKです。
上記コマンド実行後に、ブラウザ(chromeなど)で http://192.168.11.24:8000 にアクセスします。
以下の図のように Directory listing for /
が出てくればOKです。
続いて、Local Consoleがインストールされているフォルダを開きます。
開き方ですが、デスクトップ上のLocal Consoleのアイコンを右クリック→プロパティ
→ファイルの場所を開く
、フォルダを開くことができます。
インストール場所を変更していなければ、以下のディレクトリのはずです。
C:\Users\{お使いのユーザー名}\AppData\Local\Programs\LocalConsole\virtualenv\Scripts
上記のフォルダを開いた後、再度何もないところで Shift+右クリックで "Open Git Bash here" を実行します。
もちろん普通に起動してこちらに移動してもOKです。
Git Bash を開いたら source ./activate
を実行します。
(virtualenv)
のように表示されればOKです。
続いて、local-console config set webserver port 8000
を実行します。
もし、サーバーを起動した際に 8000
以外のポートを選択していれば 8000
をその数字に変更してください。
上記コマンドが実行できた場合には、以下のコマンドを順次実行し、2種類のFWを更新します。
重ねてになりますが、192.168.11.24
と 8000
は随時自分の環境に合わせて変更してください。
本記事では PoE モデルを利用しましたが、Wi-Fi モデルを利用の方は以下のコマンド中の DesiredVersion
や HashValue
が異なるので、マニュアルを参照してください。
[AppFwの更新コマンド]
local-console config instance backdoor-EA_Main placeholder '{"OTA": {"UpdateModule": "ApFw", "PackageUri": "http://192.168.11.24:8000/ota.bin", "DesiredVersion": "0700F9","HashValue": "5qN7ABQzaNldKdVJer70SRLHjteyMbx4AKKvb7pIr7I="}}'
[SensorFwの更新コマンド]
local-console config instance backdoor-EA_Main placeholder '{"OTA": {"UpdateModule": "SensorFw", "PackageUri": "http://192.168.11.24:8000/firmware.fpk", "DesiredVersion": "010707", "HashValue": "kft4VHlEqtGA7Gpyu4Cs0PZNgWC09teH1IVM+g4NPAI="}}'
更新状況はLocal Consoleのホーム→ AI Model
から確認可能です。
(Downloading -> Updating -> Done)
AppFw の更新が終わってから (UpdateStatusがDoneになってから) SensorFw の更新を実施しましょう。
更新が完了したら python -m http.server 8000 --bind {IPアドレス}
を実行していた Git Bash を再度開いて、Ctrl+C
を押してサーバーをシャットダウンしましょう。
最後に念のため Local Console の AI Model
より、ファームウェアが更新されたことを確認しましょう。
Brain Builder - Classifier/Detector for AITRIOS をインストール、モデルを作成(チュートリアル:"2.3. Installing Brain Builder - Classifier/Detector", "Chapter 4. Creating an AI model and converting it to a packaged AI model")
Local Edition に同梱されている Brain Builder は、Classification と Object Detection 用の AI モデルを、手持ちの画像を利用して作成するツールです。
Brain Builder のインストール、ライセンス管理用の CodeMeter のインストール
それでは Brain Builder のインストール方法を説明します。
NeuralaVIA-Sony-BrainBuilder-CPU-24.05.1-amd64.zip
を解凍し、NeuralaVIA-Sony-BrainBuilder-CPU-24.05.1-amd64.exe
を実行します。
もし再度、WindowsによってPCが保護されました
が表示された場合には、詳細情報
-> 実行
でインストールを開始できます。利用規約等にチェックを入れて実行します。インストールには少し時間が掛かります。
Brian Builder の実行にはライセンスが必要です。
Local Edition には評価用のライセンスが同梱されており、製品版のライセンスは別途ご購入いただけます。
どちらのライセンスを利用する場合でも、ライセンス管理ソフトウェアである CodeMeter
が必要になるので、まずはこちらをインストールします。
まずは以下のリンクから CodeMeter
をダウンロードします。
https://www.wibu.com/support/user/user-software.html#CodeMeter_User_Download
"CodeMeter User Runtime for Windows" の最新版をダウンロードします。
ダウンロード後に CodeMeterRuntime.exe
を実行しインストールを実行します。
スタートメニューを開き、"CodeMeter Control Center" と入力して CodeMeter
を起動します。
ライセンスを購入済み場合には同梱チュートリアルの P9 に合わせて実行します。
同梱されている試用版のライセンスを利用する場合には、"BrainBuilder_TrialLicense" 内のファイルを CodeMeter
のウィンドウにドラッグアンドドロップし、ライセンスが有効化されます。
今回私が利用したのは社内用のライセンスのため、以下の画像とは表記が異なる可能性があります。
ライセンス有効化後に、デスクトップにある Brain Builder
を起動します。
アカウントを作成していなければ アカウントの作成
をクリックしてアカウントを作成します。
プロジェクト
の画面が表示されたら無事 Brain Builder の起動です!
Brain Builder を利用しての AI モデルの作成
この章の冒頭でご案内したとおり、Brain Builder を利用すると Classification と Object Detection の AI モデルを、手持ちの画像から作成できます。
Classification は入力した画像が何であるかを推論した結果を出力するモデルで、Object Detection は学習させた対象が、画像のどの位置に存在しているかを出力するモデルです。
今回はシンプルな Classification を例にご案内します。
起動時の画面の右上の プロジェクトを作成
をクリックし、プロジェクトの名前を入力し、データセットの作成
をクリックします。
画像は、判別対象 1 つごとに、少なくとも 20 枚以上準備しておく必要があります。
データセットがない場合には、Kaggle アカウントを作成の上、同梱チュートリアルの p.22~23 のデータセットを利用してもよいでしょう。
続いて、画像を Brain Builder に取り込み、その画像に対してタグ付けを実施していきます。
タグ付けとは、Classifier のモデルを作るにあたって、その画像が何であるかをあらかじめ指定することです。
その情報をもとに学習を行うことで、対象の画像が何であるかを出力できる AI モデルが作成されます。
この例の場合、鍵が掛かっている画像には"Locked"、開いているものは"Open"というタグを付けました。
Brain Builder では、Classifier の学習をする際には、zip でまとめた画像に一括で同じタグをつけることが出来ます!
学習用の画像のアップロードが終わり、タグ付けが終わるとこのようになります。動的学習を選択したので、ただアップロードしただけですが、学習用とテスト用に画像が分けられましたね。便利!
画像をアップロード、タグ付けが終わったので続いて学習です。
長く学習するほどモデルの精度が上がることが期待されますので、皆さんの準備できる時間に合わせて選択しましょう。
学習が完了すると、このように学習結果が表示されます。わかりやすいですね!
学習が終了したので、ついに AI モデルを生成し、ダウンロードします。
Learning Classifier と Static Classifierがありますが、今回は Static Classifier を利用します。
この 2 つの違いについては、英語になりますが以下をご参照ください。
Training Classifiers and Anomaly Recognizers
Static Classifier から AI モデルが入った zip ファイルをダウンロードできるので、それをダウンロードします。
その zip ファイルを解凍すると {プロジェクト名}.zip (以下の図の場合には key.zip
)が含まれているので、それをさらに解凍すると AI モデルである tflite ファイルがあります。
この tflite ファイルを Converter/Packager
で変換することで、AITRIOS のデバイスで利用できるようになります。
ちなみに、同梱されている Labels.txt
も重要で、いくつの対象を検出できるのかの情報であり、こちらのファイルも後々利用するので頭の片隅に置いておきましょう。
いずれにせよ、これでモデル作成完了です!
Converter/Packager をインストール(チュートリアル: "2.2. Installing ConverterPackager")
Converter/Packager とは、AI モデルを AITRIOS のデバイスで利用可能な形式に変換するツールです。
WSL の Ubuntu 22.04 上での動作を推奨しているので、それに倣ってインストールします。
WSL のインストール、および起動
まず、WSL の Ubuntu 22.04 がインストールされていない場合にはインストールします。
この記事では WSL のインストールについての詳細は説明しませんが、以下のような記事が参考になります。
https://zenn.dev/sunazukin/articles/8fe49e9dee7b7c
https://www.kkaneko.jp/tools/wsl/wsl2.html
インストール完了後にスタートメニューから Ubuntu を起動します。
もしくは、PowerShell などから wsl と入力して起動します。
複数のディストリビューションを利用している場合などには wsl -d {ディストリビューション名} で起動しましょう。
※ すでに WSL を利用している場合には、Converter/Packager のインストールの途中で PythonやOpenJDKをバージョンを指定してインストールするため、Export&Import で別環境を作って作業したほうが良いかもしれません
(参考)
https://qiita.com/koji_hattori/items/1480d25aca8cdf5ac4a1
Converter/Packager インストール作業
チュートリアルの以下の箇所を実行していきます。
まずは、以下を1行ずつ順番に実行し、Converter/Packagerに必要なソフトウェアをインストールします。
既に Python や OpenJDK などをインストール済みの場合には必要に応じて変更いただいてもよいかもしれません。
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y python3.10 python3-pip unzip unrar
sudo apt-get install -y csh wget zip openjdk-17-jdk musl jq bc
上記インストールが終了したら、一度 Windows 側に戻って、この記事の一番最初に解凍したフォルダ内の ConverterPackager
内の ConverterPackager_v1_0_2.msi
を実行します。
Local Console や Brain Builder のインストールと同様に、発行元についてのポップアップが出現した場合には、再度詳細情報 → 実行 をクリックします。
Next
などを押して進めつつ、"Install ConverterPackager_v1.0.2 to:" を
"\\wsl.localhost\{ディストリビューション名}\home\{Ubuntuのユーザー名}"
に変更し、先ほど起動した Ubuntu 内にインストールします。
例: \\wsl.localhost\Ubuntu\home\miso
インストールが完了したら Ubuntu に戻り、cd ~
で、homeディレクトリに移動し、ls -l
で ConverterPackager_v1_0_2
フォルダがあることを確認します。
その後、以下の操作を実行します。
※ homeディレクトリで作業したくない、などの場合には、適宜ディレクトリを変更してください。
[インストールフォルダをひと階層変更し、内部のzipファイルを解凍]
mv ./ConverterPackager_v1_0_2/* ./
unzip FPK_Packager_v010001_for_ubuntu.zip
unzip PostConverter_v020400.zip
unzip SDSP_converter_v3_11.zip
[AI モデル変換プログラムをインストール]
python3 -m pip install SDSP_converter_v3_11/uni/uni_model-4.0.0-py3-none-any.whl
python3 -m pip install SDSP_converter_v3_11/ConvPy/convpy-3.11.0-py3-none-any.whl
[実行ファイルに実行権限を追加、PATHを追加]
chmod +x tflite2pkg.sh
cd SDSP_converter_v3_11/sdspconv && chmod a+x sdspconv
echo "PATH=\"$(pwd):\$PATH\"" >> ~/.profile
cd
. .profile
ここまで終了したら、念のため PATH が通っているか確認するとよいでしょう。以下のようなエラーメッセージが出力されれば成功です。
~$ sdspconv
2024-07-05 11:50:36,525 ERROR: CODE: [NPE] Null parameter exception: No network parameter is defined. It can be supplied either by CLI option '--network' or as a field in configuration file
これで tflite 形式の AI モデルを変換する Converter/Packager
のインストールが完了しました!
Brain Builderで作成したモデルを変換する (チュートリアル: "4.3. Running ConverterPackager")
この作業の概要は、Brain Builder
で作成した tflite ファイルを、Ubuntu 側にコピーして変換して戻す、という流れです。
Ubuntu へのコピー方法として、チュートリアルでは Windows の Explorer を使えばよいとあります。
それでもいいのですが、以下の方法もあるので紹介します。
まず、Brain Builder
で作成したモデルを Ubuntu の Home ディレクトリにコピーします。
Ubuntu 側からは Windows の C ドライブは /mnt/c
で参照可能です。
[例: Windowsのダウンロードフォルダに存在している tflite ファイルを Ubuntu のホームディレクトリに移動]
cp /mnt/c/Users/Miso/Downloads/key-imx500/key-imx500/key/e8c25c10-bd62-494c-9a24-84dd9ade07ff.neubrain.tflite ~/
コピーしたら変換スクリプトを実行
cd ~
./tflite2pkg.sh -i ./e8c25c10-bd62-494c-9a24-84dd9ade07ff.neubrain.tflite
終了したら中身を確認します。
$ ls ./package_output/ -l
total 5928
drwxr-xr-x 5 miso miso 4096 Jul 5 12:03 intermediate_outputs
-rw-r--r-- 1 miso miso 3026976 Jul 5 12:03 network.fpk
-rw-r--r-- 1 miso miso 3027888 Jul 5 12:03 network.pkg
-rw-r--r-- 1 miso miso 912 Jul 5 12:03 network_info.txt
network.pkg
が変換後の AI モデルなのでそれを Windows 側にコピーします。
network.pkg
だとわかりづらいので、名前を変えてもよいかもしれません。
$ cp ./package_output/network.pkg /mnt/c/Users/Miso/Downloads/work/Local\ Studio\ for\ AITRIOS\ v1.2.0/key_lock_open.pkg
これで、Windows 側に変換後(pkgファイル
)の AI モデルを設置できました!
AIモデルとEdge Appをデプロイ (チュートリアル: "Chapter 5. Deploying packaged AI model and Edge Application")
さて、AI モデルの準備もできたので、実際に AI モデルと Edge App をデバイスにデプロイしていきます。
まず、Local Console を改めて開きます。
まだ接続されていればそのままで、もし接続が切れている場合には QR コードの読み取りを実施します。
デバイスが接続された状態で、Local Console の AI Model
を開き、先ほど変換した AI モデル(.pkg)を選択してから Deploy
をクリックします。
AI モデルのデプロイが終了したら、続いて Edge App をデプロイします。
デプロイする Edge App は Classification
と Object Detection
で異なります。
その 2 つの Edge App は、Local Studio for AITRIOS v1.2.0
フォルダの EdgeApp
内にある以下の2つです。
- vision_app_classification_v1.1.2_signed.aot
- vision_app_objectdetection_v1.1.2_signed.aot
Edge App のデプロイ方法は、Local Console の Applications
を開き、Classification
か Object detection
の aotファイルを選択し、Deploy
をクリックです。
もし、AI モデルや Edge App の Deploy に継続して失敗するようであれば、一度 Factory Reset をしてみると良いかもしれません。
Factory Reset をするには、カメラのリセットピンを 30 秒押します。Factory Reset後に、QR の読み取りやファームウェアの更新から再度実行してください。
推論前の各種準備 (チュートリアル: "Chapter 6. Classifier inference setting, execution, and check")
いよいよ推論、、の前に、推論時の各種設定を行います。
まず、Local Console の Configuration
を開きます。
保存場所の設定
推論に当たってはカメラから画像と推論結果を出力できますが、その保存先を指定できます。
Image dir
と Inference dir
を好きなところに設定しましょう。
Application configuration
について
Type:
classification
か detection
の、今回 AI モデルや Edge App で選択したほうを選択します。
自作のモデルなどの場合には custom
を選択してもよいです。
① Schema
デバイスからの推論結果のメタデータは、Flatbuffers でシリアライズされたうえで、BASE64 でエンコードされています。
なので、推論結果を人間が読めるようにするには、BASE64 でデコードの上、デシリアライズが必要になります。
デシリアライズに必要なのが Flatbuffers のスキーマファイル(fbsファイル
)なので、その場所を指定します。
custom
以外を選択している場合、それぞれのモデルに合ったスキーマファイルが自動的に設定されます。
なお、Edge App
フォルダ内に classification.fbs
と objectdetection.fbs
が存在しているので、出力された推論データを活用する際にはこれらのファイルを利用して推論結果をデシリアライズする必要があります。
Local Console がデバイスから出力される推論結果を、自動的に BASE64 デコードとデシリアライズするわけではないので注意しましょう。
② Configuration
どの AI モデルで、どのように推論を実施するかの設定をする必要があります。
これも Edge App
フォルダ内に ClassifierPPLParameterSample.json
(Classification用) と DetectorPPLParameterSample_v1.0.1.json
(Object Detection用) が存在するのでそれを指定します。
推論結果に含める推論結果の数 (例: Classification であれば、画像が何であるかの確率が高い上位n個)
を変えたい場合などには、適宜各jsonファイルをもとに、自分のjsonファイルを作成し、それを指定しましょう。
dnn_output_classes が AI モデルを作成する際に作成したクラスの数と違うと、デシリアライズに失敗して推論結果が出力されないので注意しましょう。
(例) りんごとバナナを推定する AI モデルであれば 2 クラス、グー/チョキ/パーを見分けるモデルであれば 3 クラス
Object Detection の場合、dnn_output_detections
が 100 でないと推論結果が出力されないため、設定ファイルで 100 となっているか確認しましょう。
③ Labels
AI モデルを作成する箇所でも説明しましたが、AI モデルを作った際に、なんというラベルを付けたかの情報である labels.txt
も出力されます。
デバイスからの出力結果は、class_id:0
と score:0.98
で推定される、のような情報のみが出力されますが、labels.txt
を指定することで、推論結果に class_name:Apple
のような情報が追加され、より分かりやすくなります。
ここまでの全てを指定したら Apply Configuarion
をクリックし、設定を適用します。
推論 (Classificatoin: "Chapter 6. Classifier inference setting, execution, and check"、Detector: "Chapter 7. Detector inference setting, execution, and check")
ついに推論を実施できます!
まず、Local Console のホームに戻って Inference
を選択し、Start Streaming
をクリックします。
以下の画像のように、デバイスからの画像と、推論結果が人間にも読めるように出力されれば成功です!
例は、家の鍵が開いているか閉まっているかを推論させた結果です。無事 "Open"
と 0.99 以上のスコアで推論されました。
結果を確認したら、適宜 Stop Streaming
をクリックして推論を停止しましょう。
推論結果のデシリアライズ (チュートリアル: "6.4. Deserializing inference result files (classifier)")
さて、Local Console で推論結果が表示されましたが、Local Console では一時的にデシリアライズした結果を表示しているだけで、推論結果をデータベースに保存したり、他のアプリケーションで利用する場合には、元の推論結果をデシリアライズする必要があります。
そのためには Flatbuffers のバイナリを手に入れる必要があります。
ダウンロード先: https://github.com/google/flatbuffers/releases
上記リンクから Windows.flatc.binary.zip
をダウンロードして解凍します。
解凍したフォルダの中の flatc.exe
を最初に解凍した Local Studio の EdgeApp
フォルダにコピーします。
そのうえで、EdgeApp
フォルダで Shift+右クリック
をして、Git Bash や PowerShell などを開きます。
そこで、今回実施した推論が Classification か Object Detection に合わせて以下のコマンドのどちらかを実行します。
./flatc.exe -p ./classification.fbs
もしくは
./flatc.exe -p ./objectdetectoin.fbs
上記コマンドを実行すると SmartCamera
が出力されます。
この SmartCamera
フォルダがあるディレクトリ、上記の作業通りであれば EdgeApp
フォルダに、チュートリアルの P59 で紹介されている Python のプログラムを配置します。
ただ、自分は以下のように少し改変しました。推論を保存したフォルダを指す inference_dir
だけ皆さんの環境に合わせて変更すれば利用できるはずです。
import os
import base64
import json
from SmartCamera import ClassificationTop
if __name__ == '__main__':
# Set the path to the directory that stores inference result metadata files.
inference_dir = '{ここは推論が保存されているディレクトリを記載}'
## 例
## inference_dir = 'C:\\Users\\Miso\\AppData\\Local\\Temp\\LocalConsole_xp7usx9k\\inferences'
# Process all inference result files in the inference_dir
for inf_file in os.listdir(inference_dir) :
inf_path = '{0}/{1}'.format(inference_dir,inf_file)
# Read one file in the folder.
with open(inf_path, 'r', encoding='utf-8') as json_file:
buf = json.load(json_file)
# Base64 decode the string in the file.
if 'O' in buf['Inferences'][0]:
buf_decode = base64.b64decode(buf['Inferences'][0]['O'])
else:
with open('decoded_result_Classification.json', 'w', encoding='utf-8') as file:
json.dump(buf, file, ensure_ascii=False, indent=4)
# Deserialize the Base64-decoded string.
ppl_out = ClassificationTop.ClassificationTop.GetRootAsClassificationTop(buf_decode, 0)
cls_data = ppl_out.Perception()
res_num = cls_data.ClassificationListLength()
# Store the deserialized data in json format.
buf['Inferences'][0].pop('O')
for i in range(res_num):
cls_list = cls_data.ClassificationList(i)
buf['Inferences'][0][str(i + 1)] = {}
buf['Inferences'][0][str(i + 1)]['class_id'] = cls_list.ClassId()
buf['Inferences'][0][str(i + 1)]['score'] = round(cls_list.Score(), 6)
# Output a json file.
with open('{0}/decoded_{1}'.format(inference_dir,inf_file), 'w', encoding='utf-8') as file:
json.dump(buf, file, ensure_ascii=False, indent=4)
これを実行すると、メタデータが保存されているディレクトリに"decoded_"で始まるファイルが生成されており、開くとデシリアライズされていることが確認できると思います。
困った時は
もし、記事の途中でうまくいかなかった場合は、気軽にこの記事にコメントいただいたり、以下のサポートのページもご覧ください。
コメントのお返事にはお時間を頂く可能性もありますがご了承ください。
また、記事の内容以外で AITRIOS についてお困りごとなどあれば以下よりお問い合わせください。
おわりに
今回は Local Edition を紹介しました!
プロジェクトへのサインアップが不要だったり、個人でも使えたりと、これまでの AITRIOS に比べて非常に始めやすくなったなと個人的には思っております。
小規模な PoC などにも活用の可能性もあるかと思うので、ぜひご活用ください。
AITRIOS についての最新情報は X、LinkedIn で配信中なのでこちらのフォローも何卒よろしくお願いいたします!