OpenVINO の顔検出デモを (Google Colab|Docker) でそのまま使うだけ

[Intel 入ってたら動く OpenVINO](https://docs.openvinotoolkit.org/2020.4/index.html) の Toolkit についてくる [interactive_face_detection_demo](https://docs.openvinotoolkit.org/2020.4/omz_demos_interactive_face_detection_demo_README.html) が、そのまま動かすだけでそこそこ使えて嬉しかったのでメモです。以下 OpenVINO 2020.4 での情報になります。

![openvino_demo_input.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693216/10c52b2b-5b5a-44b7-1d0c-c784ef256ff9.gif)

![openvino_demo_output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693216/be5a6712-d7e9-314a-1bbe-c8fa8d4f9211.gif)

# Google Colab を利用する場合
Google Colab は[Intel CPU を利用しているようなので](https://github.com/tset-tset-tset/hoge/blob/master/CPU.ipynb)、Colab 上で動かせます。

[実際に動かした Notebook はこちら](https://github.com/tset-tset-tset/hoge/blob/master/OpenVINO_demo.ipynb)です。

インストールは[Linux 用のインストール手順](https://docs.openvinotoolkit.org/2020.4/openvino_docs_install_guides_installing_openvino_linux.html)を実施していくだけ、demo のビルド・実行は下記 Docker を利用する部分と同じなので、解説は割愛しています。

ただ、Colab を起動する度にインストールを待つのが面倒なのと、特性上出力ファイルがかなり大きくなるのでファイルのダウンロードが面倒なのと、そもそも Colab の CPU はそんなに早くないことが微妙なところです。Intel 入ってる環境があるなら、ローカルにファイルを直接書き込める 以下 Docker を使った方法が楽かも知れません。

# ローカルに直接環境を構築する場合
[既存環境と干渉するらしい記事](https://ameblo.jp/sijukara-tama/entry-12509945844.html)を見たのでなんとなく避けました。[インストールの項](https://docs.openvinotoolkit.org/2020.4/index.html)を実施していけば問題ないと思います。

# Docker を利用する場合

```bash
docker run -v /c/Users/${USER}/Downloads:/Downloads -u root -it --rm openvino/ubuntu18_dev:2020.4
```
[demo を使いたいので demo 入りの _dev を使います](https://hub.docker.com/r/openvino/ubuntu18_dev)。
ファイルをやり取りするのでダウンロードディレクトリをマウントして、インストールファイルをイジりたいので root になります。自分は Windows 10 上で動かしているので CPU only しか対応してなかったですが、[対応環境では docker にオプションを渡すことで GPU などにも対応する](https://hub.docker.com/r/openvino/ubuntu18_dev)ようです。

### 以下コンテナ内で作業

```bash
cd ${INTEL_CVSDK_DIR}/inference_engine/demos/
sed -i 's/*)/interactive_face_detection_demo)/g' CMakeLists.txt
./build_demos.sh
```
そのままだと他 demo のビルドも待たないといけないので、使いたい interactive_face_detection_demo だけに絞っています。[他 demo も使ってみたい](https://docs.openvinotoolkit.org/2020.4/omz_demos_README.html)方は sed を抜いてください。

```bash
${INTEL_CVSDK_DIR}/deployment_tools/tools/model_downloader/downloader.py \
  --name face-detection-adas-0001,age-gender-recognition-retail-0013,head-pose-estimation-adas-0001,emotions-recognition-retail-0003,facial-landmarks-35-adas-0002 \
  --output_dir /content/model/ \
  --precisions FP32
```
interactive_face_detection_demo で使いたい学習済モデルを、[付属のダウンローダー](https://docs.openvinotoolkit.org/2020.4/omz_tools_downloader_README.html)で落としてきます。face-detection などモデルがいくつもあるやつはどれを使えばいいのか迷いますが、適当に変えたら死ぬほど遅くなったりした(100倍ぐらい)ので注意です。とりあえず上記は[ドキュメント](https://docs.openvinotoolkit.org/2020.4/omz_demos_interactive_face_detection_demo_README.html)で指定があったものです。

```bash
/root/omz_demos_build/intel64/Release/interactive_face_detection_demo \
  -i /Downloads/input.mp4 \
  -m /content/model/intel/face-detection-adas-0001/FP32/face-detection-adas-0001.xml \
  -m_ag /content/model/intel/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013.xml \
  -m_hp /content/model/intel/head-pose-estimation-adas-0001/FP32/head-pose-estimation-adas-0001.xml \
  -m_em /content/model/intel/emotions-recognition-retail-0003/FP32/emotions-recognition-retail-0003.xml \
  -m_lm /content/model/intel/facial-landmarks-35-adas-0002/FP32/facial-landmarks-35-adas-0002.xml \
  -no_show \
  -no_wait \
  -async \
  -o /Downloads/output.mp4
```

[オプションは他にもありますが](https://docs.openvinotoolkit.org/2020.4/omz_demos_interactive_face_detection_demo_README.html)、とりあえず上記で動画を変換できました。