2
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?

Local Edition (v1.2.2, v1.3.0) 触ってみた!!

Last updated at Posted at 2024-11-27

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 モデルを非常にわかりやすく作ることができます。

Local Console Local Studio (Brain Builder)

前提

こちらの記事は 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モデルをご利用の方は接続方法や、ファームウェアのバージョンがこの記事の記載と違うのでお気を付けください
  • 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 をダウンロードし、解凍します。
中身はこのようになっています

1_zip.png

"Local Console"フォルダ内の local-console-setup.exe を実行します。

特にこだわりがなければそのまま続行。

3_lcinstalllocation.png

ユーザーアカウント制御(UAC)を有効にしている場合には、PowerShellのポップアップが出てくるので"はい"を選択。

4_lcinstalluac.png

インストール中では以下のソフトウェアがインストールされていなければインストールされます。

  • Mosquitto
  • Git
  • Python 3.11

続いて、whlファイルでLocal Consoleがインストールされます。
その際に環境によってはもう一度PowerShellの実行許可画面が出るので、"はい"を選択します。
これでLocal Consoleインストール完了です。

デスクトップのショートカットファイルが作られているはずなので、ダブルクリックで起動したら成功です。
下の画像が、Local Console のメインメニューです!
5_lc.png

カメラを接続してみよう (チュートリアル: "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 )

6_ip.png

Local Consoleに表示されているIPアドレスが ipconfig で確認した情報と等しいかを確認して Generate を押し、QR コードを生成します。

Wi-Fi モデルのデバイスをご利用の方は Wi-Fi の SSID と Password の入力を忘れないように!

7_generateqr.png

QR コードの読み取りにはコツがいるので、ぜひ下の記事を参照してください。
https://qiita.com/SSS-keijimorikawa/items/240e6243eb9178c59457
Local Console のウィンドウを最大化し、QRコードを大きくするとカメラから読み取りやすいです。

カメラが QR コードを読み取り、Connection Status: Connected [No TLS] になったら Local Console とデバイスの接続が成功です!

Local Console のホームに戻り、StreamingStart Streaming でカメラからの映像が映れば成功です。

8_stream.png

映ったことを確認したら 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です。

11_opengitbash.png

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です。

12_fwserver.png

続いて、Local Consoleがインストールされているフォルダを開きます。
開き方ですが、デスクトップ上のLocal Consoleのアイコンを右クリック→プロパティファイルの場所を開く、フォルダを開くことができます。

13_lclocation.png

インストール場所を変更していなければ、以下のディレクトリのはずです。
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.248000 は随時自分の環境に合わせて変更してください。

本記事では PoE モデルを利用しましたが、Wi-Fi モデルを利用の方は以下のコマンド中の DesiredVersionHashValue が異なるので、マニュアルを参照してください。

[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" の最新版をダウンロードします。

14_codemeter.png

ダウンロード後に CodeMeterRuntime.exe を実行しインストールを実行します。

15_cminstall.png

スタートメニューを開き、"CodeMeter Control Center" と入力して CodeMeter を起動します。

16_cm.png

ライセンスを購入済み場合には同梱チュートリアルの P9 に合わせて実行します。
同梱されている試用版のライセンスを利用する場合には、"BrainBuilder_TrialLicense" 内のファイルを CodeMeter のウィンドウにドラッグアンドドロップし、ライセンスが有効化されます。

今回私が利用したのは社内用のライセンスのため、以下の画像とは表記が異なる可能性があります。

17_cmlisence.png

ライセンス有効化後に、デスクトップにある Brain Builder を起動します。
アカウントを作成していなければ アカウントの作成 をクリックしてアカウントを作成します。

18_bblogin.png

プロジェクトの画面が表示されたら無事 Brain Builder の起動です!

19_bb.png

Brain Builder を利用しての AI モデルの作成

この章の冒頭でご案内したとおり、Brain Builder を利用すると Classification と Object Detection の AI モデルを、手持ちの画像から作成できます。
Classification は入力した画像が何であるかを推論した結果を出力するモデルで、Object Detection は学習させた対象が、画像のどの位置に存在しているかを出力するモデルです。
今回はシンプルな Classification を例にご案内します。

起動時の画面の右上の プロジェクトを作成 をクリックし、プロジェクトの名前を入力し、データセットの作成 をクリックします。
8_1_dataset_create
8_2_dataset

画像は、判別対象 1 つごとに、少なくとも 20 枚以上準備しておく必要があります。
データセットがない場合には、Kaggle アカウントを作成の上、同梱チュートリアルの p.22~23 のデータセットを利用してもよいでしょう。

続いて、画像を Brain Builder に取り込み、その画像に対してタグ付けを実施していきます。
タグ付けとは、Classifier のモデルを作るにあたって、その画像が何であるかをあらかじめ指定することです。
その情報をもとに学習を行うことで、対象の画像が何であるかを出力できる AI モデルが作成されます。

この例の場合、鍵が掛かっている画像には"Locked"、開いているものは"Open"というタグを付けました。
Brain Builder では、Classifier の学習をする際には、zip でまとめた画像に一括で同じタグをつけることが出来ます!

8_3_dataset_files
8_4_select_dynamic_or_static
8_5_upload_images

学習用の画像のアップロードが終わり、タグ付けが終わるとこのようになります。動的学習を選択したので、ただアップロードしただけですが、学習用とテスト用に画像が分けられましたね。便利!

8_6_dynamic

画像をアップロード、タグ付けが終わったので続いて学習です。
長く学習するほどモデルの精度が上がることが期待されますので、皆さんの準備できる時間に合わせて選択しましょう。

8_7_learning

学習が完了すると、このように学習結果が表示されます。わかりやすいですね!

8_8_result

学習が終了したので、ついに 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 のデバイスで利用できるようになります。

8_9_download

8_10_ai_model_files

ちなみに、同梱されている 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 インストール作業

チュートリアルの以下の箇所を実行していきます。

9_convpack_man1.png
10_convpack_man2.png

まずは、以下を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 -lConverterPackager_v1_0_2 フォルダがあることを確認します。

20_checkCP.png

その後、以下の操作を実行します。

※ 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 は ClassificationObject 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 を開き、ClassificationObject 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 dirInference dir を好きなところに設定しましょう。

Application configuration について

Type:

classificationdetection の、今回 AI モデルや Edge App で選択したほうを選択します。
自作のモデルなどの場合には custom を選択してもよいです。

① Schema
デバイスからの推論結果のメタデータは、Flatbuffers でシリアライズされたうえで、BASE64 でエンコードされています。
なので、推論結果を人間が読めるようにするには、BASE64 でデコードの上、デシリアライズが必要になります。

デシリアライズに必要なのが Flatbuffers のスキーマファイル(fbsファイル)なので、その場所を指定します。
custom以外を選択している場合、それぞれのモデルに合ったスキーマファイルが自動的に設定されます。

なお、Edge App フォルダ内に classification.fbsobjectdetection.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:0score: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 以上のスコアで推論されました。

21_decoded.png

結果を確認したら、適宜 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 で配信中なのでこちらのフォローも何卒よろしくお願いいたします!

2
0
1

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
2
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?