macOS Big Surでopenvino_2021.2.185を実行してみる

はじめに

Windows 10やUbuntuでOpenVINOを確認して来ましたが、久々にmacOS Big Sur でopenvino_2021.2.185を実行してみます。

本記事はOpenVINOを動かす事を目的に試行した内容になります。お手持ちの環境で動作するヒントになれば幸いです。

使用したハードウェアは以下の通りです。

  機種名:	MacBook Pro
  機種ID:	MacBookPro15,2
  プロセッサ名:	クアッドコアIntel Core i7
  プロセッサ速度:	2.7 GHz
  プロセッサの個数:	1
  コアの総数:	4
  二次キャッシュ(コア単位):	256 KB
  三次キャッシュ:	8 MB
  ハイパー・スレッディング・テクノロジ:	有効
  メモリ:	16 GB

OpenVINOの公式ページから2021.2.185をダウンロードしてインストールしてください。本記事はセットアップの流れが終わったという前提で始めます。

ターミナル起動時setupvars.shでwarningが出る事象への対処

Last login: Thu Dec 24 18:34:05 on ttys000
[setupvars.sh] WARNING: Can not find OpenVINO Python binaries by path /Users/python
[setupvars.sh] WARNING: OpenVINO Python environment does not set properly
[setupvars.sh] OpenVINO environment initialized

ターミナルを起動します。あれ、pythonのパスが/Users/pythonになっていますね。環境変数を確認してみましょう。

~ % echo $INTEL_OPENVINO_DIR                    
/Users

$INTEL_OPENVINO_DIR が変です。Usersではありません。なんでしょう。.zshrcにexport INTEL_OPENVINO_DIR=”/opt/intel/openvino_2021/” を追記してみましたが、変わらずでした。(setupvars.sh内で設定しているからでした。)

という訳で、setupvars.sh内で直接設定してみます。

再度ターミナルを開くと、メッセージが変わりました。

Last login: Fri Dec 25 10:12:12 on ttys000
[setupvars.sh] WARNING: Can not find OpenVINO Python module for python3.9 by path /opt/intel/openvino_2021/python/python3.9
[setupvars.sh] WARNING: OpenVINO Python environment does not set properly
[setupvars.sh] OpenVINO environment initialized

ん?3.9?Python 3.9はありませんよ。

setupvars.shを編集して、python_versionを3.7に設定します。

ターミナルを再度起動してみます。無事warningが消えました。

human_pose_estimation_demoを実行してみる

setupvar.shが動作したみたいなので、pythonデモを実行してみますが、import cv2でエラーになりました(画面撮り忘れ)

rpathが解決出来ていないようだったので、install_name_toolで追加します。

% sudo install_name_tool -add_rpath /opt/intel/openvino_2021.2.185/opencv/lib/ /opt/intel/openvino_2021/python/python3/cv2.so 
% sudo install_name_tool -add_rpath /opt/intel/openvino_2021.2.185/deployment_tools/inference_engine/lib/intel64/ /opt/intel/openvino_2021/python/python3/cv2.so  

上記を実行すると、import cv2をしてもエラーになりませんでした。

