AI

日本システム開発株式会社からAIに関するコラムをお届けします。

推論システム開発に2017年から携わっている実績に基づき、様々な情報を発信しています。

日本システム開発の技術、
覗いてみませんか。

AIコラム 第9回「(OpenVINO第4回) DL Streamerを用いたアプリケーション開発の方法を学ぶ」

OpenVINOコラム第4回では、ストリーミング解析フレームワークDL Streamer(Deep Learning Streamer)の説明とデモの動作方法を説明します。

本コラムはv1.1.0 (Release 2020.4) のDL Streamerを対象としています。

DL Streamerとは

DL Streamer (https://github.com/opencv/gst-video-analytics)は、CNNモデルを用いて映像解析を行う、Gstreamerベースのフレームワークです。

Gstreamerが用いられているため、既存のGstreamer機能(エレメント)と組み合わせて簡単にストリーミング解析アプリケーションの構築が可能となっています。

また、バックエンドの推論エンジンとしてはOpenVINOが用いられており、物体検出や、検出された物体に対して画像分類を行い、KafkaやMQTTプロトコルで情報を送出することができます。

また、Preview版ではありますが、Audio Eventの検出も可能です。

Gstreamerベースの推論エンジンとしてはNVIDIA社のDeepStream SDKが挙げられますが、そのIntel版と言えるものです。

事前準備

開発を行う環境は、「OpenVINO 第1回」のコラムでOpenVINOの環境構築を行ったマシンを使用します。

OpenVINOの環境構築を行っていない場合は、先にOpenVINO環境構築を行ってください。

■開発を行うマシンの構成

OS : Ubuntu 18.04.1 LTS 64bit

CPU : AVX2搭載のIntel® Core™ Processor

以下では、Dockerを用いた DL Streamerの環境構築を行います。

環境構築手順は https://github.com/opencv/gst-video-analytics/wiki/Install-Guide に従います。

Dockerをインストールします。

> curl -fsSL get.docker.com -o get-docker.sh

> sh get-docker.sh

作業ディレクトリ ~/gva 以下にリポジトリをcloneし、docker image をビルドします。

著者のマシンではイメージのビルドには1時間程度かかりました。

> mkdir -p ~/gva

> cd gva

> git clone https://github.com/opencv/gst-video-analytics ~/gva/gst-video-analytics

> cd ~/gva/gst-video-analytics && git checkout refs/tags/v1.0.1

> cd ~/gva/gst-video-analytics/docker

> sudo –E ./build_docker_image.sh

著者の環境では、ビルド中に apt-get install に失敗することがありました。

著者の環境では、 ~/gva/gst-video-analytics/docker/Dockerfile の11行目、91行目、551行目、630行目に以下を追加するとビルドに成功しました。

 RUN echo ‘###### Ubuntu Main Repos¥n¥

 deb http://jp.archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse¥n¥

 deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse¥n¥

 deb http://jp.archive.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse¥n¥

 deb http://jp.archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse¥n¥

 deb http://jp.archive.ubuntu.com/ubuntu/ bionic-proposed main restricted universe multiverse¥n¥

 deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse¥n¥

 deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse¥n¥

 deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic-proposed main restricted universe multiverse’ > /etc/apt/sources.list

Docker Imageが作成されたことを確認します。
> docker images | grep gst-video-analytics | grep latest
以下コマンドで、OpenModelZooと呼ばれる学習済みモデルファイルのアーカイブからモデルをダウンロードします。

> export INTEL_OPENVINO_DIR=/opt/intel/openvino

> export MODELS_PATH=~/gva/data/models/

> bash ~/gva/gst-video-analytics/samples/download_models.sh

以下コマンドで、サンプル動画をダウンロードします。

> mkdir –p ~/gva/data/video

> cp /path/to/sample.mp4 ~/gva/data/video/sample.mp4

※今回は実行する動画はsample.mp4というファイル名であることが前提で実施します。

DL Streamerの実行

Docker内からdisplayにアクセスできるようにxhostコマンドで権限を付与してから、Docker Imageを起動します。

> xhost local:root

> export WORKDIR=`realpath ~/gva/`

> sudo docker run -it –privileged –net=host ¥

 ¥

 -v ~/.Xauthority:/root/.Xauthority ¥

 -v /tmp/.X11-unix:/tmp/.X11-unix ¥

 -e DISPLAY=$DISPLAY ¥

 -e HTTP_PROXY=$HTTP_PROXY -e HTTPS_PROXY=$HTTPS_PROXY ¥

 -e http_proxy=$http_proxy -e https_proxy=$https_proxy ¥

 ¥

 -v $WORKDIR/data/models/intel:/root/intel_models ¥

 -v $WORKDIR/data/models/common:/root/common_models ¥

 -e MODELS_PATH=/root/intel_models:/root/common_models ¥

 ¥

 -v $WORKDIR/data/video:/root/video-examples ¥

 -e VIDEO_EXAMPLES_DIR=/root/video-examples ¥

 ¥

 -v $WORKDIR/gst-video-analytics/:/gst-video-analytics ¥

 ¥

 gst-video-analytics:latest

Docker内で以下を実行します。

実行すると指定した動画に対して、顔の検出と、検出された各々の顔に対して表情の分類(“neutral”,”happy”,”sad”,”surprise”,”anger”の5通り)を行った結果がウィンドウに表示されます。

> gst-launch-1.0 filesrc location=/root/video-examples/sample.mp4 ! decodebin ! videoconvert ! ¥

 gvadetect model=/root/intel_models/face-detection-adas-0001/FP32/face-detection-adas-0001.xml ! ¥

 gvaclassify model=/root/intel_models/emotions-recognition-retail-0003/FP32/emotions-recognition-retail-0003.xml model-proc=/gst-video-analytics/samples/gst_launch/face_detection_and_classification/model_proc/emotions-recognition-retail-0003.json ! ¥

 gvawatermark ! ximagesink sync=false

Advanced Tips

  • 自前のモデルを用いたい場合は?
    OpenVINOで実行可能な、IRモデル(OpenVINOのモデルフォーマット)を用意する必要があります。
    OpenVINOのドキュメントを参考にしましょう。
    例えば、Yolo v3をIRモデル(OpenVINO用のモデルフォーマット)に変換する方法等が掲載されています。
    動作確認は行っていませんが、最新版のリリースRelease 2020.4では、Yolo v3 tinyの動作対応や、設定ファイル(model_procと呼ばれるもの)でクラス数を変更可能な修正が行われたようですので、最新版を用いるのがよいと思います。

まとめ

本コラムでは、DL Streamerを用いて「検出->分類」のパイプラインを構築しました。

複数のモデル推論を含む、Gstreamerベースの効率的なパイプラインを作成できるのが特長です。

■関連サービス

AIソリューション

オープンソースを活用したAIのシステム構築・開発を支援!

車両ナンバープレート検知全国版

車両のナンバープレートをAIが検知・処理!全国のナンバープレートに対応!

人数カウントBODY_ロゴ

カメラ撮影した映像から指定領域内の滞在人数をAIが認識!

人数カウントHEAD_ロゴ

密集した空間から指定領域内の滞在人数をAIが認識!

ラインクロスカウント

来店人数のカウントや通行量調査などを自動化!

pagetop