person-detectionの実行(RaspberryPi編)

インストールガイドに環境構築後のpythonサンプルとして、顔認識(face-detection)が記載されています。それを流用して人認識(person-detection)として実行してみます。モデルを変えるだけのお手軽確認です。環境構築が終わっている場合は10分で確認出来ます。

本記事は https://docs.openvinotoolkit.org/2020.1/_docs_install_guides_installing_openvino_raspbian.html
を元に記述しています。元のページも参照してください。

以降は、RaspberryPiにOpenVINOが構築されている事が前提です。

Run Inference of Face Detection Model Using OpenCV* API

1. person-detection-retail-0013を用意します。

$ wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/person-detection-retail-0013/FP16/person-detection-retail-0013.xml
(略)
 HTTP による接続要求を送信しました、応答を待っています... 200 OK
 長さ: 354107 (346K) [text/xml]
 `person-detection-retail-0013.xml' に保存中
 

 person-detection-retail-0013.xml             100%[=============================================================================================>] 345.81K   979KB/s 時間 0.4s     
 

 2020-10-11 10:01:12 (979 KB/s) - `person-detection-retail-0013.xml' へ保存完了 [354107/354107]
 

 $ wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/person-detection-retail-0013/FP16/person-detection-retail-0013.bin
(略)
 HTTP による接続要求を送信しました、応答を待っています... 200 OK
 長さ: 1445736 (1.4M) [application/octet-stream]
 `person-detection-retail-0013.bin' に保存中
 

 person-detection-retail-0013.bin             100%[=============================================================================================>]   1.38M  7.02MB/s 時間 0.2s     
 

 2020-10-11 10:01:19 (7.02 MB/s) - `person-detection-retail-0013.bin' へ保存完了 [1445736/1445736]

2. openvino_pd_myriad.py というようなファイルを作成して、以下のスクリプト をコピーしてください。
スクリプト 実行前に、frame = cv.imread(‘/path/to/image’) に読み込む画像ファイルに修正してください。

