はじめに
OKIのAE2100はカメラが設置されたエッジ側で高速なディープラーニング推論処理を行うことができます。
例えば、外観検査を想定すると下図のようにIPカメラから送信された映像に対してAE2100で良品判定の対象物体があるかをチェックし、対象物体がある場合に良品判定するというように使用することができます。
AE2100ではこのように複数のAI処理を行うことはできますが、その反面でAE2100の処理負荷が高くなるという懸念があります。
AI推論の処理負荷を軽減させるために軽量なモデルを使用するなども有効ですが、今回はAIカメラを使用してAIカメラとAE2100でAI処理を分散する方法を検討したいと思います。
例えば、下図のようにAIカメラから良品判定の対象物体が映った画像のみをAE2100に送信し、AE2100で良品判定のみ行います。
この場合、AIカメラは比較的簡単なAI処理を行えばよく、AE2100は良品判定のためのAI処理だけをするためAI推論処理の負荷が軽減されます。
AE2100の処理負荷を下げることにより、カメラの台数を増やしたり、処理負荷が高い推論モデルを動作させることなども期待できます。
今回の検証内容
今回の検証ではAIカメラで状態変化検知を行い、その結果の画像をAE2100で画像分類の推論処理を行うことでAI推論処理の連携ができるかを試したいと思います。
本来であれば、しっかりとアプリを設計開発できると良いですが、今回は公開されているサンプルプログラム等を使用して検証します。こちらの検証では画像分類の推論処理を行うため、画像分類用のAIモデルが必要です。
使用するAIカメラはi-PRO株式会社(以下、i-PRO)のi-PRO mini 有線LANモデル(WV-S7130UX)です。
こちらのi-PRO miniには様々なAIアプリを動作させることができます。
AIアプリはi-PROで公開されているものもありますし、SDKを入手すれば独自に開発することもできます。
最近、AI状態変化検知アプリケーション(以下、AI状態変化検知アプリ)というAIアプリがリリースされたので今回はこちらを使用したいと思います。
AI状態変化検知アプリは画像上に設定した検知エリアの平常時状態を学習して、平常時状態から閾値以上の変化が一定時間以上続いた場合にアラームを通知することができます。
i-PROのサイトにデモ動画がありましたので以下に示します。
こちらのデモ動画では画面左側の扉に検知エリア(青枠)があり、扉が閉じられた状態を学習しているようです。
その後、扉が10秒以上開けっ放しになったことを検知すると、検知エリアの枠が赤色に変わります。
使用機器
- AE2100(インテルR Movidius? Myriad? X 搭載/LAN版):1台
- 本体ファームバージョン:v3.8.0
- 標準コンテナ:AE2100 標準コンテナイメージ(OpenVINO有(Ubuntu20.04版)) 2022年10月版
- HDDL Damenoバージョン:v1.0-r7(OpenVINO 2022.1.0用)
- AIカメラ(i-PRO mini 有線LANモデル):1台
- Windows PC:1台
- OS:Windows 10 Pro
- 判定対象物体(今回は判定対象用にAE2100を1台用意しました)
- LANケーブル:3本
- micro SDカード:1枚
- PoEインジェクター:1台
- 三脚:1台
機器設置イメージは以下の通りです。
外観検査で製品(推論対象用のAE2100)が所定の場所に置かれたときにAIカメラから画像を取得して、推論実行用のAE2100で推論処理をするという想定で機器を設置しました。
AIカメラ側の作業
機器の接続
はじめにi-PRO miniの本体にmicro SDカードを挿入し、三脚に固定します。
カメラとPoEインジェクター、PoEインジェクターとWindows PCとをLANケーブルで接続します。
Windows PCの有線LANのIPアドレスを「192.168.0.2」に変更します。
i-PRO miniのデフォルトのIPアドレスは「192.168.0.10」です。変更された場合は適宜読み替えてください。
AIカメラの初期設定
Windows PCでブラウザを起動して「http://192.168.0.10/
」にアクセスします。(PROXYサーバーを設定されている場合は、PROXYサーバーを経由しないように設定を変更してください)
初回ログインの場合は管理者登録の画面が表示されますのでユーザー名とパスワードを設定してください。
例えば、ユーザー名とパスワードを以下とします。
その他に言語、日時を設定するとライブ画ページが表示されます。
AI状態変化検知アプリのインストール
こちらのi-PROのページよりAI状態変化検知アプリをダウンロードします。
- ダウンロードファイル:XAE400_v100.zip
- XAE400_v100.ext
ブラウザのライブ画ページから詳細設定のページに移ります。
詳細設定ページから[機能拡張ソフトウェア]→[ソフトウェア管理]と遷移し、RAM容量拡張モードをOnにして、設定ボタンを押します。
次にソフトウェア管理の画面の下部にある「ファイルを選択」ボタンを押して、ダウンロードした「XAE400_v100.ext」を選択します。
「新しい拡張ソフトウェアをインストールする。」のラジオボタンを選択して、「実行」ボタンを押すとアプリがインストールされます。
インストールが完了するとソフトウェア管理の画面に「AI状態変化検知」が追加されます。
AI状態変化検知のモデル学習
ご注意
モデル学習を行った後にカメラが動くと誤検知する可能性があるため、モデル学習後はカメラが動かないようにしてください。
AI状態変化検知のモデル学習はi-PRO設定ツール (以下、iCT) で行います。
iCTはこちらのi-PROのページよりダウンロードし、ガイダンスに従いインストールします。
iCTを起動すると、起動ユーザー情報の新規登録画面が表示されますのでユーザー名とパスワードを設定します。今回はカメラと同じにしました。
ログインするとメニュー選択画面が起動します。
ウィンドウ上部のIPアドレスに「192.168.0.2」が選択されていることを確認して、起動モードをプロフェッショナルモードに変更して、「次へ」ボタンを押します。
検出結果の画面で検出されたカメラ情報が表示されます。
カメラに設定したユーザー名とパスワードを入力して、「開始」ボタンを押します。
カメラの設定が更新されると以下の画面が表示されるので、「完了」ボタンを押します。
iCTの画面にカメラ情報が表示されますのでカメラ情報の上で右クリックをして、「個別設定/拡大画面表示」を選択します。
すると、個別設定のウィンドウが起動します。
個別設定のメニューから「AI状態変化検知V1.00」を選択すると、画面の右側に学習のガイダンスが表示されます。
以降、ガイダンスに従い、モデルの学習を行います。
-
学習モデル設定
学習対象の学習モデル番号を設定します。「1(未使用)」を選択し、「続行」ボタンを押します。
※1度学習した後に画像を撮影したため「1(使用中)」となっています。
-
検知エリア設定
画面中央のカメラ画像に検知エリアを描画します。描画すると検知エリアの詳細な設定ができるようになります。今回は検知時間の設定を「2s」に変更して設定を保存し、「続行」ボタンを押します。
※AE2100を置く目印の内側に検知エリアを設定しました。
-
学習用画像の保存
学習用の画像を撮影します。撮影方法は自動保存と手動保存がありますが、今回は手動保存を選択し、画像を撮影しました。画像を数枚撮影したら、「続行」ボタンを押します。
※画像は2枚以上必要です。学習画像はできるだけ多くのバリエーションを用意した方が良いと思います。
-
学習実行
学習する画像を選択します。「表示」ボタンを押すと、学習用画像選択画面が起動します。
学習に使用する画像を選択し、左上の三角ボタンを押すと学習が開始されます。
学習が完了したら、「続行」ボタンを押します。
検知エリア内にモノを置くと、検知エリア内の変化がある箇所が赤くなり、2秒以上経過すると検知エリアの枠が赤くなります。
学習結果が問題なければ、「完了」ボタンを押します。
最後に、個別設定のメニューから「詳細設定V1.00」を選択し、アラーム通知動作を「周期」から「初回」に変更し、「設定」ボタンを押します。
※アプリが正しくインストールされ状態変化を検知するとブラウザのライブ画ページの右下にアラームが表示されるようになります。
カメラのIPアドレス変更
以降でAE2100と通信をするためにカメラのIPアドレスを変更します。
Windows PCのブラウザの詳細設定ページから[ネットワーク]のページに移ります。
接続モードを「固定IP」にして、IPアドレス(IPv4)、サブネットマスク、デフォルトゲートウェイを以下に設定して、「設定」ボタンを押します。カメラが再起動します。
- IPアドレス(IPv4):192.168.1.10
- サブネットマスク:255.255.255.0
- デフォルトゲートウェイ:192.168.1.1
Windows PCのIPアドレスを「192.168.1.2」に変更します。
Windows PCでブラウザで「http://192.168.1.10/
」にアクセスし、カメラのIPアドレスが変更されたことを確認します。
カメラ側の作業は以上で終わりです。
AE2100側の作業
コンテナの環境構築
以下のように各機器を接続します。
AE2100のLAN2ポートとWindows PCとをLANケーブルで接続します。
Windows PCのIPアドレスを「192.168.100.2」に変更します。
Windows PCのブラウザでAE2100のWEB-UIにアクセスし、AE2100のLAN1ポートのIPアドレスを「DHCP」に変更してインターネットに接続できるようにします。
※WEB-UIにアクセス方法については、AE2100 取扱説明書(WEB-UI編)を参照してください。
ご注意
初めてAE2100を使用する際は、AE2100 SDK取扱説明書(DeepLearning編)を参照して初期設定を行ってください。
HDDL Daemonは本体ファーム(v3.8.0)のREADMEを参照してOpenVINO2022.1.0用にアップデードしてください。
次にAIエッジユーザーサイトからAE2100 標準コンテナイメージ(OpenVINO有(Ubuntu20.04版)) 2022年10月版「AE2100_StdContainerOpenVINO_Ubuntu20_202210.zip」をダウンロードします。
「AE2100_StdContainerOpenVINO_Ubuntu20_202210.zip」をWinSCP等を使用して、AE2100の「/home/root」に転送します。
Windows PCからTeraTerm等を使ってAE2100にSSH接続します。
以下のコマンドを順に実行してコンテナを起動します。
※unzipコマンドがインストールされてない場合は、「apt install -y zip」でインストールしてください。
$ unzip AE2100_StdContainerOpenVINO_Ubuntu20_202210.zip
$ docker load < ae2100_openvino_ubuntu20_runtime_2022.1.0.tar
$ docker run --device /dev/dri -it --device=/dev/ion:/dev/ion -v /var/tmp:/var/tmp -v /dev/shm:/dev/sh --name ubuntu-openvino -d ae2100_openvino/ubuntu20_runtime:2022.1.0 /bin/bash
以下のコマンドを実行してコンテナの中に入ります。
$ docker exec -it ubuntu-openvino /bin/bash
以下のコマンドを順に実行してコンテナ内に動作環境を構築します。
今回はPythonのサンプルプログラムを実行するため、PythonとOpenCVの依存プログラムをインストールします。
# apt update
# apt install -y vim
# apt install -y python3
# apt install -y python3-pip
# apt install -y libgtk-3-0 ffmpeg libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
参考サイト:OKI「AE2100」 Ubuntu + OpenVINOコンテナ向け Python環境の構築方法
続けて、カメラと通信するプログラムはWebsocketを使用するため、以下のコマンドを順に実行して、websocket-clientをインストールします。
# pip3 install --upgrade pip
# pip3 install websocket-client
以上で環境構築は終了です。
機器の接続
続いて以下のように各機器を接続します。
カメラとPoEインジェクター、PoEインジェクターとAE2100のLAN1ポートをLANケーブルで接続します。
AE2100のLAN1ポートのIPアドレスをデフォルト値の「192.168.1.1」にします。
カメラから画像を受信するプログラムのインストールと実行
状態変化したときの画像を受信するプログラムはこちらのi-PROのページのサンプルプログラムを使用しました。
このプログラムはAI動態検知アプリケーション向けですが、AI状態変化検知アプリでも同様の外部インターフェースを使用しているため、状態変化を検知した際の画像が受信できます。
上記のサイトから以下のサンプルプログラムをダウンロードし、WinSCP等を使用してAE2100の「/home/root」に転送します。
- ダウンロードファイル:receive_onvifmeta_event/ws_metarcv.py
以下のコマンドを実行してサンプルプログラムをコンテナの中にコピーします。
$ docker cp ./receive_onvifmeta_event ubuntu-openvino:/root/
$ docker exec -it ubuntu-openvino /bin/bash
以下のコマンドを実行してダウンロードしたサンプルプログラムのディレクトリまで移動します。
# cd /root/receive_onvifmeta_event
参考サイトを参考にサンプルプログラムの71行目~73行目を修正します。
※_cam_idと_cam_pwdについては、ご自身でカメラに設定したユーザー名とパスワードに変更してください。
# vi ws_metarcv.py
_cam_ip = "192.168.1.10" # Change to match your camera setting
_cam_id = "admin" # Change to match your camera setting
_cam_pwd = "Admin000" # Change to match your camera setting
以下のコマンドでサンプルプログラムを実行できます。
このプログラムは実行するとimageディレクトリが作成されます。
その後にカメラと接続してカメラが状態変化を検知するとその画像がimageディレクトリに保存されます。
プログラムを終了するときはCtrl + Cで終了します。
# python3 ws_metarcv.py
Opened connection
image/2023-02-08T05-50-17.jpg
image/2023-02-08T05-50-35.jpg
image/2023-02-08T05-50-47.jpg
・
・
カメラ前に何もない状態から、カメラ前に判定対象用のAE2100を置くと画像が保存されます。
以下が、imageディレクトリに保存された画像(2023-02-08T05-50-17.jpg)です。
画像分類のプログラムのインストールと実行
次にOpenVINOの画像分類のサンプルプログラムをインストールします。
OpenVINOのGithubから以下のサンプルプログラムをダウンロードし、WinSCP等を使用してAE2100の「/home/root」に転送します。
- ダウンロードファイル:hello_classification/hello_classification.py
以下のコマンドを実行してサンプルプログラムをコンテナの中にコピーします。
$ docker cp ./hello_classification ubuntu-openvino:/root/
今回はお試しなので使用するモデルはこちらの記事で作成したAE2100の簡易良品判定モデルを使用します。
実際に行う場合は、ご自身の用途に合わせたモデルをご使用ください。
$ docker cp ./model.bin ubuntu-openvino:/root/hello_classification
$ docker cp ./model.labels ubuntu-openvino:/root/hello_classification
$ docker cp ./model.xml ubuntu-openvino:/root/hello_classification
$ docker exec -it ubuntu-openvino /bin/bash
以下のコマンドを実行してダウンロードしたサンプルプログラムのディレクトリまで移動します。
# cd /root/hello_classification
上記で受信した判定対象用のAE2100の画像(2023-02-08T05-50-17.jpg)に対して、良品判定の推論処理を行います。
以下のコマンドでサンプルプログラムを実行できます。
こちらのサンプルプログラムは推論スコアのTOP10を表示します。
# python3 hello_classification.py model.xml /root/receive_onvifmeta_event/image/2023-02-08T05-50-17.jpg HDDL
[ INFO ] Creating OpenVINO Runtime Core
[ INFO ] Reading the model: model.xml
[ INFO ] Loading the model to the plugin
[ INFO ] Starting inference in synchronous mode
[ INFO ] Image path: /root/receive_onvifmeta_event/image/2023-02-08T05-50-17.jpg
[ INFO ] Top 10 results:
[ INFO ] class_id probability
[ INFO ] --------------------
[ INFO ] 0 0.8759766
[ INFO ] 1 0.1238403
[ INFO ]
[ INFO ] This sample is an API example, for any performance measurements please use the dedicated benchmark_app tool
Python版のサンプルプログラムはラベルファイルを一緒に置いてもラベル名が表示されないみたいですね。
今回のモデルはclass_idについて0が外観に異常なし、1が外観に異常ありとして学習しています。
今回の結果ですと、class_idの0が87.6%となっており、外観に異常なしと判定されているようです。
ただ、こちらのモデルは学習枚数が少ないのものを使用していますので、実際に使用される場合は大量の学習データを使用したモデルを使用した方が良いと思います。
まとめ
今回の検証ではi-PRO miniを使用して物体が所定の位置に置かれた場合のみをAE2100で受信して、その受信した画像に対して画像分類の推論処理を実施することを検証しました。
お試し検証だったため画像の受信と推論処理を別々のプログラムで実行しましたが、どちらもPythonプログラムなのでマージすれば1つのアプリで実行できそうですね。
また今回検証してみて、実際に運用レベルまで持って行くにはユースケースに合ったAIカメラ側のアプリの開発や画像分類モデルの精度向上、運用方法の検討などが必要だと感じました。
参考情報
先日にi-PROより新しいAIカメララインアップとして、moducaシリーズが発表されました。
moducaは「様々な現場のAIのクリエイター、IoTのクリエイターが、映像AIのPoCや運用システムを構築する際、その用途や現場に最適なAIカメラが見つかる、1つから購入できる、すぐに届く」をコンセプトにされていて、誰でも1台から購入できるユニークな製品です。(Amazonでも購入可能です)
AE2100との接続も可能で接続検証情報がi-PROサイトに公開されています。