要約
- この記事は、OKIのAIエッジコンピューター「AE2100」とコニカミノルタの画像IoTプラットフォーム「FORXAI」の連携方法についての解説記事です。
- 本記事では、FORXAIの骨格推定エンジンとサンプルアプリを使用して人の進入検知をAE2100で推論する方法を2回に分けて解説します。
- 第2回の「AE2100推論編」では、AE2100側の環境構築およびFORXAIのAIモデル・サンプルアプリを使用した推論の実行方法を解説します。
はじめに
本記事は、FORXAIとAE2100の連携に関する2つ目の記事です。
前回の記事では、FORXAIとAE2100の紐づけ方法やAIコンテナのデプロイ方法について解説しました。
OKIのAIエッジコンピューター「AE2100」とコニカミノルタの画像IoTプラットフォーム「FORXAI」を連携してみよう(1) ―デバイス登録・AIコンテナ/アプリ準備編―
今回はAE2100側の環境構築およびFORXAIのAIコンテナ(骨格推定)とサンプルアプリ(Quick Start Kit)を使用した人の進入検知の実行方法を解説します。
なお、本記事はFORXAIパートナーであることが前提の記事構成となっております。
(FORXAIパートナー以外の方はFORXAIパートナーサイトへアクセスすることが出来ません)
FORXAIパートナーではない方で興味がある場合は、FORXAIのお問合せフォームから相談をしてみてください。
環境
実行環境は第1回と同様です。詳細については第1回の記事を参照してください。
OKIのAIエッジコンピューター「AE2100」とコニカミノルタの画像IoTプラットフォーム「FORXAI」を連携してみよう(1) ―デバイス登録・AIコンテナ/アプリ準備編―
各バージョンは以下のものを使用しています。
項目 | バージョン |
---|---|
AE2100(ファームウェア) | V3.7.0 |
FORXAI IoT Platform | V1.6.1-1 |
FORXAI Skelton Recognition | V1.0.0-2 |
Quick Start Kit | V1.0.0-1 |
AE2100ファームウェアv3.8.0でも動作確認しています。
v3.8.0を使用する場合、HDDLデーモンは OpenVINO 2021.4.2 LTSを適用してください。
更新方法は、AE2100ファームウェアに同梱のリリースノートを参照してください。
AE2100のiptablesの設定
まずは、AE2100のiptablesの設定を行う必要があります。
FORXAI関連のコンテナは全て同一サブネット172.18.0.0/16としてデプロイされているのですが、AE2100のiptablesのデフォルト設定のままではコンテナ間の通信が出来ません。
そのため、iptablesに以下のルールを事前に追加しておきます。
-A service_accept_in -s 172.18.0.0/16 -d 192.168.100.1 -j ACCEPT
なお、iptablesの設定を変更するためには「iptables-make-chain-custom」と「iptables-common-rule-custom」の作成が必要です。
詳細はAE2100 SDK取扱説明書(共通編)の「ファイアウォール設定」を参照してください。
Quick Start Kit実行用のコンテナを用意(ホストOS側)
前記事でFORXAI IoT Platform関連のコンテナとAIコンテナのデプロイは完了していますが、それら以外にFORXAIのサンプルコード集「Quick Start Kit」を実行するためのコンテナを別途用意する必要があります。
本記事では、Quick Start Kit実行用のコンテナとしてAE2100の標準コンテナae2100_openvino_ubuntu20_runtime_2021.4.2.tarを使用します。
AE2100 SDK取扱説明書(DeepLearnning編)の「AE2100へのデプロイ」を参考にDockerイメージを取り込み、以下のコマンドでコンテナを起動してください。
コンテナ名は任意ですが、本記事ではforxai-demoとしています。
# docker run -d --network forxai_network --expose 54321 --name forxai-demo -it ae2100_openvino/ubuntu20_runtime:2021.4.2 /bin/bash
次に、前記事でFORXAIパートナーサイトからダウンロードしていた「quick_start_kit_r01.zip」と「skeleton_recognition_dl.zip」をSCP等でAE2100のホストOSに転送し、forxai-demoにコピーします。
また、推論時の入力としてインテルのGithub上のサンプル動画「one-by-one-person-detection.mp4」を使用するため、同様にforxai-demoにコピーします。
# docker cp quick_start_kit_r01.zip forxai-demo:/root/
# docker cp skeleton_recognition_dl.zip forxai-demo:/root/
# docker cp one-by-one-person-detection.mp4 forxai-demo:/root/
Quick Start Kit実行環境の構築(コンテナ側)
本章では、前章で作成したコンテナforxai-demoでQuick Start Kitを実行するための環境を構築します。
forxai-demoにアクセスしておいてください。
まず、デモ実行にはffmpeg等が必要になるため、依存パッケージのインストールをおこないます。
※インターネットへの接続が必要です。
# cd /opt/intel/openvino/install_dependencies
# apt-get clean
# ./install_openvino_dependencies.sh
次に、ホストOS側からコピーした「quick_start_kit_r01.zip」と「skeleton_recognition_dl.zip」を解凍します。
解凍してできたディレクトリsrc/people-entering-detectionに人の進入検知アプリ「sample_entering-detection.py」が格納されているので、ついでにサンプル動画「one-by-one-person-detection.mp4」を同ディレクトリーに置いておきます。
# cd
# apt-get install zip
# unzip quick_start_kit_r01.zip
# unzip skeleton_recognition_dl.zip
# cp -p one-by-one-person-detection.mp4 src/people-entering-detection/
また、FORXAIの骨格推定エンジンをAE2100で動作させるためには、Pythonのクライアントライブラリをインストールする必要があります。
前項で解凍した「skeleton_recognition_dl.zip」の中にインストールパッケージが含まれているので、それらをインストールします。
詳細はFORXAIパートナーサイトのAIコンテナ準備のページに記載されています。
# cd
# pip3 install --upgrade pip
# pip3 install protobuf==3.20.0
# pip3 install /root/skeleton_recognition_dl/python/dist/forxai_base-1.0.0-py3-none-any.whl
# pip3 install /root/skeleton_recognition_dl/python/dist/forxai_recognition-1.0.0-py3-none-any.whl
最後に、「sample_entering-detection.py」を実行するために以下の箇所のコード修正を行います。
with forxai_recognition.Client('127.0.0.1', 52051) as d:
このIPアドレスの部分を、前記事でデプロイした骨格推定エンジン「forxai_skelton_recognition_ov」のIPアドレスに修正します。
AIコンテナのIPアドレスはFORXAIのPortainer画面の「Containers」から確認可能です。
私の場合は172.18.0.2であったため、以下のようにコードの修正を行いました。
with forxai_recognition.Client('172.18.0.2', 52051) as d:
推論の実行
あらかじめこちらの記事を参考にしてWindowsPCでXLaunchを起動しておき、ウインドウ表示先であるウインドウズPCのIPアドレスを指定します。
# export DISPLAY=192.168.0.2:0.0
ここまでで推論実行までの準備が完了しました。
それでは、「one-by-one-person-detection.mp4」を入力として「sample_entering-detection.py」を実行してみましょう。
# cd src/people-entering-detection/
# python3 sample_entering-detection.py --file one-by-one-person-detection.mp4
推論の実行結果
「sample_entering-detection.py」を実行すると、以下のようなウィンドウが表示されます。(まだ骨格推定のAIは動いていない状態です)
ウィンドウ左上の「Click the image window four times to define the area」に従い、検知エリアとして設定したい4箇所をマウスでクリックします。
そうすると検知エリアとして黄色い枠が表示され、骨格推定のAIが動く状態になります。
ウィンドウの中に人が映ると骨格推定が始まります。
そして事前に設定した検知エリアに人が入ると検知枠の色が赤色、つまり進入を検知した状態となりました。
後ろ向きの人でも正確に骨格の位置を推定できていて検知精度としては中々良い感じですね。
入力を動画ではなくカメラ映像に変えることももちろん出来るので、現場でリアルタイムに推論結果を出すことも可能です。
なお、この推論はCPUで行っているので推論の処理速度(FPS)は若干低く出ています。
AE2100はMyriadを使用することでより高速な推論を実現できるので、FORXAI側でMyriadに対応していただくことを期待しています。
まとめ
今回はAE2100側の環境構築およびFORXAIのAIモデル・サンプルアプリを使用した推論について解説しました。
FORXAIには他にもたくさんのAIコンテナがあるので、用途に応じて適切なAIを選択することでAE2100×FORXAIの組合せで色々なユースケースを実現することが出来ると思います。
前回の記事:
OKIのAIエッジコンピューター「AE2100」とコニカミノルタの画像IoTプラットフォーム「FORXAI」を連携してみよう(1) ―デバイス登録・AIコンテナ/アプリ準備編―