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

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

以下はUbuntuコンテナ版の記事です。
[OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (3)](https://qiita.com/TWAT/items/9c607be6af887ec3a044)
 
#要約
・この資料は、OKI  AI エッジコンピューター「AE2100」向けの設定解説です。
・AE2100にWebカメラを接続し、リアルタイム物体検出をおこないます。

#はじめに
YouTubeに [「犬マスクの人は判別できる？ AIエッジコンピューター「AE2100」大実験」](https://www.youtube.com/watch?v=yyMZ0-pHuE4) が公開されています。
是非ご覧ください！！

今回はこのYouTubeと同じ内容を動かしてみたいと思います。

#環境
AE2100のコンテナバージョンは「centos7_openvino_2019R31_1.tgz」とします。
今回必要なものはUSB2.0接続のWebカメラとなります。
この記事では"Logicool HD Webcam C270n"を使って動作確認をおこないました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/11d84654-ac13-2d53-1f62-9247db8dd8b9.png)

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

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

[前回の記事を参照してください。](https://qiita.com/TWAT/items/d2a899c0593d1a60b111#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 編ー」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
```

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 centos-openvino -d centos7:openvino_2019R31 /sbin/init
```


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

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

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

コンテナに入ります。

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

tarを展開します。

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


#依存パッケージのインストール（AE2100側）
[前回の記事を参照してください。](https://qiita.com/TWAT/items/d2a899c0593d1a60b111#%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” を実行してみます。
※ 事前に第一回目の記事に従ってWindows PC側のXlaunchを起動しておいてください。

```
# cd /root/object_detection
# ./object_detection_demo_ssd_async -i cam -m ssd_mobilenet_v2_coco.xml -d hddl
```

ぬいぐるみを映すと　”teddy_bear” と分類されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/b9c47147-e408-8366-3725-40d1c529b308.png)

手持ちの花瓶を映したところ”vase” と分類されました。当たっていますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/5c03272d-8f6f-cfeb-204a-ad06d6cf06af.png)

ウインドウ上で"Tab"キーを押すと、非同期(Async)／同期処理(Sync)の切り替えがおこなわれ非同期(Async)の場合、実行フレームレートが向上します。
"Esc"キーで処理が終了します。

#まとめ

今回はAE2100にWebカメラを接続し、リアルタイム物体検出を実行してみました。
AE2100／OpenVINOにはさまざまなサンプルアプリケーションが含まれていますので
ぜひ試してみてください！

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

<font size=2>
以下はUbuntuコンテナ版の記事です。

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