要約
- 本記事では、AIエッジコンピューター「AE2100」の標準コンテナ内にwebカメラ実行が可能な「OpenVINO™ Notebooks」環境を構築する方法を説明します。
- ブラウザからAE2100で動作している「OpenVINO™ Notebooks」に接続し、webカメラを用いるサンプルコードの実行を行います。
はじめに
前回の記事では、「AE2100」上に「OpenVINO™ Notebooks」環境を構築してサンプルコードの動作確認を行いました。
本記事では、webカメラを「AE2100」の標準コンテナ内で動作できるように環境構築を行い、
人物の骨格推定を行う「OpenVINO™ Notebooks」のサンプルコードで動作確認を行います。
事前準備
以下のような構成で、ウインドウズPCからAE2100へTeraTermでコンソール接続できることを前提とします。
(適宜IPアドレスなどはご使用環境に合わせ読み替えてください。)
なおAE2100のコンテナバージョンは「ae2100_openvino_ubuntu20_runtime_2021.4.2.tar」とします。
ウインドウズPCには、ブラウザ(Google Chrome)をインストールしてください。
今回必要なものはUSB2.0接続のWebカメラとなります。
この記事では"Logicool HDウェブカメラ C270"を使って動作確認をおこないました。
環境構築
本記事は公式ドキュメントを参考にAE2100に合わせた環境構築を行っています。
TeraTermでAE2100のホストOSにログインし、lsusbコマンドでWebカメラが認識されているかを確認します。
”Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270” と表示されていれば認識されています。
root@ae2100:~# lsusb
Bus 001 Device 002: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
Bus 001 Device 003: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 017: ID 03e7:f63b Intel
Bus 004 Device 016: ID 03e7:f63b Intel
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 2c42:5114
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
/dev/video0 を作成します。
root@ae2100:~# mknod /dev/video0 c 81 0
root@ae2100:~# chmod 666 /dev/video0
root@ae2100:~# chown root.video /dev/video0
コンテナの引数を追加するため、前回の記事で構築したdockerコンテナを一度dockerイメージに保存して削除します。
root@ae2100:~# docker stop ubuntu-openvino-notebooks
root@ae2100:~# docker commit ubuntu-openvino-notebooks ubuntu-openvino-notebooks-images
root@ae2100:~# docker rm ubuntu-openvino-notebooks
下記コマンドでコンテナを起動します。
コンテナからwebカメラを使えるようにするため、引数に--device=/dev/video0:/dev/video0
を加えます。
root@ae2100:~# docker run \
--device /dev/dri \
-it \
--device=/dev/ion:/dev/ion \
--device=/dev/video0:/dev/video0 \
-v /var/tmp:/var/tmp \
-v /dev/shm:/dev/shm \
-p 10000:8888 \
--name ubuntu-openvino-notebooks \
-d ubuntu-openvino-notebooks-images \
/bin/bash
コンテナにアクセスします。
root@ae2100:~# docker exec -it ubuntu-openvino-notebooks /bin/bash
pythonの仮想環境をactivateします。
root@639e291eece6:/opt/intel/openvino_2021.4.752# cd ~
root@<CONTAINER_ID>:~# source openvino_env/bin/activate
「OpenVINO™ Notebooks」を起動します。
(openvino_env) root@<CONTAINER_ID>:~/openvino_notebooks# cd openvino_notebooks
(openvino_env) root@<CONTAINER_ID>:~/openvino_notebooks/notebooks# jupyter lab notebooks \
--no-browser \
--port=8888 \
--ip=0.0.0.0 \
--allow-root \
--NotebookApp.token=''
以上で「OpenVINO™ Notebooks」の動作環境の構築は完了です。以下では「OpenVINO™ Notebooks」のサンプルコードで動作確認をします。
サンプルコードの実行 人物の骨格推定
このサンプルコードは、human-pose-estimation-0001のIRモデルで人物の骨格推定を行います。人物の骨格推定は、webカメラもしくは動画ファイルに対して行うことができます。
Jupyter Lab
の起動画面から402-pose-estimation-webcam
のフォルダをクリックして開きます。
402-pose-estimation-webcam.ipynb
をクリックすることでJupyter Lab
内でタブが立ち上がりソースコードを開くことができました。
↓
AE2100のGPUとHDDL実行に対応させるため、
以下の赤丸部分に記載しているコードを編集し、ダウンロードモデルをFP16-INT8からFP16に変更します。
本サンプルコードでは、以下の赤丸部分に記載しているコードを編集し、実行デバイスをGPUに変更します。
サンプルコードを実行します。
ソースコードが記載されているセルを上から順番に実行し、Run
セクションの前まで実行します。
Run
セクションでは、webカメラ動作と動画ファイル実行の2種類セルが用意されています。
無事webカメラから得られる映像をリアルタイムに処理することができました。
処理を停止する場合はソースコード上部にある■ボタンをクリックすることで停止することができます。
なお、AE2100で実行できる各デバイス別のスループットは下記の通りでした。
推論デバイス | スループット[FPS] |
---|---|
CPU | 1.7 |
GPU | 11.5 |
HDDL | 4.9 |
GPUのスループットが最も高い結果となりました。
HDDLは本サンプルコードが同期実行で処理を行っているため、
あまり高いスループットになっていないことが考えられます。
まとめ
本記事では、「AE2100」上にwebカメラ動作が可能な「OpenVINO™ Notebooks」環境を構築してサンプルコードの動作確認を行いました。
本記事で動作確認を行ったサンプルコードは同期処理で推論を行っていますが、
下記の記事のように非同期処理を実装することでスループットの改善も試すことができるので、ぜひトライしてみてください!
OKI AIエッジコンピューター「AE2100」で動く物体検出プログラムを作ろう (2) ―非同期処理編―