gosoly

ゆっくりと趣味に浸る。

RaspberryPiのpyenv環境にOpenCVを入れる

DSCF1844

pyenvを使ってPythonを構築している場合に、OpenCVを使えるようにする備忘録。

ビルド中がめちゃくちゃ時間かかるので寝る前にやっておいて起きて終わってるのを確認するのが吉。

ちなみにpyenv使わない場合はこちらの記事が一番簡単な導入方法だと思います。

qiita.com

事前準備

パッケージの更新

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のバージョンを変えると再度入れ直さないといけないので要注意です。