OpevVINO サンプルのセットアップ(Raspberry Pi 4 with NCS2)

NCS2 intel

前回の記事でRaspberry Pi 4 + OpenVINOのセットアップが終わりました。この記事ではサンプル実行方法について書きます。

今回の内容ですが、私の環境では公式ドキュメント、もしくはクラゲさまの記事に記載されている内容ではうまくいかない箇所がありました。環境依存なのか実行方法が誤っていたのか不明ですが、お気付きの点は是非ご指摘頂ければと思います。

作業用ディレクトリ作成と移動

ホーム直下にサンプルを展開するディレクトリ「build」を作成し、そのディレクトリへ移動します。

mkdir ~/build && cd ~/build

ビルド実行(1)

公式ドキュメントに記載されている通りに実行するとエラーになってしまいます。

エラーになる
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" /opt/intel/openvino/deployment_tools/inference_engine/samples

ディレクトリを確認したところ、コマンド末尾にあたる「/samples」直下に「C」「 CPP」「Python」とディレクトリが存在しており、「/samples/cpp」に修正するとうまくいきました。

成功 
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" /opt/intel/openvino/deployment_tools/inference_engine/samples/cpp

ビルド実行(2)

make -j2 object_detection_sample_ssd

ここはサラッと流します。

学習済みファイルについての注意事項

当初サンプルを何度実行してもエラーになるため、調べてみたら「OpenVINO 2020.1既知の問題で、ドキュメントにあるサンプルは失敗するため
別の重みファイル・モデルファイルを利用する」という記事に辿り着きました。

Documentation Library
Search repositories from Intel for programming language, operating system, tool, hardware, and middleware documentation.

ということで、別の学習済みファイルを用意します。

学習済みファイルダウンロード

公式ドキュメントではこのようになっています。

学習済み重みファイル
wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/face-detection-adas-0001/FP16/face-detection-adas-0001.bin

学習済みモデルファイル
wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/face-detection-adas-0001/FP16/face-detection-adas-0001.xml

前述の通り私の環境では上記ファイルを利用するとエラーになるので、代わりに下記のファイルをダウンロードしました。

学習済み重みファイル
wget --no-check-certificate https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/face-detection-retail-0004/FP16/face-detection-retail-0004.bin

学習済みモデルファイル
wget --no-check-certificate https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/face-detection-retail-0004/FP16/face-detection-retail-0004.xml

ダウンロードした2つのファイルは/home/pi/build直下へ移動させます。

画像ファイルの準備

顔認識に利用する画像ファイルを準備します。私はクラゲさまが紹介されていたサイトからダウンロードしました。

ぱくたそ - 写真素材を無料でダウンロード
人物や背景(テクスチャ)など様々なジャンルの写真素材を無料で配布しているフリー素材では国内最大規模の「ぱくたそ(PAKUTASO)」公式サイトです。2022年4月 1日現在、42,030枚の写真(画像)を掲載中。 会員登録は不要でダウンロードの回数制限や画像サイズごとに料金が発生することはありません。高品質で高解像度の...

ダウンロードしたファイルを/home/pi/build直下に「input.jpg」として保存します。

サンプル1実行

公式ドキュメント記載のコマンドを一部修正します。

公式ドキュメント
./armv7l/Release/object_detection_sample_ssd -m face-detection-adas-0001.xml -d MYRIAD -i input.jpg

学習済みファイル差し替え後のコマンド
./armv7l/Release/object_detection_sample_ssd -m face-detection-retail-0004.xml -d MYRIAD -i input.jpg

モデルファイルにあたる部分のファイル名が変わっているだけですね。では、お待たせしました。NCS2をRaspberry PiのUSBポートに挿し(必ずUSB3.0のポートを使いましょう!)、上記コマンドを実行します。

成功すると、/home/pi/buildに「out_0.bmp」が生成されています。

OpenVINO-1
顔の周りに矩形が表示されています

画像ファイルはコンピューターにとって0と1の集合体。コンピューターはそこに写っている物が何であるのか分からない訳ですから(そもそも「人」とは何かを知らない)、それが「人」の「顔」を認識してマーキングする・・・何とも凄いことです!

サンプル2のための準備

2つ目のサンプルはPythonから実行します。学習済みファイルはサンプル1同様、別のファイルをダウンロードします。まずは公式ドキュメントのコマンドを見てみましょう。

学習済み重みファイル
wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/face-detection-adas-0001/FP16/face-detection-adas-0001.bin

学習済みモデルファイル
wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/face-detection-adas-0001/FP16/face-detection-adas-0001.xml

私はface-detection-adas-0001の代わりにace-detection-retail-0004をダウンロードしました。

学習済み重みファイル
wget --no-check-certificate https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/face-detection-retail-0004/FP16/face-detection-retail-0004.bin

学習済みモデルファイル
wget --no-check-certificate https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/face-detection-retail-0004/FP16/face-detection-retail-0004.xml

ダウンロードした2つのファイルを/home/pi/build直下へ移動させましょう。次に/home/pi/build直下へ適当なファイル名.pyを作成します。まずは公式ドキュメントのコードをご覧ください。

適当なファイル名.py

import cv2 as cv
# Load the model.
net = cv.dnn_DetectionModel('face-detection-adas-0001.xml',
                            'face-detection-adas-0001.bin')
# Specify target device.
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
# Read an image.
frame = cv.imread('/path/to/image')
if frame is None:
    raise Exception('Image not found!')
# Perform an inference.
_, confidences, boxes = net.detect(frame, confThreshold=0.5)
# Draw detected faces on the frame.
for confidence, box in zip(list(confidences), boxes):
    cv.rectangle(frame, box, color=(0, 255, 0))
# Save the frame to an image file.
cv.imwrite('out.png', frame)

修正が必要なのは下記部分です。

# Load the model.
net = cv.dnn_DetectionModel('face-detection-adas-0001.xml',
                            'face-detection-adas-0001.bin')

# Read an image.
frame = cv.imread('/path/to/image')
  • face-detection-adas-0001をface-detection-retail-0004へ
  • cv.imread(‘/path/to/image’)をcv.imread(‘input.jpg’)

サンプル2実行

計3箇所修正できたら、ターミナルより実行します。

python3 適当なファイル名.py

成功すると/home/pi/buildに「out.png」が生成されています。

OpenVINO-2
サンプル1の時と矩形の色が違います

いかがでしょうか。私はPythonもLinuxも推論も初心者ですが、それでもコードの量が少なく、然程難解ではないことに驚かされました。

この後Windwos10+NCS2、そしてWindows10単体でのサンプル実行にも挑戦したので、そちらについてもまた書いてみたいを思います。興味をお持ちの方は是非挑戦して見てください!

Amazon.co.jp: OpenVINO
Amazon.co.jp: OpenVINO

コメント