可変ブログ

色々メモとか。とりあえず自分が分かるように。その後、なるべく人が見て分かるように。可変。

UbuntuにOpenCV3.2とcontribをインストールする。

まとめはしましたが、まだ試してみていないのでハマる箇所とか抜けがあるかもしれません。


環境



流れ

  • Ubuntuのパッケージを最新にする。
  • gitとCmakeをインストールする。
  • 依存関係をインストールする。
  • OpenCVのソースとcontribのソースをダウンロードする。
  • Cmakeを使って自分の環境に合ったソースを生成する。
  • ソースをビルドする。
  • ビルドしてできたバイナリとヘッダを適切な場所に配置する。
  • 配置したバイナリとヘッダのパスを通す。



Ubuntuのパッケージを最新にする。

書きコマンドでUbuntuに入っているパッケージを最新にします。

sudo apt-get update
sudo apt-get upgrade



gitとCmakeをインストールする。

githubからソースをダウンロードするgitと、自分の環境に合ったソースを生成するCmakeをインストールします。

sudo apt-get install git
sudo apt-get install cmake



依存関係をインストールする。

OpenCVのビルドに必要なライブラリなどをインストールします。
何が必要でどれをインストールしたらいいかは、OpenCVのドキュメントのチュートリアルUbuntuのヘルプに書いてあります。
2つのURLで書いてあることが違うのですがどっちを信用すればいいかは分かりません。
他にも人によって若干違う(?)ような感じで、みなさんどこを参考にしているのでしょうか。違いは何なんですかね。
今回はOpenCVのドキュメントに従ってみます。

【参考URL】
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

1行目2行目は必須。3行目はオプションみたいです。

ちなみにUbuntuのヘルプに従う場合は以下。-qqはエラー以外を表示しないというオプションです。

sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg cmake qt5-default checkinstall

参考にさせていただた記事に従うと以下になります。

sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip



ソースをダウンロードする。

【参考URL】

インストールしたgitを使ってOpenCVのソースをダウンロードします。
ダウンロードする場所はどこでもいいのですが、今回はホーム直下にSourcesというディレクトリを作ってその中にダウンロードします。
下記のコマンドでホームに移動してSourcesというディレクトリを作成します

cd ~
mkdir Sources

できたディレクトリに移動してOpenCVのソースとcontribのソースをダウンロードする。

cd Sources
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

ソースのダウンロードはgitを使わなくても公式サイトからダウンロードしたり、githubのリリースのところからダウンロードしてもたぶん大丈夫です。
違いは、gitは最新バージョンで、公式サイトやgithubのリリースのところは安定バージョンがダウンロードできるってだけだと思います。
ダウンロード速度は公式サイトやgithubのリリースところからダウンロードしたほうが速いっぽいです。


Cmakeを使って自分の環境に合ったソースを生成する。

【参考URL】

まずダウンロードしたソースのディレクトリに移動してビルド用のディレクトリを作り、さらにそのディレクトリに移動します。

cd opencv
mkdir build
cd build

次に、Cmakeを使って自分の環境に合ったソースを生成します。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/Sources/opencv_contrib/modules ..

一つ目のオプションはリリースモードを選択しています。
二つ目のオプションはインストールする場所を選択しています。
三つ目のオプションはOpenCVのcontribの場所を指定しています。gitでダウンロードしたopencv_contribの中のmodulesディレクトリを指定しましょう。
他にも必要ならば『-D WITH_CUDA=ON』や『-D WITH_TBB=ON』『-D WITH_FFMPEG=ON』などを追加してください。
何が設定できるかはCMakeLists.txtを見ればいいっぽいです。


ソースをビルドする。

make -j $(nproc)



ビルドしてできたバイナリとヘッダを適切な場所に配置する。

このコマンドでビルドされたバイナリとヘッダが共有ライブラリディレクトリにコピーされます。(たぶん)

sudo make install



配置したバイナリとヘッダを反映させる。

共有ライブラリにコピーされただけでは反映されないので、
このコマンドで共有ライブラリにコピーされたバイナリとヘッダを反映します。(たぶん)

sudo ldconfig



最後に

これで、OpenCVが使えるようになったはずです。
PythonC++で試してみましょう。

また、この記事に書いてあること以外に、
CMakeを使う前にこのコマンドを入力しないとエラーがでるかもしれないとか、

export PYTHON_INCLUDE_DIRS="/usr/include/python2.7"
export PYTHON_LIBRARYS="/usr/lib/x86_64-linux-gnu/libpython2.7.so"

最後に以下のコマンドが必要かもしれないと、参考にさせていただいた記事にありました。
エラーが出てしまった人は試してみてください。

sudo cp ~/opencv-3.1.0/build/lib/cv2.so /usr/local/lib/python2.7/site-packages/
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'

ちなみに、OpenCVを使うために必要なものは make install コマンドで共有ライブラリにコピーされたはずなので、
gitでダウンロードしたソース(つまりこの記事の中でいうと、Sourcesディレクトリの中身)は削除しても大丈夫なはずです。(たぶん)
また、アンインストールの方法は共有ライブラリにコピーされたバイナリとヘッダを削除するだけ?なのかな?