import cv2 as cv 
 Load the model.
 net = cv.dnn_DetectionModel('person-detection-retail-0013.xml',
 'person-detection-retail-0013.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)
ありし日の歌舞伎町

3. スクリプト を実行します

python3 openvino_pd_myriad.py

結果は、out.pngというファイルが作成されるので、確認してください。

認識結果

VTune でプロファイルをとる(2)GPU編

VTuneとは?

Intel提供のプロファイラのVTuneですが前回はインストール〜CPUプロファイルを取得しました
今回はGPUプロファイルの取得に挑戦してみましょう

設定

まずは設定です
Configure Analysisの画面で、設定を行います
今回はGPU Offloadを選択しました
(GPU関連のプロファイルは2020.2ではPreviewの機能になっています)

今回使用したアプリケーションはsecurity barrierです
こちらのアプリケーションに下記のようにGPUオプションを使用して試してみます

/home/klf/inference_engine_demos_build/intel64/Release/security_barrier_camera_demo -d GPU -d_va GPU -d_lpr GPU -i /home/klf/benchmark/images/test.mp4 -m /home/klf/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_lpr /home/klf/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -m_va /home/klf/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -no_show -n_iqs 1 -nstreams 1 -nthreads 1

Application部分に
/home/klf/inference_engine_demos_build/intel64/Release/security_barrier_camera_demo
を設定し、パラメータ部分に残りを設定します

あとは右下三角のstartボタンを押すと自動的にプロファイルを取得してくれます

GPUのQueueも見えます

拡大した結果が下記の図となります
処理待ちのGPU処理が確認できます

CLIでプロファイルを取得する

VTuneを使用する際に複数のパラメータを試したい場合があります
今回の場合もパラメータを色々と振りながらとなります
このような場合には、cliでプロファイルを取得すると自動的に取得できます

CPUプロファイルの場合:
vtune -collect hotspots application

GPUプロファイルの場合:
vtune -collect gpu-offload application

実行したディレクトリ内にフォルダができますので、
そのフォルダを下記のコマンドで読み込みます

vtune-gpu フォルダ名

続く

VTune でプロファイルをとる

VTuneとは?

Intel提供のプロファイラで、以前はVTune Amplifierと呼ばれていたが、現在では、VTune Profilerとなっています

対応OS

  • Windows
  • Linux
  • Mac OS(リモートホストのみ対応)

VTuneのインストール

https://software.intel.com/en-us/vtune/choose-download
こちらからフリーでダウンロードが可能
今回はLinux版で説明します

Ubuntu18.04にインストールを行いました
インストール自体はtgzを展開後、GUIインストールにより簡単にインストールできます

CUIによるインストールは下記となります

tar zxvf vtune_profiler_2020_update2.tar.gz
cd ../vtune_profiler_2020_update2/
sudo ./install.sh

プロファイルを取る

まず、vtuneにパスを通します
通常インストールされるディレクトリは、
/opt/intel/vtune_profiler となりますので、

export PATH=$PATH:/opt/intel/vtune_profiler/bin64/

でパスを通し、

vtune-gui で起動します

起動画面

起動後、プロジェクトを作成します
このフォルダは、自分のhome/intel/vtune/projects
がデフォルトとなります

今回はsecurity_barrier_camera_demoをサンプルにしますので、
security_barrierと言うプロジェクトにしました

プロジェクト作成

プロジェクトが作成されたので、次はアプリケーションの設定です
アプリケーションの場所をフルパスで指定します
また、必要なパラメータを指定します
今回プロファイルするのは、デフォルトのHotspotsで行いますので、右の設定は必要ありません

もうこれだけで実行できてしまいます

アプリケーション&パラメータ設定
実行ボタン

実行ボタンを押して実行してみましょう

collection log
Summary
Top down Tree

アプリケーションの詳しいことがわからなくとも、CPUがどのくらい動いているかがなんとなくわかります

GPU PROFILE

次はGPUに挑戦してみましょう
GPUのプロファイルをとるには、Hotspotsの設定が必要です

三角ボタンを押して、再度、Configure Analysisを行います
ここで、右ウィンドウのHotspotsを選択し、下記のような画面を表示します

GPUプロファイルの設定

今回はGPU Offloadを選択しました
先ほどと同じように実行すると、Graphicsタブが表示され、GPUクロックや、GPU Utilizationなどが表示されているのがわかります

今回はVtuneの基本的な使用方法ですが、ご自分が作成されたアプリケーションで、負荷がかかっているのがどの部分なのか、無駄なコードがないかなどを調査するのには便利なツールだと思います

hello_query_device(ubuntu編)

サンプルを片っ端から実行していくシリーズ。今回はhello_query_deviceのサンプルを実行してみます。実行結果が長いので記事はOS別に記載します。

サンプルは以下のフォルダになります。
openvino\inference_engine\samples\python\hello_query_device

実行の前に

サンプルを実行する前に、READMEファイルを確認しておきましょう。このサンプルはOpenVINOで使用出来るデバイスの情報を取得するものなので凄くシンプルです。

モデル

今回のサンプルはモデルは不要です。

環境

UP Squared AI Edge Computing with Intel ATOM で実行しました。

実行

環境変数の設定をしていない場合は、コマンドラインで以下を実行します。/opt/intel/openvino/bin/setupvars.sh

以下のコマンドでhello_query_deviceを実行します。

cd /opt/intel/openvino/deployment_tools/inference_engine/samples/python/hello_query_device % python3 hello_query_device.py

実行例(NCS2無し)

Available devices:
	Device: CPU
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Atom(TM) Processor E3950 @ 1.60GHz
		OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
		SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
		RANGE_FOR_STREAMS: 1, 4

	Default values for device configuration keys:
		CPU_BIND_THREAD: YES
		CPU_THREADS_NUM: 0
		CPU_THROUGHPUT_STREAMS: 1
		DUMP_EXEC_GRAPH_AS_DOT: 
		DYN_BATCH_ENABLED: NO
		DYN_BATCH_LIMIT: 0
		EXCLUSIVE_ASYNC_REQUESTS: NO
		PERF_COUNT: NO
	Device: GPU
	Metrics:
		AVAILABLE_DEVICES: 0
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Gen9 HD Graphics
		OPTIMIZATION_CAPABILITIES: FP32, BIN, FP16, INT8
		SUPPORTED_CONFIG_KEYS: CLDNN_MEM_POOL, CLDNN_NV12_TWO_INPUTS, CLDNN_PLUGIN_PRIORITY, CLDNN_PLUGIN_THROTTLE, DEVICE_ID, DUMP_KERNELS, DYN_BATCH_ENABLED, EXCLUSIVE_ASYNC_REQUESTS, GPU_THROUGHPUT_STREAMS, PERF_COUNT, TUNING_MODE
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 2, 1
		RANGE_FOR_STREAMS: 1, 2

	Default values for device configuration keys:
		CLDNN_MEM_POOL: YES
		CLDNN_NV12_TWO_INPUTS: NO
		CLDNN_PLUGIN_PRIORITY: 0
		CLDNN_PLUGIN_THROTTLE: 0
		DEVICE_ID: 
		DUMP_KERNELS: NO
		DYN_BATCH_ENABLED: NO
		EXCLUSIVE_ASYNC_REQUESTS: NO
		GPU_THROUGHPUT_STREAMS: 1
		PERF_COUNT: NO
		TUNING_MODE: TUNING_DISABLED
	Device: HDDL
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, SUPPORTED_CONFIG_KEYS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, RANGE_FOR_ASYNC_INFER_REQUESTS, VPU_HDDL_DEVICE_NUM, VPU_HDDL_DEVICE_NAME, VPU_HDDL_DEVICE_THERMAL, VPU_HDDL_DEVICE_ID, VPU_HDDL_DEVICE_SUBCLASS, VPU_HDDL_DEVICE_MEMORY_TOTAL, VPU_HDDL_DEVICE_MEMORY_USED, VPU_HDDL_DEVICE_UTILIZATION, VPU_HDDL_DEVICE_TAG, VPU_HDDL_STREAM_ID
		SUPPORTED_CONFIG_KEYS: PERF_COUNT, VPU_INPUT_NORM, VPU_INPUT_BIAS, VPU_HDDL_GRAPH_TAG, VPU_HDDL_STREAM_ID, VPU_HDDL_DEVICE_TAG, VPU_HDDL_BIND_DEVICE, VPU_HDDL_RUNTIME_PRIORITY, VPU_HDDL_USE_SGAD, VPU_COPY_OPTIMIZATION, LOG_LEVEL, VPU_IGNORE_UNKNOWN_LAYERS, VPU_HW_STAGES_OPTIMIZATION, VPU_NONE_LAYERS, VPU_NUMBER_OF_SHAVES, VPU_NUMBER_OF_CMX_SLICES, VPU_HW_INJECT_STAGES, VPU_HW_POOL_CONV_MERGE, VPU_HW_STAGES_OPTIMIZATION, EXCLUSIVE_ASYNC_REQUESTS
		FULL_DEVICE_NAME: Intel Vision Accelerator Design with Intel Movidius VPUs
		OPTIMIZATION_CAPABILITIES: FP16
[10:05:10.6872][1939]I[ClientManager.cpp:159] client(id:2) registered: clientName=HDDLPluginForQuery socket=2
		RANGE_FOR_ASYNC_INFER_REQUESTS: 4, 2000, 1
		VPU_HDDL_DEVICE_NUM: 1
		VPU_HDDL_DEVICE_NAME: 4.1
		VPU_HDDL_DEVICE_THERMAL: 55.93877029418945
		VPU_HDDL_DEVICE_ID: 228
		VPU_HDDL_DEVICE_SUBCLASS: 0
		VPU_HDDL_DEVICE_MEMORY_TOTAL: 483
		VPU_HDDL_DEVICE_MEMORY_USED: 0
		VPU_HDDL_DEVICE_UTILIZATION: 0.0
		VPU_HDDL_DEVICE_TAG: 
		VPU_HDDL_STREAM_ID: 

	Default values for device configuration keys:
		PERF_COUNT: 
		VPU_INPUT_NORM: 
		VPU_INPUT_BIAS: 
		VPU_HDDL_GRAPH_TAG: 
		VPU_HDDL_STREAM_ID: 
		VPU_HDDL_DEVICE_TAG: 
		VPU_HDDL_BIND_DEVICE: 
		VPU_HDDL_RUNTIME_PRIORITY: 
		VPU_HDDL_USE_SGAD: 
		VPU_COPY_OPTIMIZATION: 
		LOG_LEVEL: 
		VPU_IGNORE_UNKNOWN_LAYERS: 
		VPU_HW_STAGES_OPTIMIZATION: 
		VPU_NONE_LAYERS: 
		VPU_NUMBER_OF_SHAVES: 
		VPU_NUMBER_OF_CMX_SLICES: 
		VPU_HW_INJECT_STAGES: 
		VPU_HW_POOL_CONV_MERGE: 
		VPU_HW_STAGES_OPTIMIZATION: 
		EXCLUSIVE_ASYNC_REQUESTS: 
[10:05:10.7184][1939]I[ClientManager.cpp:189] client(id:2) unregistered: clientName=HDDLPluginForQuery socket=2

実行例(NCS2 1本)

Available devices:
	Device: CPU
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Atom(TM) Processor E3950 @ 1.60GHz
		OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
		SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
		RANGE_FOR_STREAMS: 1, 4

	Default values for device configuration keys:
		CPU_BIND_THREAD: YES
		CPU_THREADS_NUM: 0
		CPU_THROUGHPUT_STREAMS: 1
		DUMP_EXEC_GRAPH_AS_DOT: 
		DYN_BATCH_ENABLED: NO
		DYN_BATCH_LIMIT: 0
		EXCLUSIVE_ASYNC_REQUESTS: NO
		PERF_COUNT: NO
	Device: GPU
	Metrics:
		AVAILABLE_DEVICES: 0
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Gen9 HD Graphics
		OPTIMIZATION_CAPABILITIES: FP32, BIN, FP16, INT8
		SUPPORTED_CONFIG_KEYS: CLDNN_MEM_POOL, CLDNN_NV12_TWO_INPUTS, CLDNN_PLUGIN_PRIORITY, CLDNN_PLUGIN_THROTTLE, DEVICE_ID, DUMP_KERNELS, DYN_BATCH_ENABLED, EXCLUSIVE_ASYNC_REQUESTS, GPU_THROUGHPUT_STREAMS, PERF_COUNT, TUNING_MODE
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 2, 1
		RANGE_FOR_STREAMS: 1, 2

	Default values for device configuration keys:
		CLDNN_MEM_POOL: YES
		CLDNN_NV12_TWO_INPUTS: NO
		CLDNN_PLUGIN_PRIORITY: 0
		CLDNN_PLUGIN_THROTTLE: 0
		DEVICE_ID: 
		DUMP_KERNELS: NO
		DYN_BATCH_ENABLED: NO
		EXCLUSIVE_ASYNC_REQUESTS: NO
		GPU_THROUGHPUT_STREAMS: 1
		PERF_COUNT: NO
		TUNING_MODE: TUNING_DISABLED
	Device: HDDL
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, SUPPORTED_CONFIG_KEYS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, RANGE_FOR_ASYNC_INFER_REQUESTS, VPU_HDDL_DEVICE_NUM, VPU_HDDL_DEVICE_NAME, VPU_HDDL_DEVICE_THERMAL, VPU_HDDL_DEVICE_ID, VPU_HDDL_DEVICE_SUBCLASS, VPU_HDDL_DEVICE_MEMORY_TOTAL, VPU_HDDL_DEVICE_MEMORY_USED, VPU_HDDL_DEVICE_UTILIZATION, VPU_HDDL_DEVICE_TAG, VPU_HDDL_STREAM_ID
		SUPPORTED_CONFIG_KEYS: PERF_COUNT, VPU_INPUT_NORM, VPU_INPUT_BIAS, VPU_HDDL_GRAPH_TAG, VPU_HDDL_STREAM_ID, VPU_HDDL_DEVICE_TAG, VPU_HDDL_BIND_DEVICE, VPU_HDDL_RUNTIME_PRIORITY, VPU_HDDL_USE_SGAD, VPU_COPY_OPTIMIZATION, LOG_LEVEL, VPU_IGNORE_UNKNOWN_LAYERS, VPU_HW_STAGES_OPTIMIZATION, VPU_NONE_LAYERS, VPU_NUMBER_OF_SHAVES, VPU_NUMBER_OF_CMX_SLICES, VPU_HW_INJECT_STAGES, VPU_HW_POOL_CONV_MERGE, VPU_HW_STAGES_OPTIMIZATION, EXCLUSIVE_ASYNC_REQUESTS
		FULL_DEVICE_NAME: Intel Vision Accelerator Design with Intel Movidius VPUs
		OPTIMIZATION_CAPABILITIES: FP16
[10:23:02.9122][1916]I[ClientManager.cpp:159] client(id:3) registered: clientName=HDDLPluginForQuery socket=2
		RANGE_FOR_ASYNC_INFER_REQUESTS: 8, 2000, 1
		VPU_HDDL_DEVICE_NUM: 2
		VPU_HDDL_DEVICE_NAME: 2.4.1, 4.1
		VPU_HDDL_DEVICE_THERMAL: 53.33384704589844, 56.36977767944336
		VPU_HDDL_DEVICE_ID: 3, 228
		VPU_HDDL_DEVICE_SUBCLASS: 0, 0
		VPU_HDDL_DEVICE_MEMORY_TOTAL: 483, 483
		VPU_HDDL_DEVICE_MEMORY_USED: 0, 0
		VPU_HDDL_DEVICE_UTILIZATION: 0.0, 0.0
		VPU_HDDL_DEVICE_TAG: , 
		VPU_HDDL_STREAM_ID: , 

	Default values for device configuration keys:
		PERF_COUNT: 
		VPU_INPUT_NORM: 
		VPU_INPUT_BIAS: 
		VPU_HDDL_GRAPH_TAG: 
		VPU_HDDL_STREAM_ID: 
		VPU_HDDL_DEVICE_TAG: 
		VPU_HDDL_BIND_DEVICE: 
		VPU_HDDL_RUNTIME_PRIORITY: 
		VPU_HDDL_USE_SGAD: 
		VPU_COPY_OPTIMIZATION: 
		LOG_LEVEL: 
		VPU_IGNORE_UNKNOWN_LAYERS: 
		VPU_HW_STAGES_OPTIMIZATION: 
		VPU_NONE_LAYERS: 
		VPU_NUMBER_OF_SHAVES: 
		VPU_NUMBER_OF_CMX_SLICES: 
		VPU_HW_INJECT_STAGES: 
		VPU_HW_POOL_CONV_MERGE: 
		VPU_HW_STAGES_OPTIMIZATION: 
		EXCLUSIVE_ASYNC_REQUESTS: 
[10:23:02.9443][1916]I[ClientManager.cpp:189] client(id:3) unregistered: clientName=HDDLPluginForQuery socket=2

実行例(NCS2 2本)

Available devices:
	Device: CPU
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Atom(TM) Processor E3950 @ 1.60GHz
		OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
		SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
		RANGE_FOR_STREAMS: 1, 4

	Default values for device configuration keys:
		CPU_BIND_THREAD: YES
		CPU_THREADS_NUM: 0
		CPU_THROUGHPUT_STREAMS: 1
		DUMP_EXEC_GRAPH_AS_DOT: 
		DYN_BATCH_ENABLED: NO
		DYN_BATCH_LIMIT: 0
		EXCLUSIVE_ASYNC_REQUESTS: NO
		PERF_COUNT: NO
	Device: GPU
	Metrics:
		AVAILABLE_DEVICES: 0
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Gen9 HD Graphics
		OPTIMIZATION_CAPABILITIES: FP32, BIN, FP16, INT8
		SUPPORTED_CONFIG_KEYS: CLDNN_MEM_POOL, CLDNN_NV12_TWO_INPUTS, CLDNN_PLUGIN_PRIORITY, CLDNN_PLUGIN_THROTTLE, DEVICE_ID, DUMP_KERNELS, DYN_BATCH_ENABLED, EXCLUSIVE_ASYNC_REQUESTS, GPU_THROUGHPUT_STREAMS, PERF_COUNT, TUNING_MODE
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 2, 1
		RANGE_FOR_STREAMS: 1, 2

	Default values for device configuration keys:
		CLDNN_MEM_POOL: YES
		CLDNN_NV12_TWO_INPUTS: NO
		CLDNN_PLUGIN_PRIORITY: 0
		CLDNN_PLUGIN_THROTTLE: 0
		DEVICE_ID: 
		DUMP_KERNELS: NO
		DYN_BATCH_ENABLED: NO
		EXCLUSIVE_ASYNC_REQUESTS: NO
		GPU_THROUGHPUT_STREAMS: 1
		PERF_COUNT: NO
		TUNING_MODE: TUNING_DISABLED
	Device: HDDL
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, SUPPORTED_CONFIG_KEYS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, RANGE_FOR_ASYNC_INFER_REQUESTS, VPU_HDDL_DEVICE_NUM, VPU_HDDL_DEVICE_NAME, VPU_HDDL_DEVICE_THERMAL, VPU_HDDL_DEVICE_ID, VPU_HDDL_DEVICE_SUBCLASS, VPU_HDDL_DEVICE_MEMORY_TOTAL, VPU_HDDL_DEVICE_MEMORY_USED, VPU_HDDL_DEVICE_UTILIZATION, VPU_HDDL_DEVICE_TAG, VPU_HDDL_STREAM_ID
		SUPPORTED_CONFIG_KEYS: PERF_COUNT, VPU_INPUT_NORM, VPU_INPUT_BIAS, VPU_HDDL_GRAPH_TAG, VPU_HDDL_STREAM_ID, VPU_HDDL_DEVICE_TAG, VPU_HDDL_BIND_DEVICE, VPU_HDDL_RUNTIME_PRIORITY, VPU_HDDL_USE_SGAD, VPU_COPY_OPTIMIZATION, LOG_LEVEL, VPU_IGNORE_UNKNOWN_LAYERS, VPU_HW_STAGES_OPTIMIZATION, VPU_NONE_LAYERS, VPU_NUMBER_OF_SHAVES, VPU_NUMBER_OF_CMX_SLICES, VPU_HW_INJECT_STAGES, VPU_HW_POOL_CONV_MERGE, VPU_HW_STAGES_OPTIMIZATION, EXCLUSIVE_ASYNC_REQUESTS
		FULL_DEVICE_NAME: Intel Vision Accelerator Design with Intel Movidius VPUs
		OPTIMIZATION_CAPABILITIES: FP16
[10:24:02.3869][1916]I[ClientManager.cpp:159] client(id:4) registered: clientName=HDDLPluginForQuery socket=2
		RANGE_FOR_ASYNC_INFER_REQUESTS: 12, 2000, 1
		VPU_HDDL_DEVICE_NUM: 3
		VPU_HDDL_DEVICE_NAME: 2.4.1, 4.1, 2.4.3
		VPU_HDDL_DEVICE_THERMAL: 53.988128662109375, 56.15438461303711, 37.24032211303711
		VPU_HDDL_DEVICE_ID: 3, 228, 0
		VPU_HDDL_DEVICE_SUBCLASS: 0, 0, 0
		VPU_HDDL_DEVICE_MEMORY_TOTAL: 483, 483, 483
		VPU_HDDL_DEVICE_MEMORY_USED: 0, 0, 0
		VPU_HDDL_DEVICE_UTILIZATION: 0.0, 0.0, 0.0
		VPU_HDDL_DEVICE_TAG: , , 
		VPU_HDDL_STREAM_ID: , , 

	Default values for device configuration keys:
		PERF_COUNT: 
		VPU_INPUT_NORM: 
		VPU_INPUT_BIAS: 
		VPU_HDDL_GRAPH_TAG: 
		VPU_HDDL_STREAM_ID: 
		VPU_HDDL_DEVICE_TAG: 
		VPU_HDDL_BIND_DEVICE: 
		VPU_HDDL_RUNTIME_PRIORITY: 
		VPU_HDDL_USE_SGAD: 
		VPU_COPY_OPTIMIZATION: 
		LOG_LEVEL: 
		VPU_IGNORE_UNKNOWN_LAYERS: 
		VPU_HW_STAGES_OPTIMIZATION: 
		VPU_NONE_LAYERS: 
		VPU_NUMBER_OF_SHAVES: 
		VPU_NUMBER_OF_CMX_SLICES: 
		VPU_HW_INJECT_STAGES: 
		VPU_HW_POOL_CONV_MERGE: 
		VPU_HW_STAGES_OPTIMIZATION: 
		EXCLUSIVE_ASYNC_REQUESTS: 
[10:24:02.4262][1916]I[ClientManager.cpp:189] client(id:4) unregistered: clientName=HDDLPluginForQuery socket=2

VPU_HDDL_DEVICE_NUM: の箇所がNCS2の本数分だけ増えていることを確認しました。実行時に何らかのエラーが出る場合は、OpenVINOのサイトでLinuxのセットアップ関連を確認してください。

その他

NCS2を2本利用した時に、電力低下のメッセージが表示されました。セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。NCS2も試してみてくださいね。

hello_query_device(windows編)

サンプルを片っ端から実行していくシリーズ。今回はhello_query_deviceのサンプルを実行してみます。実行結果が長いので記事はOS別に記載します。

サンプルは以下のフォルダになります。
C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\samples\python\hello_query_device

実行の前に

サンプルを実行する前に、READMEファイルを確認しておきましょう。このサンプルはOpenVINOで使用出来るデバイスの情報を取得するものなので凄くシンプルです。

モデル

今回のサンプルはモデルは不要です。

環境

以下の環境で確認しました。

OS 名:Microsoft Windows 10 Home
システム モデル:NUC7i5BNHXF
プロセッサ:[01]: Intel64 Family 6 Model 142 Stepping 9 GenuineIntel ~2208 Mhz

実行

環境変数の設定をしていない場合は、コマンドラインで以下を実行します。
C:¥Program Files (x86)¥IntelSWTools¥openvino¥bin¥setupvars.bat

以下のコマンドでhello_query_deviceを実行します。

cd C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\samples\python\hello_query_device
python hello_query_device.py

実行結果例(NCS2無し)

Available devices:
[E:] [BSL] found 0 ioexpander device
        Device: CPU
        Metrics:
                AVAILABLE_DEVICES:
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
                FULL_DEVICE_NAME: Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz
                OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
                SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
                RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
                RANGE_FOR_STREAMS: 1, 4

        Default values for device configuration keys:
                CPU_BIND_THREAD: NUMA
                CPU_THREADS_NUM: 0
                CPU_THROUGHPUT_STREAMS: 1
                DUMP_EXEC_GRAPH_AS_DOT:
                DYN_BATCH_ENABLED: NO
                DYN_BATCH_LIMIT: 0
                EXCLUSIVE_ASYNC_REQUESTS: NO
                PERF_COUNT: NO
        Device: GNA
        Metrics:
                AVAILABLE_DEVICES: GNA_SW
                SUPPORTED_CONFIG_KEYS: EXCLUSIVE_ASYNC_REQUESTS, GNA_COMPACT_MODE, GNA_DEVICE_MODE, GNA_FIRMWARE_MODEL_IMAGE, GNA_FIRMWARE_MODEL_IMAGE_GENERATION, GNA_LIB_N_THREADS, GNA_PRECISION, GNA_PWL_UNIFORM_DESIGN, GNA_SCALE_FACTOR, PERF_COUNT, SINGLE_THREAD
                FULL_DEVICE_NAME: GNA_SW
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_CONFIG_KEYS, FULL_DEVICE_NAME, SUPPORTED_METRICS

        Default values for device configuration keys:
                EXCLUSIVE_ASYNC_REQUESTS: NO
                GNA_COMPACT_MODE: NO
                GNA_DEVICE_MODE: GNA_AUTO
                GNA_FIRMWARE_MODEL_IMAGE:
                GNA_FIRMWARE_MODEL_IMAGE_GENERATION:
                GNA_LIB_N_THREADS: 1
                GNA_PRECISION: I8
                GNA_PWL_UNIFORM_DESIGN: YES
                GNA_SCALE_FACTOR: 1.0
                PERF_COUNT: NO
                SINGLE_THREAD: YES
        Device: GPU
        Metrics:
                AVAILABLE_DEVICES: 0
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
                FULL_DEVICE_NAME: Intel(R) Iris(R) Plus Graphics 640
                OPTIMIZATION_CAPABILITIES: FP32, BIN, FP16, INT8
                SUPPORTED_CONFIG_KEYS: CLDNN_MEM_POOL, CLDNN_NV12_TWO_INPUTS, CLDNN_PLUGIN_PRIORITY, CLDNN_PLUGIN_THROTTLE, DEVICE_ID, DUMP_KERNELS, DYN_BATCH_ENABLED, EXCLUSIVE_ASYNC_REQUESTS, GPU_THROUGHPUT_STREAMS, PERF_COUNT, TUNING_MODE
                RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 2, 1
                RANGE_FOR_STREAMS: 1, 2

        Default values for device configuration keys:
                CLDNN_MEM_POOL: YES
                CLDNN_NV12_TWO_INPUTS: NO
                CLDNN_PLUGIN_PRIORITY: 0
                CLDNN_PLUGIN_THROTTLE: 0
                DEVICE_ID:
                DUMP_KERNELS: NO
                DYN_BATCH_ENABLED: NO
                EXCLUSIVE_ASYNC_REQUESTS: NO
                GPU_THROUGHPUT_STREAMS: 1
                PERF_COUNT: NO
                TUNING_MODE: TUNING_DISABLED

実行結果例(NCS2 1本)

Available devices:
[E:] [BSL] found 0 ioexpander device
        Device: CPU
        Metrics:
                AVAILABLE_DEVICES:
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
                FULL_DEVICE_NAME: Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz
                OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
                SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
                RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
                RANGE_FOR_STREAMS: 1, 4

        Default values for device configuration keys:
                CPU_BIND_THREAD: NUMA
                CPU_THREADS_NUM: 0
                CPU_THROUGHPUT_STREAMS: 1
                DUMP_EXEC_GRAPH_AS_DOT:
                DYN_BATCH_ENABLED: NO
                DYN_BATCH_LIMIT: 0
                EXCLUSIVE_ASYNC_REQUESTS: NO
                PERF_COUNT: NO
        Device: GNA
        Metrics:
                AVAILABLE_DEVICES: GNA_SW
                SUPPORTED_CONFIG_KEYS: EXCLUSIVE_ASYNC_REQUESTS, GNA_COMPACT_MODE, GNA_DEVICE_MODE, GNA_FIRMWARE_MODEL_IMAGE, GNA_FIRMWARE_MODEL_IMAGE_GENERATION, GNA_LIB_N_THREADS, GNA_PRECISION, GNA_PWL_UNIFORM_DESIGN, GNA_SCALE_FACTOR, PERF_COUNT, SINGLE_THREAD
                FULL_DEVICE_NAME: GNA_SW
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_CONFIG_KEYS, FULL_DEVICE_NAME, SUPPORTED_METRICS

        Default values for device configuration keys:
                EXCLUSIVE_ASYNC_REQUESTS: NO
                GNA_COMPACT_MODE: NO
                GNA_DEVICE_MODE: GNA_AUTO
                GNA_FIRMWARE_MODEL_IMAGE:
                GNA_FIRMWARE_MODEL_IMAGE_GENERATION:
                GNA_LIB_N_THREADS: 1
                GNA_PRECISION: I8
                GNA_PWL_UNIFORM_DESIGN: YES
                GNA_SCALE_FACTOR: 1.0
                PERF_COUNT: NO
                SINGLE_THREAD: YES
        Device: GPU
        Metrics:
                AVAILABLE_DEVICES: 0
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
                FULL_DEVICE_NAME: Intel(R) Iris(R) Plus Graphics 640
                OPTIMIZATION_CAPABILITIES: FP32, BIN, FP16, INT8
                SUPPORTED_CONFIG_KEYS: CLDNN_MEM_POOL, CLDNN_NV12_TWO_INPUTS, CLDNN_PLUGIN_PRIORITY, CLDNN_PLUGIN_THROTTLE, DEVICE_ID, DUMP_KERNELS, DYN_BATCH_ENABLED, EXCLUSIVE_ASYNC_REQUESTS, GPU_THROUGHPUT_STREAMS, PERF_COUNT, TUNING_MODE
                RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 2, 1
                RANGE_FOR_STREAMS: 1, 2

        Default values for device configuration keys:
                CLDNN_MEM_POOL: YES
                CLDNN_NV12_TWO_INPUTS: NO
                CLDNN_PLUGIN_PRIORITY: 0
                CLDNN_PLUGIN_THROTTLE: 0
                DEVICE_ID:
                DUMP_KERNELS: NO
                DYN_BATCH_ENABLED: NO
                EXCLUSIVE_ASYNC_REQUESTS: NO
                GPU_THROUGHPUT_STREAMS: 1
                PERF_COUNT: NO
                TUNING_MODE: TUNING_DISABLED
        Device: MYRIAD
        Metrics:
                AVAILABLE_DEVICES: 1.2-ma2480
                DEVICE_THERMAL: UNSUPPORTED TYPE
                OPTIMIZATION_CAPABILITIES: FP16
                FULL_DEVICE_NAME: Intel Movidius Myriad X VPU
                SUPPORTED_METRICS: AVAILABLE_DEVICES, DEVICE_THERMAL, OPTIMIZATION_CAPABILITIES, FULL_DEVICE_NAME, SUPPORTED_METRICS, RANGE_FOR_ASYNC_INFER_REQUESTS, SUPPORTED_CONFIG_KEYS
                RANGE_FOR_ASYNC_INFER_REQUESTS: 3, 6, 1
                SUPPORTED_CONFIG_KEYS: VPU_IGNORE_IR_STATISTIC, VPU_PRINT_RECEIVE_TENSOR_TIME, LOG_LEVEL, VPU_HW_STAGES_OPTIMIZATION, EXCLUSIVE_ASYNC_REQUESTS, VPU_CUSTOM_LAYERS, VPU_MYRIAD_FORCE_RESET, VPU_MYRIAD_PLATFORM, PERF_COUNT, CONFIG_FILE, DEVICE_ID

        Default values for device configuration keys:
                VPU_IGNORE_IR_STATISTIC: OFF
                VPU_PRINT_RECEIVE_TENSOR_TIME: OFF
                LOG_LEVEL: LOG_NONE
                VPU_HW_STAGES_OPTIMIZATION: ON
                EXCLUSIVE_ASYNC_REQUESTS: OFF
                VPU_CUSTOM_LAYERS:
                VPU_MYRIAD_FORCE_RESET: OFF
                VPU_MYRIAD_PLATFORM:
                PERF_COUNT: OFF
                CONFIG_FILE:
                DEVICE_ID:

実行結果例(NCS2 2本)

Available devices:
[E:] [BSL] found 0 ioexpander device
        Device: CPU
        Metrics:
                AVAILABLE_DEVICES:
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
                FULL_DEVICE_NAME: Intel(R) Core(TM) i5-7260U CPU @ 2.20GHz
                OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
                SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
                RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
                RANGE_FOR_STREAMS: 1, 4

        Default values for device configuration keys:
                CPU_BIND_THREAD: NUMA
                CPU_THREADS_NUM: 0
                CPU_THROUGHPUT_STREAMS: 1
                DUMP_EXEC_GRAPH_AS_DOT:
                DYN_BATCH_ENABLED: NO
                DYN_BATCH_LIMIT: 0
                EXCLUSIVE_ASYNC_REQUESTS: NO
                PERF_COUNT: NO
        Device: GNA
        Metrics:
                AVAILABLE_DEVICES: GNA_SW
                SUPPORTED_CONFIG_KEYS: EXCLUSIVE_ASYNC_REQUESTS, GNA_COMPACT_MODE, GNA_DEVICE_MODE, GNA_FIRMWARE_MODEL_IMAGE, GNA_FIRMWARE_MODEL_IMAGE_GENERATION, GNA_LIB_N_THREADS, GNA_PRECISION, GNA_PWL_UNIFORM_DESIGN, GNA_SCALE_FACTOR, PERF_COUNT, SINGLE_THREAD
                FULL_DEVICE_NAME: GNA_SW
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_CONFIG_KEYS, FULL_DEVICE_NAME, SUPPORTED_METRICS

        Default values for device configuration keys:
                EXCLUSIVE_ASYNC_REQUESTS: NO
                GNA_COMPACT_MODE: NO
                GNA_DEVICE_MODE: GNA_AUTO
                GNA_FIRMWARE_MODEL_IMAGE:
                GNA_FIRMWARE_MODEL_IMAGE_GENERATION:
                GNA_LIB_N_THREADS: 1
                GNA_PRECISION: I8
                GNA_PWL_UNIFORM_DESIGN: YES
                GNA_SCALE_FACTOR: 1.0
                PERF_COUNT: NO
                SINGLE_THREAD: YES
        Device: GPU
        Metrics:
                AVAILABLE_DEVICES: 0
                SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
                FULL_DEVICE_NAME: Intel(R) Iris(R) Plus Graphics 640
                OPTIMIZATION_CAPABILITIES: FP32, BIN, FP16, INT8
                SUPPORTED_CONFIG_KEYS: CLDNN_MEM_POOL, CLDNN_NV12_TWO_INPUTS, CLDNN_PLUGIN_PRIORITY, CLDNN_PLUGIN_THROTTLE, DEVICE_ID, DUMP_KERNELS, DYN_BATCH_ENABLED, EXCLUSIVE_ASYNC_REQUESTS, GPU_THROUGHPUT_STREAMS, PERF_COUNT, TUNING_MODE
                RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 2, 1
                RANGE_FOR_STREAMS: 1, 2

        Default values for device configuration keys:
                CLDNN_MEM_POOL: YES
                CLDNN_NV12_TWO_INPUTS: NO
                CLDNN_PLUGIN_PRIORITY: 0
                CLDNN_PLUGIN_THROTTLE: 0
                DEVICE_ID:
                DUMP_KERNELS: NO
                DYN_BATCH_ENABLED: NO
                EXCLUSIVE_ASYNC_REQUESTS: NO
                GPU_THROUGHPUT_STREAMS: 1
                PERF_COUNT: NO
                TUNING_MODE: TUNING_DISABLED
        Device: MYRIAD.1.2-ma2480
        Metrics:
                AVAILABLE_DEVICES: 1.2-ma2480, 3.4-ma2480
                DEVICE_THERMAL: UNSUPPORTED TYPE
                OPTIMIZATION_CAPABILITIES: FP16
                FULL_DEVICE_NAME: Intel Movidius Myriad X VPU
                SUPPORTED_METRICS: AVAILABLE_DEVICES, DEVICE_THERMAL, OPTIMIZATION_CAPABILITIES, FULL_DEVICE_NAME, SUPPORTED_METRICS, RANGE_FOR_ASYNC_INFER_REQUESTS, SUPPORTED_CONFIG_KEYS
                RANGE_FOR_ASYNC_INFER_REQUESTS: 3, 6, 1
                SUPPORTED_CONFIG_KEYS: VPU_IGNORE_IR_STATISTIC, VPU_PRINT_RECEIVE_TENSOR_TIME, LOG_LEVEL, VPU_HW_STAGES_OPTIMIZATION, EXCLUSIVE_ASYNC_REQUESTS, VPU_CUSTOM_LAYERS, VPU_MYRIAD_FORCE_RESET, VPU_MYRIAD_PLATFORM, PERF_COUNT, CONFIG_FILE, DEVICE_ID

        Default values for device configuration keys:
                VPU_IGNORE_IR_STATISTIC: OFF
                VPU_PRINT_RECEIVE_TENSOR_TIME: OFF
                LOG_LEVEL: LOG_NONE
                VPU_HW_STAGES_OPTIMIZATION: ON
                EXCLUSIVE_ASYNC_REQUESTS: OFF
                VPU_CUSTOM_LAYERS:
                VPU_MYRIAD_FORCE_RESET: OFF
                VPU_MYRIAD_PLATFORM:
                PERF_COUNT: OFF
                CONFIG_FILE:
                DEVICE_ID:
        Device: MYRIAD.3.4-ma2480
        Metrics:
                AVAILABLE_DEVICES: 1.2-ma2480, 3.4-ma2480
                DEVICE_THERMAL: UNSUPPORTED TYPE
                OPTIMIZATION_CAPABILITIES: FP16
                FULL_DEVICE_NAME: Intel Movidius Myriad X VPU
                SUPPORTED_METRICS: AVAILABLE_DEVICES, DEVICE_THERMAL, OPTIMIZATION_CAPABILITIES, FULL_DEVICE_NAME, SUPPORTED_METRICS, RANGE_FOR_ASYNC_INFER_REQUESTS, SUPPORTED_CONFIG_KEYS
                RANGE_FOR_ASYNC_INFER_REQUESTS: 3, 6, 1
                SUPPORTED_CONFIG_KEYS: VPU_IGNORE_IR_STATISTIC, VPU_PRINT_RECEIVE_TENSOR_TIME, LOG_LEVEL, VPU_HW_STAGES_OPTIMIZATION, EXCLUSIVE_ASYNC_REQUESTS, VPU_CUSTOM_LAYERS, VPU_MYRIAD_FORCE_RESET, VPU_MYRIAD_PLATFORM, PERF_COUNT, CONFIG_FILE, DEVICE_ID

        Default values for device configuration keys:
                VPU_IGNORE_IR_STATISTIC: OFF
                VPU_PRINT_RECEIVE_TENSOR_TIME: OFF
                LOG_LEVEL: LOG_NONE
                VPU_HW_STAGES_OPTIMIZATION: ON
                EXCLUSIVE_ASYNC_REQUESTS: OFF
                VPU_CUSTOM_LAYERS:
                VPU_MYRIAD_FORCE_RESET: OFF
                VPU_MYRIAD_PLATFORM:
                PERF_COUNT: OFF
                CONFIG_FILE:
                DEVICE_ID:

ちゃんとNCS2が2本分出ていますね。

その他

NCS2を2本利用した時に、電力低下のメッセージが表示されました。セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。NCS2も試してみてくださいね。

hello_query_device(macOS編)

サンプルを片っ端から実行していくシリーズ。今回はhello_query_deviceのサンプルを実行してみます。実行結果が長いので記事はOS別に記載します。

サンプルは以下のフォルダになります。
openvino\inference_engine\samples\python\hello_query_device

実行の前に

サンプルを実行する前に、READMEファイルを確認しておきましょう。このサンプルはOpenVINOで使用出来るデバイスの情報を取得するものなので凄くシンプルです。

モデル

今回のサンプルはモデルは不要です。

環境

以下の環境で確認しました。

MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
プロセッサ 2.7 GHz クアッドコアIntel Core i7
メモリ 16 GB 2133 MHz LPDDR3
グラフィックス Intel Iris Plus Graphics 655 1536 MB

実行

環境変数の設定をしていない場合は、コマンドラインで以下を実行します。/opt/intel/openvino/bin/setupvars.sh

以下のコマンドでhello_query_deviceを実行します。

cd /opt/intel/openvino/deployment_tools/inference_engine/samples/python/hello_query_device % python3 hello_query_device.py

実行結果例(NCS2無し)

Available devices:
	Device: CPU
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
		OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
		SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
		RANGE_FOR_STREAMS: 1, 8

	Default values for device configuration keys:
		CPU_BIND_THREAD: NUMA
		CPU_THREADS_NUM: 0
		CPU_THROUGHPUT_STREAMS: 1
		DUMP_EXEC_GRAPH_AS_DOT: 
		DYN_BATCH_ENABLED: NO
		DYN_BATCH_LIMIT: 0
		EXCLUSIVE_ASYNC_REQUESTS: NO
		PERF_COUNT: NO

実行結果例(NCS2 1本)

Available devices:
	Device: CPU
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
		OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
		SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
		RANGE_FOR_STREAMS: 1, 8

	Default values for device configuration keys:
		CPU_BIND_THREAD: NUMA
		CPU_THREADS_NUM: 0
		CPU_THROUGHPUT_STREAMS: 1
		DUMP_EXEC_GRAPH_AS_DOT: 
		DYN_BATCH_ENABLED: NO
		DYN_BATCH_LIMIT: 0
		EXCLUSIVE_ASYNC_REQUESTS: NO
		PERF_COUNT: NO
	Device: MYRIAD
	Metrics:
		DEVICE_THERMAL: UNSUPPORTED TYPE
		SUPPORTED_CONFIG_KEYS: DEVICE_ID, PERF_COUNT, EXCLUSIVE_ASYNC_REQUESTS, VPU_MYRIAD_PLATFORM, VPU_HW_STAGES_OPTIMIZATION, VPU_CUSTOM_LAYERS, VPU_PRINT_RECEIVE_TENSOR_TIME, VPU_MYRIAD_FORCE_RESET, LOG_LEVEL, CONFIG_FILE, VPU_IGNORE_IR_STATISTIC
		RANGE_FOR_ASYNC_INFER_REQUESTS: 3, 6, 1
		OPTIMIZATION_CAPABILITIES: FP16
		SUPPORTED_METRICS: DEVICE_THERMAL, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, OPTIMIZATION_CAPABILITIES, SUPPORTED_METRICS, FULL_DEVICE_NAME, AVAILABLE_DEVICES
		FULL_DEVICE_NAME: Intel Movidius Myriad X VPU
		AVAILABLE_DEVICES: 20.1-ma2480

	Default values for device configuration keys:
		DEVICE_ID: 
		PERF_COUNT: OFF
		EXCLUSIVE_ASYNC_REQUESTS: OFF
		VPU_MYRIAD_PLATFORM: 
		VPU_HW_STAGES_OPTIMIZATION: ON
		VPU_CUSTOM_LAYERS: 
		VPU_PRINT_RECEIVE_TENSOR_TIME: OFF
		VPU_MYRIAD_FORCE_RESET: OFF
		LOG_LEVEL: LOG_NONE
		CONFIG_FILE: 
		VPU_IGNORE_IR_STATISTIC: OFF

実行結果例(NCS2 2本)

Available devices:
	Device: CPU
	Metrics:
		AVAILABLE_DEVICES: 
		SUPPORTED_METRICS: AVAILABLE_DEVICES, SUPPORTED_METRICS, FULL_DEVICE_NAME, OPTIMIZATION_CAPABILITIES, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, RANGE_FOR_STREAMS
		FULL_DEVICE_NAME: Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
		OPTIMIZATION_CAPABILITIES: FP32, INT8, BIN
		SUPPORTED_CONFIG_KEYS: CPU_BIND_THREAD, CPU_THREADS_NUM, CPU_THROUGHPUT_STREAMS, DUMP_EXEC_GRAPH_AS_DOT, DYN_BATCH_ENABLED, DYN_BATCH_LIMIT, EXCLUSIVE_ASYNC_REQUESTS, PERF_COUNT
		RANGE_FOR_ASYNC_INFER_REQUESTS: 1, 1, 1
		RANGE_FOR_STREAMS: 1, 8

	Default values for device configuration keys:
		CPU_BIND_THREAD: NUMA
		CPU_THREADS_NUM: 0
		CPU_THROUGHPUT_STREAMS: 1
		DUMP_EXEC_GRAPH_AS_DOT: 
		DYN_BATCH_ENABLED: NO
		DYN_BATCH_LIMIT: 0
		EXCLUSIVE_ASYNC_REQUESTS: NO
		PERF_COUNT: NO
	Device: MYRIAD.20.1-ma2480
	Metrics:
		DEVICE_THERMAL: UNSUPPORTED TYPE
		SUPPORTED_CONFIG_KEYS: DEVICE_ID, PERF_COUNT, EXCLUSIVE_ASYNC_REQUESTS, VPU_MYRIAD_PLATFORM, VPU_HW_STAGES_OPTIMIZATION, VPU_CUSTOM_LAYERS, VPU_PRINT_RECEIVE_TENSOR_TIME, VPU_MYRIAD_FORCE_RESET, LOG_LEVEL, CONFIG_FILE, VPU_IGNORE_IR_STATISTIC
		RANGE_FOR_ASYNC_INFER_REQUESTS: 3, 6, 1
		OPTIMIZATION_CAPABILITIES: FP16
		SUPPORTED_METRICS: DEVICE_THERMAL, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, OPTIMIZATION_CAPABILITIES, SUPPORTED_METRICS, FULL_DEVICE_NAME, AVAILABLE_DEVICES
		FULL_DEVICE_NAME: Intel Movidius Myriad X VPU
		AVAILABLE_DEVICES: 20.1-ma2480, 20.2-ma2480

	Default values for device configuration keys:
		DEVICE_ID: 
		PERF_COUNT: OFF
		EXCLUSIVE_ASYNC_REQUESTS: OFF
		VPU_MYRIAD_PLATFORM: 
		VPU_HW_STAGES_OPTIMIZATION: ON
		VPU_CUSTOM_LAYERS: 
		VPU_PRINT_RECEIVE_TENSOR_TIME: OFF
		VPU_MYRIAD_FORCE_RESET: OFF
		LOG_LEVEL: LOG_NONE
		CONFIG_FILE: 
		VPU_IGNORE_IR_STATISTIC: OFF
	Device: MYRIAD.20.2-ma2480
	Metrics:
		DEVICE_THERMAL: UNSUPPORTED TYPE
		SUPPORTED_CONFIG_KEYS: DEVICE_ID, PERF_COUNT, EXCLUSIVE_ASYNC_REQUESTS, VPU_MYRIAD_PLATFORM, VPU_HW_STAGES_OPTIMIZATION, VPU_CUSTOM_LAYERS, VPU_PRINT_RECEIVE_TENSOR_TIME, VPU_MYRIAD_FORCE_RESET, LOG_LEVEL, CONFIG_FILE, VPU_IGNORE_IR_STATISTIC
		RANGE_FOR_ASYNC_INFER_REQUESTS: 3, 6, 1
		OPTIMIZATION_CAPABILITIES: FP16
		SUPPORTED_METRICS: DEVICE_THERMAL, SUPPORTED_CONFIG_KEYS, RANGE_FOR_ASYNC_INFER_REQUESTS, OPTIMIZATION_CAPABILITIES, SUPPORTED_METRICS, FULL_DEVICE_NAME, AVAILABLE_DEVICES
		FULL_DEVICE_NAME: Intel Movidius Myriad X VPU
		AVAILABLE_DEVICES: 20.1-ma2480, 20.2-ma2480

	Default values for device configuration keys:
		DEVICE_ID: 
		PERF_COUNT: OFF
		EXCLUSIVE_ASYNC_REQUESTS: OFF
		VPU_MYRIAD_PLATFORM: 
		VPU_HW_STAGES_OPTIMIZATION: ON
		VPU_CUSTOM_LAYERS: 
		VPU_PRINT_RECEIVE_TENSOR_TIME: OFF
		VPU_MYRIAD_FORCE_RESET: OFF
		LOG_LEVEL: LOG_NONE
		CONFIG_FILE: 
		VPU_IGNORE_IR_STATISTIC: OFF

NCS21本と2本での差分を見てみました。ちゃんと2本分出ていますね。

その他

NCS2を2本利用した時に、電力低下のメッセージが表示されました。セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。NCS2も試してみてくださいね。

Multi_Camera_Multi_Person_tracking(Windows編)

今回実行するmulti_camera_multi_person_trackingのサンプルは以下のフォルダになります。

C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\samples\python\multi_camera_multi_person_tracking

実行の前に

サンプルを実行する前に、READMEファイルを確認しておきましょう。サンプルで必要なモデルや実行例が記載されています。また、Readmeの後半では、Computer Vision Annotation Tool (CVAT)が少し触れられていましたが、今回は割愛します。

モデル

今回は以下のモデルを利用しました。

  • person-detection-retail-0013
  • person-reidentification-retail-0103

Webカメラか動画ファイル

本サンプルを実行する際に、Webカメラか動画が必要です。今回はc270を3台使用しました。(4台以上はエラーになりました)

カメラのピントが合ってなかったので、ピントの合わせ方を調べたところ、分解してカメラ周りのネジを回すとのことでした。

無事、ピントが合いました。ピントが合ってないと認識精度が落ちるのでご注意ください。

実行

環境変数の設定をしていない場合は、コマンドラインで以下を実行します。
C:¥Program Files (x86)¥IntelSWTools¥openvino¥bin¥setupvars.bat

以下のコマンドでmulti_camera_multi_person_trackingを実行します。
モデルの格納先は各自の環境のパスを指定してください。-i はカメラを指定しています。3台あるので、0 1 2 と3つ指定しました。

cd C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\samples\python\multi_camera_multi_person_tracking python multi_camera_multi_person_tracking.py --m_detector モデルのパス\Intel\OpenVINO\openvino_models\intel\person-detection-retail-0013\FP32\person-detection-retail-0013.xml --m_reid モデルのパス\Intel\OpenVINO\openvino_models\intel\person-reidentification-retail-0103\FP32\person-reidentification-retail-0103.xml --config config.py -i 0 1 2

実行結果

うまく実行出来たでしょうか。Readmeの後半では、Computer Vision Annotation Tool (CVAT)が少し触れられていました。CVATについて確認が出来たら記事にする予定です。

ビデオ会議でのwebカメラのオン・オフユースケース(姿勢推定編)

OpenVINOを実際に使用したユースケースを想定し、プログラムを作成しているシリーズ。

前回は顔認識を使用して、自分以外の顔が写り込む、または、退席した時(誰も居なくなった)場合に、ビデオ会議のカメラをオフにするという内容でした。今回も引き続きビデオ会議を取り上げてみます。

きっかけ・ゴール

テレビ会議が一気に普及し、自宅仕事が増えてる状況ですね。暑くなってきましたし、上だけフォーマルな人も増えているのは分かります。自分も今は短パンです。YouTubeで「Luke Ming Flanagan underwear speech」とか「Reporter Caught With No Pants Live on Air」とかで検索すると、ウッカリさんが面白ニュースとしていじられていますね。気持ちは分かりますよ。暑いですもん。

このようなウッカリさんの事故を防ぐためには、「ビデオ会議にはちゃんとした格好で出ましょう」みたいなルールを作るのも良いかもしれませんが、それではつまらないルールが増えていくばかり。失敗学でも言われているように個人に依存せず、システム的に防止する事が必要だなあ。と思っていたら、作っている方がいらっしゃいました。

https://www.hackster.io/nickbild/safe-meeting-b66324

記事を読んでいると、「Safe Meeting prevents embarrassing and unprofessional situations by stopping your video stream if certain attire that’s inappropriate for business is detected.」だそうです。”ビジネスに相応しくない”というところが気になりますね。いろんなパンツとかどうやって検出しているんでしょう。謎です。セクスウィなパンツや、逆に派手なスーツやドレスもちゃんと判定してくれるのでしょうか。

という訳で、今回のユースケースではもっと単純化して「姿勢推定で腰より下が映ったら、ビデオ会議側のカメラをオフにする」というゴールにしたいと思います。

環境について

本ユースケースの実行環境はWindows10(以降、Win10)です。
  • Windows 10
  • Logicool c270 x 2台
  • ELECOM U3H-A408SBK
  • Jitsiはクラウドサービスを利用(https://meet.jit.si)
  • モデル:human-pose-estimation-001
  • 言語 :c++, powershell, bat
  • webカメラは2台使います。1台はビデオ会議用、1台は顔認識用です。今回はc270を使いました。webカメラも価格が高騰しているようですね。Win10で使えればお手元のカメラで問題無いと思います。

    Webカメラ2台、キーボード、マウスをWin10に挿すと、ハードにもよりますが、バスパワーが不足する状況になるかもしれません。そこで、セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。(Amazonの手先ではありません)

    今回利用したビデオ会議システムはオープンソースのjitsi(https://meet.jit.si)です。jitsiはもっと普及しても良いと思うOSSです。なお、理論上は他のビデオ会議でも本記事は使用可能です。

    姿勢推定について

    姿勢推定はOpenVINOに含まれている、human_pose_estimation_demo(c++)を流用しました。モデルはhuman-pose-estimation-001となります。まず、OpenVINOのドキュメントを確認しました。

    https://docs.openvinotoolkit.org/latest/_models_intel_human_pose_estimation_0001_description_human_pose_estimation_0001.html

    This is a multi-person 2D pose estimation network (based on the OpenPose approach) with tuned MobileNet v1 as a feature extractor. For every person in an image, the network detects a human pose: a body skeleton consisting of keypoints and connections between them. The pose may contain up to 18 keypoints: ears, eyes, nose, neck, shoulders, elbows, wrists, hips, knees, and ankles.

    とあります。キーポイントとして18箇所を判定するんですね。腰は何番だろうと思ったら、8番と11番でした。つまり、姿勢推定の結果、8番と11番に値が存在すると、腰が写っちゃっているという事になりますね。

    WebカメラのOnOffについて

    上記のとおり、姿勢推定の結果、腰が写った場合(8番と11番に値がある)にWebカメラをオフにすると良さそうだ。という事が分かりました。

    ”カメラをオフ”を手動で行う方法は、[コンピュータの管理]-[デバイスマネージャー]-[イメージングデバイス]から対象のカメラを右クリックして「デバイスを無効にする」という手順になります。これをDevConかPowerShellのどちらかで行います。

    DevCon

    https://docs.microsoft.com/ja-jp/windows-hardware/drivers/devtest/devcon-exampleshttps://docs.microsoft.com/ja-jp/windows-hardware/drivers/devtest/devcon-examples?fbclid=IwAR3tbimojRY0lercRto08y6QfQPQLMKoPAc52Y2tua1w3KA4TsVj8aJYWxo#ddk_example_30_disable_devices_by_an_id_pattern_tools

    PowerShell

    https://docs.microsoft.com/en-us/powershell/module/pnpdevice/enable-pnpdevice?view=win10-ps

    ここで注意なのは、どちらも管理者権限で実行する必要があるという事です。管理者権限で呼び出す方法は以下のページが参考になりそうですが、ここでは面倒だったので時間優先でUACを無効にしてダイアログが出るのを回避しました。正式に物を作る際は綺麗なお作法でお願いします。

    https://qiita.com/zetamatta/items/d41552c383605b24a8c2

    実行のようす

    最後に

    前回はRasPi4/Python/顔認証で、今回はWin10/C++/姿勢推定で、ビデオ会議のカメラの制御を実装しました。実現したい事やエンジニアが使える言語に応じて、モデルや言語を変えて貰えば良いと思います。OpenVINOでいろいろ挑戦してみてください。

    ビデオ会議でのwebカメラのオン・オフユースケース(顔認識編)

    OpenVINOを実際に使用したユースケースを想定し、プログラムを作成しているシリーズ。今回はビデオ会議を取り上げてみます。

    みなさんご存知の通り、新型コロナの影響でビデオ会議の導入・利用が一気に進みました。また、ビジネス利用だけで無く、”宅飲み”など、普段使いのツールとして利用されている方も多いと思います。

    ビデオ会議あるあるとして、家族が写り込んだり、離席した場合に部屋を映したく無いという状況があると思います。みなさんどうされていますか?この解決手段を考えてみます。まずはYouTubeの動画をご覧ください。

    環境について

    本ユースケースの実行環境はRaspberryPi 4(以降、RasPi)です。
  • RaspberryPi 4
  • intel Neural Compute Stick 2
  • Logicool c270 x 2台
  • ELECOM U3H-A408SBK
  • Jitsi(on ubuntu 18.04)
  • モデル:face-detection-retail-0004
  • 言語 :python
  • 宝島社 もっとひょっこりはんをさがせ!
  • RasPiは安くて便利な環境です。私が講師を担当していた小学5、6年生対象のプログラミング・ロボット講座でもRasPiを配布し、みんな楽しく使っていました。(小学生がLinux使う世の中なんて、いい意味で想定外ですよ)

    RasPi4、USBハブ、intel Neural Compute Stick2

    webカメラは2台使います。1台はビデオ会議用、1台は顔認識用です。今回はc270を使いました。webカメラも価格が高騰しているようですね。RasPiで使えればお手元のカメラで問題無いと思います。

    RasPiでOpenVINOを使うには、Intel Neural Compute Stick 2(以降、NCS2) が必須です。Amazonで1万円程度で購入出来ますので、未だお持ちでない方はぜひ購入ください。

    Webカメラ2台とNCS2、キーボード、マウスをRasPiに挿すと、バスパワーが不足するという状況になります。ssh,VNCで接続してもキーボード・マウスだけが回避出来るので心もと無いです。そこで、セルフパワーのUSBハブの出番です。未だお持ちでない方はぜひ購入ください。USB3.0対応の方が良いですね。(Amazonの手先ではありません)

    今回利用したビデオ会議システムはオープンソースのjitsi(https://jitsi.org)です。ubutu server 18.04 上に構築済のローカルjitsiを利用しました。jitsiはもっと普及しても良いと思うOSSです。なお、理論上は他のビデオ会議でも本記事は使用可能です。

    RasPiのモデル利用について

    実際の顔認識用のデモアプリは流用するとして、ここでは実行時に注意する点についてご案内します。以下のようにモデル利用時にエラーが出る場合、まずはモデルを疑ってください。忘れていると1日くらい損します。

    [ INFO ] 2020-06-05 11:14:48,240 Loading models [ INFO ] 2020-06-05 11:14:48,241 Loading the model from '/home/pi/openvino/models/face-detection-retail-0004/FP16/face-detection-retail-0004.xml' face_recognition_demo.py:177: DeprecationWarning: Reading network using constructor is deprecated. Please, use IECore.read_network() method instead model = IENetwork(model_description_path, model_weights_path) Traceback (most recent call last): File "face_recognition_demo.py", line 446, in main() File "face_recognition_demo.py", line 441, in main visualizer = Visualizer(args) File "face_recognition_demo.py", line 240, in __init__ self.frame_processor = FrameProcessor(args) File "face_recognition_demo.py", line 131, in __init__ face_detector_net = self.load_model(args.m_fd) File "face_recognition_demo.py", line 177, in load_model model = IENetwork(model_description_path, model_weights_path) File "ie_api.pyx", line 1099, in openvino.inference_engine.ie_api.IENetwork.__cinit__ RuntimeError: fc7_mbox_priorbox/naked_not_unsqueezed has zero dimension that is not allowable

    このようなエラーが出る場合は、2019R3のモデルをダウンロードして使ってみてください。(他のエラーパターンもあるので基本的には2019R3で良いかもしれません) https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/

    なお、本ユースケースでは、face-detection-retail-0004を利用しました。

    WebカメラのOnOffについて

    基本的に、顔認識用カメラ側でnot(自分の顔認識がされた)場合に、web会議側のカメラをオフにする動作となります。以下のページが参考になりました。ありがとうございます。

    https://www.raspberrypi.org/forums/viewtopic.php?t=242059

    https://artfinex.co.jp/wp/wp-content/uploads/2019/03/afx_RaspberryPiRaspbianUSB_Reset_UHF.pdf

    最後に

    ビデオ会議ではいろんな事故がありますが、割と下半身をぽんぽんすーにしている人も多いのがびっくりです。今後は、下半身を検出してカメラをオフにする仕組みを作りたいと思います。

    Interactive Face Recognition Demoの実行(Windows編)

    Interactive Face Recognition Demoを実行してみましょう。まずは概要の動画をご確認ください。

    実行の様子

    今回実行するInteractive Face Recognition Demoのサンプルは以下のフォルダになります。

    C:\Program Files (x86)\IntelSWTools\openvino\inference_engine\demos\python_demos\face_recognition_demo

    実行の前に

    サンプルを実行する前に、READMEファイルを確認しておきましょう。サンプルで必要なモデルや実行例が記載されています。

    モデル

    今回は以下のモデルを利用しました。

    • face-detection-retail-0004
    • landmarks-regression-retail-0009
    • face-reidentification-retail-0095

    動画ファイル

    テスト用の動画も必要です。今回は以下のサイトから、face-demographics-walking-and-pause.mp4をダウンロードしました。

    https://github.com/intel-iot-devkit/sample-videos

    実行

    環境変数の設定をしていない場合は、コマンドラインで以下を実行します。

    C:¥Program Files (x86)¥IntelSWTools¥openvino¥bin¥setupvars.bat

    以下のコマンドでInteractive Face Recognition Demoを実行します。
    モデルの格納先、顔画像の保存先フォルダ、動画ファイルは各自の環境のパスを指定してください。

    
    python face_recognition_demo.py -m_fd パス\Intel\OpenVINO\openvino_models\intel\face-detection-retail-0004\FP16\face-detection-retail-0004.xml -m_lm パス\Intel\OpenVINO\openvino_models\intel\landmarks-regression-retail-0009\FP16\landmarks-regression-retail-0009.xml -m_reid パス\Intel\OpenVINO\openvino_models\intel\face-reidentification-retail-0095\FP16\face-reidentification-retail-0095.xml --verbose -fg 顔画像の保存先フォルダ -i パス\face-demographics-walking-and-pause.mp4
    

    実行結果

    顔認識用のフォルダに画像を何も入れていないと、全員unknownで表示されると思います。

    その場合は、–allow_grow をオプションを指定して実行します。unknownさんを検出すると、その都度、名前を聞いてくるので入力します。(複数回聞かれます)。

    名前に対応した画像ファイルとして、オプション-fgで指定されているフォルダ配下に画像が保存されます。

    unknownを検出した例
    全員の顔画像を用意した例

    うまく顔認識が出来たでしょうか。最後にもう一度、動画を載せておきます。ご確認ください。

    もっとサンプルを実行してみたい!?では次のサンプルにも挑戦してみてください。