前回の記事で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既知の問題で、ドキュメントにあるサンプルは失敗するため
別の重みファイル・モデルファイルを利用する」という記事に辿り着きました。

ということで、別の学習済みファイルを用意します。
学習済みファイルダウンロード
公式ドキュメントではこのようになっています。
学習済み重みファイル
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直下へ移動させます。
画像ファイルの準備
顔認識に利用する画像ファイルを準備します。私はクラゲさまが紹介されていたサイトからダウンロードしました。

ダウンロードしたファイルを/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」が生成されています。

画像ファイルはコンピューターにとって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」が生成されています。

いかがでしょうか。私はPythonもLinuxも推論も初心者ですが、それでもコードの量が少なく、然程難解ではないことに驚かされました。
この後Windwos10+NCS2、そしてWindows10単体でのサンプル実行にも挑戦したので、そちらについてもまた書いてみたいを思います。興味をお持ちの方は是非挑戦して見てください!
コメント