RaspberryPiのpyenv環境にOpenCVを入れる
pyenvを使ってPythonを構築している場合に、OpenCVを使えるようにする備忘録。
ビルド中がめちゃくちゃ時間かかるので寝る前にやっておいて起きて終わってるのを確認するのが吉。
ちなみにpyenv使わない場合はこちらの記事が一番簡単な導入方法だと思います。
事前準備
パッケージの更新
sudo apt update && sudo apt upgrade -y
必需品のインストール
sudo apt-get install -y build-essential cmake pkg-config sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install -y libxvidcore-dev libx264-dev sudo apt-get install -y libgtk2.0-dev libgtk-3-dev sudo apt-get install -y libcanberra-gtk* sudo apt-get install -y libatlas-base-dev gfortran sudo apt-get install -y python2.7-dev python3-dev sudo apt-get install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
Vimの設定
入れなくても良いですが、ラズパイの初期設定だと矢印キーやBackspaceキーが利かないので、せめてそれだけでもやっておいたほうが幸せ。
後述ではvi
を使ってますがお好みで
Vimのインストール
sudo apt install vim
設定ファイルを作成
vi ~/.vimrc
下記を記入して保存
set encoding=utf-8 set nocompatible set backspace=indent,eol,start set autoindent set nowrap set ruler set number syntax on
Swap領域の変更
重い処理なので最低でも1GB程度は設定しておいたほうがいい
設定ファイルを編集
sudo vi /etc/dphys-swapfile
2GBに設定を変更(初期値は100と記述されている)
CONF_SWAPSIZE=2048
再起動して読み込み
sudo systemctl stop dphys-swapfile sudo systemctl start dphys-swapfile
適応されているか確認
free -h
python構築
pyenvをインストール
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
PATHの設定
vi .bashrc
末尾あたりに追記
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)"
再読込
source .bashrc
pythonのインストール
pyenv install 3.6.6 pyenv global 3.6.6
pipの更新
pip install --upgrade pip
OpenCV構築
OpenCVの本体の取得と展開
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip
作業するためディレクトリ移動
cd opencv-3.1.0
ビルド用のディレクトリの作成し移動
mkdir build cd build
ビルド設定
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=~/.pyenv/versions/3.6.6 \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.1.0/modules \ \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D ENABLE_PRECOMPILED_HEADERS=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D BUILD_opencv_python3=ON \ -D BUILD_opencv_legacy=OFF \ -D PYTHON_EXECUTABLE=~/.pyenv/versions/3.6.6/bin/python \ -D PYTHON_LIBRARY=~/.pyenv/versions/3.6.6/lib/libpython3.6m.a \ -D PYTHON_INCLUDE_DIR=~/.pyenv/versions/3.6.6/include/python3.6m \ -D PYTHON_INCLUDE_DIRS=~/.pyenv/versions/3.6.6/include/python3.6m \ -D PYTHON_INCLUDE_DIRS2=~/.pyenv/versions/3.6.6/include/python3.6m \ -D INCLUDE_DIRS=~/.pyenv/versions/3.6.6/include/python3.6m \ -D INCLUDE_DIRS2=~/.pyenv/versions/3.6.6/include/python3.6m \ -D PYTHON_PACKAGES_PATH=~/.pyenv/versions/3.6.6/lib/python3.6/site-packages \ -D PYTHON_NUMPY_INCLUDE_DIR=~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/numpy/core/include ..
ビルド開始(2時間以上かかる)
make -j4
インストール
sudo make install
再読込
sudo ldconfig
確認
python -m 'import cv2; print(cv2.__version__)'
おわりに
pyenvを使うと便利にPythonのバージョンを管理できますが、こういった時に厄介なもんです。
おそらく普通にpipからインストールしてしまい、pyenv側にシンボリックリンクを作るなどでも動くんじゃないかとは思います。
また、pyenvのバージョンの中にインストールされますので、pythonのバージョンを変えると再度入れ直さないといけないので要注意です。