2013年11月19日火曜日

UBUNTUにOpenCV2.2を入れたい。

OpenCV installing for Ubuntu 12.04 LTS


OpenCVをUbuntuにいれよう。

取りあえず仕事でUBUNTUにOpenCV、それもバージョン2.2を入れることに。
ちなみに表題通り、Ubuntuのバージョンは12.04LTS。
どうやらapt-getでも入れられるようだが、現在の最新は2.4.7なので、よくわからないで入れるとそれこそわけわかめになっても困るので、パーッケージをビルドして入れることにする。

ビルドの下準備

一先ずOpenCVのGithubから、OpenCVの圧縮ファイル(OpenCV-2.2.0.tar.bz2)を拾ってくる。
適当なディレクトリ(今回は/home/OpenCV)にコピーして、

tar xvfj OpenCV-2.2.0.tar.bz2

で解凍。
これで/home/USERNAME/OpenCV/OpenCV-2.2.0にディレクトリが出来ている。
次いで、なんかcmakeなるものが必要らしいので、

sudo apt-get install cmake  
sudo apt-get install cmake-curses-gui

で入れておくらしい。下段のはGUIでいろいろビルド設定ができるらしいが、今回は良くわからんので割愛。

参考ccmakeのすすめ

さあビルド

とりあえず↑のディレクトリ(/home/USERNAME/OpenCV/OpenCV-2.2.0)にcdで移してから、

cmake .

でなにやらビルドの設定ファイルを吐き出すらしい。
ここで注意したいのは、“cmake”と”.”の間には半角スペースが必要だということだ。
これに気付くのに結構かかった。
そんで

make

する。これでようやくビルドができ……ない!?

ビルドできない原因を探す

よくわからないエラーが山のように吐かれる。一応エラー数は2になっていたが、CUIで文字列を立て並べられると反射的にやめたくなってくる。
とりあえずエラー内容をさかのぼりにらめっこすると、なにやら

/home/*USERNAME*/OpenCV/OpenCV-2.2.0/modules/core/include/opencv2/core/core.hpp  

エラー:'ptrdiff_t' does not name a type

が出ている。これでググると英語のページがヒット。どうやらOpenCVのバグらしい。マジかよ。

参考Ubuntu_opencv_Bug

↑のページに書いてある場合とは若干違うようだが、例にならってエラーを吐いているcore.hpp

#include <stddef.h>

を足すといいらしい。
これでビルドが進むハズ。

やはり世の中うまくはいかない

案の定エラーを吐く。ただし前回よりは進み、日本語の警告文が増えてきたので前身はしているはずだ。
さあて次のエラーは何かと言うと、

/home/*USERNAME*/OpenCV/OpenCV-2.2.0/modules/hightgui/src/cap_v4l.cpp  

致命的なエラー:linux videodev.h:そのようなファイルやディレクトリはありません

だと。
ほう、致命的なエラーとな。   しかもさっきと様相が違う。んで例のごとくググれば、どうやら最近のLinux系には無いヘッダファイルらしい。(参考
一応videodev2.hなるものはあるらしいけど、どうにも色々面倒そう。
とサーフィンしていると、なんと公式でリファレンスされているではないか。

参考Ubuntu11.04でOpenCV2.2をコンパイル

これによれば、どうやらV4Lという機能を切ればいいっぽい。
ここでようやく活躍するよccmakeが!
使い方はcmakeと同様に、そのディレクトリまで行って

ccmake .

するだけ。すると何やらON、OFFが右側に書かれたテーブルが出てくるので、カーソルキーで左側に

WITH_V4L

と書かれた場所を探しだし、EnterでOFFにする。cを押してConfigrationしたあと、qでccmakeを終了し、再度make

戦いは終結へ

できた。ようやくビルドできた。
ここまで苦節数時間。我ながらお疲れ様である。
とりあえず今日はここまででどっと疲れたので、後始末だけを書いて締めにしよう。
ここまで来たらあとは

sudo make install  
sudo ldconfig  

をして終了らしい。なにをしているのかはさっぱりだが、ひとまずはこれでOpenCVが入ったことになるらしい。
これらがきちんとできているかはまだなんとも言えないが、とりあえずこれでよしとしよう。
おそらくまた戦うことになるのだろうが……ひとまずの安息に興じよう。

全体参考