漆黒な技術メモ

管理人が必要に応じて自分のメモを好き勝手に投下するたまり場的ブログ

【ちょっと技術的なことAdventCalender】OpenCV3の環境構築について整理してみた

この記事はちょっと技術的なことAdventCalenderの5日目です

こんばんは。
しばらく書いてなかったのでAdventCalendarをきっかけに久々に更新を頑張ろうと思ってます。はい
でも一人で24日連続はさすがに無理なのでQiita側で記事を書いている友人と共同で頑張って埋めようと思ってます。
友人はあらゆる言語について少しずつ触っていくことをやるみたいです。僕は今まで書こうと思ったけどここに書いてなかったことをジャンル関係なしにブッ込もうと思います。
というわけで、ちょっと技術的なことAdventCalender見てやってください。

そんなこんなで今日の内容にいってみたいと思います。

OpenCVの環境構築で毎度死ぬ話

画像処理エンジンとしてこの上なく有名なOpenCVだが、新しいPCを買ったなどの理由で環境構築をしようとすると毎度躓く。
こいつめ…特にC++の場合はソースコンパイルして突っ込むしかないから本当に厄介だ。

そんなわけで、今回は自分へのメモを兼ねて(いつもそうなのだが)、OpenCV3の環境構築をおさらいしようと思う。
ちなみに今回の環境はUbuntu14.04 LTS (64bit)である。

環境構築 (Python編)

Pythonはフィーリングプログラミング言語と研究室内で勝手に呼んでいるだけあって、結構あらゆることが簡単にできるようになっている。
C++ではクソみたいに苦労したOpenCV3のインストールも、Pythonの仮想環境(Conda)上で動かせるようにするだけならだいぶ簡単だ。

anacondaのインストールと仮想環境のセットアップ

https://www.continuum.io/downloadsからanaconda本体をダウンロードしてくる。
ダウンロードが終わればシェルを実行して

# if you use python 3.5
bash Anaconda3-4.2.0-Linux-x86_64.sh 
# if you use python 2.7
bash Anaconda2-4.2.0-Linux-x86_64.sh

で完了だ。

続いて仮想環境を構築する。ENV_NAMEは仮想環境の名前だ

$ conda create -n ENV_NAME python=2.7 anaconda
# enter virtual environment
$ source activate ENV_NAME
$ python -m pip install --upgrade pip

OpenCVインストール

$ conda install -c anaconda numpy=1.11.1
$ conda install -c menpo opencv3=3.1.0

一瞬である。

構築の確認

import numpy as np
import cv2
cv2.__version__

これの結果が3.1.0と出てきたら成功だ。

環境構築 (C++編)

どちらかというと本番はこっち、C++Pythonほど便利な環境やツールが残念ながらそろっていない(まあかなり低レベルな言語だし)

鬼のインストールシェル

というわけで頑張ってwgetでソースを落としコンパイルするということになる。
インストール先ディレクトリは、標準の/usr/local/libである。

$ cd /usr/local/lib/
$ ls
$ mkdir opencv
$ cd opencv/
$ wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.1.0/opencv-3.1.0.zip
$ unzip opencv-3.1.0.zip
$ sudo apt-get update
$ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev checkinstall
$ ls
$ cd opencv-3.1.0/
$ mkdir build
$ cd build/
$ #インストール先にディレクトリを変更する場合はCMAKE_INSTALL_PREFIXの値を変更する
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D WITH_CUDA=OFF -D BUILD_opencv_python2=ON 
$ #/usr/local下以外にインストールするときは以下のパスを通す
$ # PKG_CONFIG_PATH=$HOME/local/opencvlibrary/lib/pkgconfig:$PKG_CONFIG_PATH
$ # export PKG_CONFIG_PATH
$ # LD_LIBRARY_PATH=$HOME/local/opencvlibrary/lib:$LD_LIBRARY_PATH
$ # export LD_LIBRARY_PATH
$ #
$ ~/.profile
$ vi ~/.profile
$ #-jは並行オプションなので数字はコア数に合わせる
$ make -j4
$ sudo make install
$ source ~/.profile
$  sudo checkinstall
$ #ディレクトリは適宜変更する
$  sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
$  sudo ldconfig
$  sudo cp 3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.a /usr/local/lib
$  sudo cp ../3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.a /usr/local/lib

見ただけで死にたくなるようなシェルの量である…こんなん覚えるのムリ…って感じである。
ちなみに、cmakeの部分で"WITH_CUDA=OFF"オプションを付けているが、これはCUDA側のバージョンが古いと(具体的な数字は失念してしまった…)CUDA側のバグでインストールできなくなってしまうので、CUDAを使う予定のない方は、なるべく切っておくことをお勧めする。使う方はCUDAを最新版にアップデートしてからインストールした方がよい。

構築確認

以下のソースをコンパイル、実行する

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
  cout << "OpenCV version : " << CV_VERSION << endl;
  cout << "Major version : " << CV_MAJOR_VERSION << endl;
  cout << "Minor version : " << CV_MINOR_VERSION << endl;
  cout << "Subminor version : " << CV_SUBMINOR_VERSION << endl;
}
$  g++ -ggdb `pkg-config --cflags opencv` -o `basename testcv.cpp .cpp` testcv.cpp `pkg-config --libs opencv`
$ ./testcv

今日はこんなところでおしまい…!