はじめに
OpenVINOのハンズオンを受講したので、自宅のPCでも動作させようとしたときにハマったのでメモします。
ハンズオンはRaspberry Pi + Neural Compute Stickで行いました。(IntelCPUが必要なため)
このサイトOpenVINOで始めるディープラーニングを参考にして手順通りに進めましたが、リアルタイム顔検出で実行時エラーに悩みました。
同じようにハマっている人の少しでも解決になればと思います。
OpenVINOとは
OpenVINOは、エッジにおける視覚アプリケーションでコンピュータビジョンやディープラーニング推論を容易に実現するためのツールキットです。
OpenVINO ツールキット
動作環境
- MacBook Pro 2018
- macOS 10.14.6
- OpenVINO 2019 R3.1
- Python 3.7.3
実行時エラー
OpenVINOのライブラリでエラーが発生しています。
StackOverflowなどで検索しましたが、どれも解決しませんでした。
{'data': <openvino.inference_engine.ie_api.InputInfo object at 0x1054d3578>}
<openvino.inference_engine.ie_api.IEPlugin object at 0x1054d34a8>
Traceback (most recent call last):
File "sample.py", line 19, in <module>
exec_net = plugin.load(network=net)
File "ie_api.pyx", line 547, in openvino.inference_engine.ie_api.IEPlugin.load
File "ie_api.pyx", line 557, in openvino.inference_engine.ie_api.IEPlugin.load
RuntimeError: Unsupported primitive of type: PriorBoxClustered name: fc7_mbox_priorbox
エラーが発生している箇所は、plugin.load()です。
モデルファイルのパスも正しく、ファイルも存在します。(何度も確認しました)
PCではFP32版を使用してくださいと記述がありましたが、FP16版にしてもエラーは変わりませんでした。
# モデルの読み込み
net = IENetwork(model='FP32/face-detection-retail-0004.xml', weights='FP32/face-detection-retail-0004.bin')
exec_net = plugin.load(network=net)
解決策
CPUを使用するときは、add_cpu_extension()で追加ライブラリが必要でした。
# ターゲットデバイスの指定
plugin = IEPlugin(device="CPU")
plugin.add_cpu_extension('/opt/intel/openvino/deployment_tools/inference_engine/lib/intel64/libcpu_extension.dylib')
パスは環境に合わせて設定してください。
手順通りに環境構築していれば、上記のパスになると思います。
参考
MacBookで内臓カメラを使用するには、下記を参考にしました。
Mac内蔵カメラの動画をpythonでキャプチャ
cap = cv2.VideoCapture(0)
おわりに
OpenVINOの実行時エラーが解決でき、カメラを使用したリアルタイム認識ができるようになりました。
まずは用意されているモデルを利用して、いろいろと試してみたいと思います。