OKI  AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (3)

<font size=4 color="Red">**※この記事はAE2100のUbuntuコンテナ(ubuntu_openvino_2020R3.tar)を対象としています。**</font>

# 要約
- この記事は、OKI  AI エッジコンピューター「AE2100」向けの設定解説です。
- AE2100にWebカメラを接続し、リアルタイム物体検出をおこないます。

# はじめに
YouTubeに [「犬マスクの人は判別できる？ AIエッジコンピューター「AE2100」大実験」](https://www.youtube.com/watch?v=yyMZ0-pHuE4) が公開されています。
是非ご覧ください！！
今回はこの動画の内容と同様に物体検出を行うサンプルプログラムを動かしてみたいと思います。

なお、Ubuntu版での3回目となるこの記事は、「OKI AIエッジコンピューター「AE2100」でOpenVINOのサンプルを動かしてみよう(3)」と、ほぼ同じ内容になっています。

# 環境
AE2100のコンテナバージョンは「ubuntu_openvino_2020R3.tar」とします。

今回必要なものはUSB2.0接続のWebカメラとなります。
この記事では"Logicool HD Webcam C270n"を使って動作確認をおこないました。

![network-ae2100-camera.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/a0104358-091c-aceb-7c41-807831c34751.png)

なお、Ubuntu版第1回の記事に従ってウインドウズPC上にVcXsrvの導入が済んでいることを前提とします。
[OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (1)](https://qiita.com/TWAT/items/7398105a9e64178a84d7)

# Demosのビルド(開発環境)

[前回(Ubuntu版第2回)の記事を参照してください。](https://qiita.com/TWAT/items/e7cd34f8c97f895c39b2#demos%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E5%81%B4)

# モデルファイルのダウンロード(開発環境)

Python の仮想環境をアクティブにします。
※「AE2100 シリーズ SDK 取扱説明書 ―DeepLearning 編―」(版数: 1.2) P.13でPythonの仮想環境を作成した場合。

```
# cd /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader
# source /opt/intel/openvino/bin/setupvars.sh
# source /opt/intel/openvino/deployment_tools/model_optimizer/venv/bin/activate
```

モデルファイルをダウンロードします。
今回使うモデルはMS COCOデータ（80クラス）が学習された”ssd_mobilenet_v2”というモデルです。

```
(venv)# python3 downloader.py --name ssd_mobilenet_v2_coco
```

ダウンロードしたモデルファイルのIR変換をおこないます。

```
(venv)# python3 converter.py --name ssd_mobilenet_v2_coco --precisions FP16
```

実行に必要なファイルをフォルダへ移動します。

```
# cd 
# mkdir  object_detection_demo 
# cd  object_detection_demo 
# cp /root/omz_demos_build/intel64/Release/object_detection_demo_ssd_async ./
# cp /opt/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/public/ssd_mobilenet_v2_coco/FP16/* ./
```

また、認識時に表示するラベルファイルを用意します。
”ssd_mobilenet_v2_coco.labels”という名前でファイルを作成し、以下の内容の書き込みをおこなってください。
なお、行数は91行ありますが認識するクラス数は”background”と”no_label”を除いた80クラスです。

```ssd_mobilenet_v2_coco.labels
background
person
bicycle
car
motorcycle
airplane
bus
train
truck
boat
traffic_light
fire_hydrant
no_label
stop_sign
parking_meter
bench
bird
cat
dog
horse
sheep
cow
elephant
bear
zebra
giraffe
no_label
backpack
umbrella
no_label
no_label
handbag
tie
suitcase
frisbee
skis
snowboard
sports_ball
kite
baseball_bat
baseball_glove
skateboard
surfboard
tennis_racket
bottle
no_label
wine_glass
cup
fork
knife
spoon
bowl
banana
apple
sandwich
orange
broccoli
carrot
hot_dog
pizza
donut
cake
chair
couch
potted_plant
bed
no_label
dining_table
no_label
no_label
toilet
no_label
tv
laptop
mouse
remote
keyboard
cell_phone
microwave
oven
toaster
sink
refrigerator
no_label
book
clock
vase
scissors
teddy_bear
hair_drier
toothbrush
```

用意したファイルを確認します。

```
# ls
object_detection_demo_ssd_async  ssd_mobilenet_v2_coco.mapping
ssd_mobilenet_v2_coco.bin        ssd_mobilenet_v2_coco.xml
ssd_mobilenet_v2_coco.labels     thread.info
```

tarファイルに固めます。

```
# cd ..
# tar cvf object_detection_demo.tar object_detection_demo
```

TeraTermでAE2100にログインし、上記のtarファイルをドラッグ＆ドロップでAE2100に転送します。


# Webカメラ設定（AE2100側）

AE2100のUSBポートにWebカメラを接続します。
次にTeraTermでAE2100のホストOSにログインし、lsusbコマンドでデバイスが認識されているかを確認します。
認識できていれば”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 004: 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 003: ID 03e7:f63b Intel
Bus 004 Device 002: 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
```

コンテナを起動します。
このときコンテナからWebカメラを使えるようにするため、引数に”--device=/dev/video0:/dev/video0”を加えます。

```
root@ae2100:~# docker run --device /dev/dri --device=/dev/video0:/dev/video0 --device=/dev/ion:/dev/ion -v /var/tmp:/var/tmp --name ubuntu-openvino -t -d ubuntu:openvino_2020R3 /bin/bash
```

# ファイルのコピー（AE2100側）

ホストからコンテナにファイルをコピーします。

```
root@ae2100:~# docker cp object_detection_demo.tar ubuntu-openvino:/root/
```

コンテナに入ります。

```
root@ae2100:~# docker exec -it ubuntu-openvino /bin/bash 
```

tarを展開します。

```
# cd
# tar xvf  object_detection_demo.tar
```

# 依存パッケージのインストール（AE2100側）

[前回(Ubuntu版第2回)の記事を参照してください。](https://qiita.com/TWAT/items/e7cd34f8c97f895c39b2#%E4%BE%9D%E5%AD%98%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%ABae2100%E5%81%B4)


# object_detection_demo_ssd_asyncの実行（AE2100側）

OpenVINOの環境変数を設定します。

```
# source /opt/intel/openvino/bin/setupvars.sh
```

ウインドウ表示先であるウインドウズPCのIPアドレスを指定します。

```
# export DISPLAY=192.168.100.101:0.0
```

準備が整いましたので”object_detection_demo_ssd_async”を実行してみます。
※ 第1回の記事に従って事前にウインドウズPC側のXlaunchを起動しておいてください。

```
# cd /root/object_detection_demos
# ./object_detection_demo_ssd_async -i cam -m ssd_mobilenet_v2_coco.xml -d HDDL
```

ぬいぐるみを映すと”teddy_bear”と分類されました。

![teddy-bear.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/b15998b1-f2e7-cd3a-399f-9d40156c5a3f.png)


手持ちの花瓶を映したところ”vase”と分類されました。当たっていますね！

![vase.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/07f0e1f5-2675-a734-abc1-efadd9824d27.png)

ウインドウ上で"Tab"キーを押すと、非同期処理(Async)と同期処理(Sync)の切り替えがおこなわれます。

非同期処理(Async)の場合、実行フレームレートが向上します。

"Esc"キーで処理が終了します。

# まとめ

今回はAE2100にWebカメラを接続し、Ubuntu版でのリアルタイム物体検出を実行してみました。

AE2100／OpenVINOにはさまざまなサンプルアプリケーションが含まれていますので
ぜひ試してみてください！

- [OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (1)](https://qiita.com/TWAT/items/7398105a9e64178a84d7)
- [OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (2)](https://qiita.com/TWAT/items/e7cd34f8c97f895c39b2)