% python3
Python 3.7.7 (default, Nov 12 2020, 17:58:53) 
[Clang 12.0.0 (clang-1200.0.32.21)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> 

human_pose_estimation.pyの実行

human_pose_estimation.pyを実行してみます。

% python3 human_pose_estimation.py -h
Traceback (most recent call last):
  File "human_pose_estimation.py", line 30, in <module>
    from human_pose_estimation_demo.model import HPEAssociativeEmbedding, HPEOpenPose
  File "/Users//omz_demos_build/python_demos/human_pose_estimation_demo/human_pose_estimation_demo/model.py", line 23, in <module>
    import ngraph as ng
  File "/opt/intel/openvino_2021/python/python3.7/ngraph/__init__.py", line 26, in <module>
    from ngraph.impl import Node
  File "/opt/intel/openvino_2021/python/python3.7/ngraph/impl/__init__.py", line 35, in <module>
    from _pyngraph import Dimension
ImportError: dlopen(/opt/intel/openvino_2021/python/python3.7/_pyngraph.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libonnx_importer.dylib
  Referenced from: /opt/intel/openvino_2021/python/python3.7/_pyngraph.cpython-37m-darwin.so
  Reason: image not found

まだ出ますね。install_name_tool を使って、rpathで足りないものを追加します。

% sudo install_name_tool -add_rpath /opt/intel/openvino_2021.2.185/deployment_tools/ngraph/lib /opt/intel/openvino_2021/python/python3.7/_pyngraph.cpython-37m-darwin.so

OK。-hが通るようになりました。

human_pose_estimation_demo % python3 human_pose_estimation.py -h                                                                                                                                   
usage: human_pose_estimation.py [-h] -i INPUT -m MODEL -at {ae,openpose}
                                [--tsize TSIZE] [-t PROB_THRESHOLD] [-r]
                                [-d DEVICE] [-nireq NUM_INFER_REQUESTS]
                                [-nstreams NUM_STREAMS]
                                [-nthreads NUM_THREADS] [-loop LOOP]
                                [-no_show] [-u UTILIZATION_MONITORS]

Options:
  -h, --help            Show this help message and exit.
  -i INPUT, --input INPUT
                        Required. Path to an image, video file or a numeric
                        camera ID.
  -m MODEL, --model MODEL
                        Required. Path to an .xml file with a trained model.
  -at {ae,openpose}, --architecture_type {ae,openpose}
                        Required. Type of the network, either "ae" for
                        Associative Embedding or "openpose" for OpenPose.
  --tsize TSIZE         Optional. Target input size. This demo implements
                        image pre-processing pipeline that is common to human
                        pose estimation approaches. Image is resize first to
                        some target size and then the network is reshaped to
                        fit the input image shape. By default target image
                        size is determined based on the input shape from IR.
                        Alternatively it can be manually set via this
                        parameter. Note that for OpenPose-like nets image is
                        resized to a predefined height, which is the target
                        size in this case. For Associative Embedding-like nets
                        target size is the length of a short image side.
  -t PROB_THRESHOLD, --prob_threshold PROB_THRESHOLD
                        Optional. Probability threshold for poses filtering.
  -r, --raw_output_message
                        Optional. Output inference results raw values showing.
  -d DEVICE, --device DEVICE
                        Optional. Specify the target device to infer on; CPU,
                        GPU, FPGA, HDDL or MYRIAD is acceptable. The sample
                        will look for a suitable plugin for device specified.
                        Default value is CPU.
  -nireq NUM_INFER_REQUESTS, --num_infer_requests NUM_INFER_REQUESTS
                        Optional. Number of infer requests
  -nstreams NUM_STREAMS, --num_streams NUM_STREAMS
                        Optional. Number of streams to use for inference on
                        the CPU or/and GPU in throughput mode (for HETERO and
                        MULTI device cases use format
                        <device1>:<nstreams1>,<device2>:<nstreams2> or just
                        <nstreams>)
  -nthreads NUM_THREADS, --num_threads NUM_THREADS
                        Optional. Number of threads to use for inference on
                        CPU (including HETERO cases)
  -loop LOOP, --loop LOOP
                        Optional. Number of times to repeat the input.
  -no_show, --no_show   Optional. Don't show output
  -u UTILIZATION_MONITORS, --utilization_monitors UTILIZATION_MONITORS
                        Optional. List of monitors to show initially.

デモを実行してみます。

% python3 human_pose_estimation.py -i walking.mov -m ./human-pose-estimation-0001/FP16/human-pose-estimation-0001.xml -at openpose
[ INFO ] Initializing Inference Engine...
[ INFO ] Loading network...
[ INFO ] Using USER_SPECIFIED mode
[ INFO ] Reading network from IR...
[ INFO ] Loading network to plugin...
[ INFO ] Reading network from IR...
[ INFO ] Loading network to plugin...
[ INFO ] Starting inference...
To close the application, press 'CTRL+C' here or switch to the output window and press ESC key
To switch between min_latency/user_specified modes, press TAB key in the output window
[ INFO ] 
[ INFO ] Mode: USER_SPECIFIED
[ INFO ] FPS: 10.7
[ INFO ] Latency: 64.1 ms

 無事実行できました!

まとめ

今回のポイントは以下の2点です。ご参考になれば幸いです。

  • setupvar.shを正常に実行するようにする。
  • rpathの問題を解消する。