はじめに
Raspberry Pi4のUbuntu環境でOpenVINOをPythonで動かすための環境構築でめちゃくちゃ手こずったので備忘録も兼ねて記録していきます。
手こずった話は最後に書きます。
注意点
Intelによると、ラズパイでのOpenVINO対応環境はRaspbian/RaspberryPi OSとなっております。
Ubuntuでの対応は非公式ですので、お気をつけ下さい。
また、本構築手法ではOpenCVのOpenVINO対応は行っていません。
用意する環境
- Raspberry Pi4(4/8GB)
- Ubuntu18.04/20.04
- Python3.6(Ubuntu18.04)/Python3.8(Ubuntu20.04)
環境構築
はじめの一歩
手始めにライブラリを最新版にしておきましょう。
sudo apt update && sudo apt upgrade -y
OpenVINOのGithubから最新版を取ってくるために、gitが必要になります。
また、Python3のライブラリを取ってくるのにpipも必要です。
sudo apt install git python3-pip
ビルドツールの準備
ビルドツールであるbuild-essentialとcmakeを入れましょう。
sudo apt install build-essential cmake
ソースコードのダウンロードと依存ライブラリの準備
OpenVINOを公式からクローンしましょう。
softwareというディレクトリを作ってその中に置くようにしてますが、無くてもいいです。
mkdir software
cd software
git clone https://github.com/openvinotoolkit/openvino.git
サブモジュールがあるので、それをフェッチしましょう.
cd openvino/inference-engine
git submodule update --init --recursive
ビルド関係で必要なものがいくつかあるので、bashファイルを実行します。
cd ..
sh ./install_build_dependencies.sh
数分かかります。
Python3環境の準備
Python3はUbuntu18/20に標準で付いているものを使うので、
Ubuntu18であればPython3.6, Ubuntu20であればPython3.8になります。
cythonのバージョン0.29.21とnumpyが必要になります。
sudo -H pip3 install numpy
sudo -H pip3 install cython==0.29.21
ビルド
Python環境含めて、ビルドしましょう。
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DENABLE_OPENCV=OFF \
-DENABLE_PYTHON=ON \
-DPYTHON_EXECUTABLE=/usr/bin/python3.6 \
-DPYTHON_LIBRARY=/usr/lib/python3.6/config-3.6m-aarch64-linux-gnu/libpython3.6m.so \
-DPYTHON_INCLUDE_DIR=/usr/include/python3.6m ..
cmake実行後に、PythonのLibやらがちゃんと指定されていることを確認してください。
確認できれば、
make -j4
でビルドします。
大体2~3時間かかります。
PYTHONPATHの設定
ビルドされたPython APIのラッパーは/openvino/bin/
の中にあります。
以下を.bashrc
を開いて記載しましょう。
sudo vim ~/.bashrc
...
export PYTHONPATH=$PYTHONPATH:~/software/openvino/bin/aarch64/Release/lib/python_api/python3.6/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/software/openvino/bin/aarch64/Release/lib/
ちゃんとimportできるか確認
ターミナル上でいいので、Python3を起動して確認してみましょう。
python3
...
# パスが通ってるかまず確認
# 出力に~/software/openvino/bin/aarch64/Release/lib/python_api/python3.6/が含まれていることを確認
# 無ければ、.bashrcを確認する
import sys; import pprint
pprint.pprint(sys.path)
# OpenVINOの確認
from openvino.inference_engine import IECore
# エラーがでなければ完了
めちゃくちゃ手こずった話
本来は、手動で構築したPython3.7上にOpenVINOを作りたかったのですが、何度ビルドしてもPython上でimport時に
Segmentation fault (core dumped)
と出て、Pythonがクラッシュしてしまいます。
色々探った結果、apt install
で入れたcythonが悪さをしているのではないかと思い、apt remove
で消した後にpip
で入れたcythonを参照するようにしたのですが、それも原因ではなかったようです。
また、Python3.7をインストールする際に
sudo make install
をしていたせいで、3.6系と3.7系がごちゃごちゃになってしまったのではないかと思い、
sudo make altinstall
にしましたが、それもダメ…
結局3.7上で構築するのは諦めて、Ubuntuに最初から付いているPythonでOpenVINO環境構築したところうまくいきました。
ただ、Intelの中の人は自分で構築したPython環境にビルドできたようです。
https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/When-I-import-openvino-inference-engine-I-faced-crash-the-python/m-p/1229283#M21472
ちなみにIntelの方々は非常に丁寧に対応して頂けます。この一件でめちゃくちゃIntelのファンになりました。Intel入ってます。