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

まとめ

本コラムでは、DL Streamerを用いて「検出->分類」のパイプラインを構築しました。複数のモデル推論を含む、Gstreamerベースの効率的なパイプラインを作成できるのが特長です。

カテゴリ一覧

お問い合わせ

名古屋本社

東京本社

【受付時間】9:00~18:00

pagetop