OpenCV 2.4.9 を CentOS6.5 にインストール

B4がT大の院生からもらったらしきソースコードコンパイルしようとするも失敗。内部でMatlabのヘッダファイルとOpenCVを呼び出しているという謎仕様。インストール用のメモもなにもない。外部仕様くらい書いてから配布しろよ。

osgからはとりあえずコードを動かせという指示があったけど・・・。一ヶ月以上前の指示だった気がするけど。プラットフォーム、必要なtoolbox, 依存ライブラリを確認するように伝えたのにぜんぜん伝えにこないし、後だしでopencvが必要とか言われた。仕方なく、今更になって手伝う。コンパイルのために、MATLABサーバにOpencv2.4.9をインストール。TBBも使えるようにした。以下は手順。gcc/g++は4.4.7.


まず、必要なパッケージをインストール。

(#yum install gcc)
(#yum install g++)
(#yum install python)
(#yum install libjpeg-devel)
(#yum install libtiff-devel)
#yum install jasper-devel
(#yum install libpng-devel)
(#yum install zlib-devel)
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# yum install cmake28
# yum -y groupinstall "Development Tools"
# yum -y install gtk2-devel
# yum install jasper-devel
# yum install totem
# yum install xine
# yum install unicap-devel


ffmpegをインストールするため、RPMForgeリポジトリをインストール。

# yum install yum-plugin-priorities
# emacs /etc/yum.repos.d/CentOS-Base.repo

[base],[updates]および[extras]のそれぞれの一行下に以下を追加。

priority=1
# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# yum -y update rpmforge-release

[rpmforge], [rpmforge-extras]および[rpmforge-testing]の
(enabled = 1)を(enabled = 0)に修正

# emacs /etc/yum.repos.d/rpmforge.repo

ffmpegをインストール

# yum install --enablerepo=rpmforge ffmpeg-devel

gstreamerも必要らしいので

# yum install --enablerepo=rpmforge gstreamer*

Intel Threading Building Blocks(TBB)はせめて使える様にしておく。CUDAはCUDA toolkitを更新するのが手間なので今回は対応しない。

$ wget http://threadingbuildingblocks.org/sites/default/files/software_releases/linux/tbb43_20140724oss_src.tgz
$ tar -xzf tbb43_20140724oss_src.tgz
$ su -
# mkdir -p /opt/intel/tbb
# mv ./tbb43_20140724oss /opt/intel/tbb
# cd /opt/intel/tbb/tbb41_20130314oss/bin/
# emacs ./tbbvars.sh

 emacs で以下の部分を変更
 変更前 export TBBROOT=SUBSTITUTE_INSTALL_DIR_HERE
 変更後 export TBBROOT=/opt/intel/tbb/tbb43_20140724oss/ 	 

$ source ./tbbvars.sh intel64
$ echo $TBBROOT	 

最後のエコーで /opt/intel/tbb/tbb43_20140724oss/ が表示されればおk。



OpenCV for Linux をここ(http://opencv.org/downloads.html)からダウンロードし、作業ディレクトリで展開。

$ unzip opencv-2.4.9.zip
$ cd opencv-2.4.9
$ mkdir release 
$ cd release 
$ cmake28 CMakeLists.txt ../
$ cmake28 -D WITH_TBB=ON -D TBB_LIB_DIR=`echo $TBBROOT`/lib -D TBB_INCLUDE_DIR=`echo $TBBROOT`/include -D BUILD_EXAMPLES=YES -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_NEW_PYTHON_SUPPORT=NO -D  ../
$ make
$ su -
  中略
# make install
# ldconfig


で終わりの予定だったのだが、makeeの17%くらいでエラーはかれた。
エラーメッセージによれば、ffmpegのライブラリにある関数をコールしようとするもそんな関数定義されていないとのこと。なんでじゃ、と思ってらrpmforgeの提供するffmpegのバージョンが古すぎて(0.6.5)、opencvは古いffmpegをフォローしないとのこと。仕方がないので, ffmpegをソースからビルドすることに。で、ffmpegのビルドのために別のライブラリが必要なのでひとつずつインストール。

が、ここでも問題が。大学のネットワークがgitプロトコルのポートを塞いでいるらしくディレクトリのcloneができない。仕方なく、自宅のネットワークから必要ファイルをコピー、コピーしたファイルらを圧縮してサーバにアップロードし直してからビルドした。ここ(https://trac.ffmpeg.org/wiki/CompilationGuide/Centos)を参考にした。

$ mkdir tmp_ffmpeg
$ cd tmp_ffmepg
$ su -
# yum install --enablerepo=epel yasm
# yum install freetype-devel
# yum install speex-devel
$ git clone --depth 1 git://git.videolan.org/x264
$ cd x264
$ ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
$ make
$ su -
# make install
# exit
$ cd ../
$ git clone --depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac
$ cd fdk-aac
$ autoreconf -fiv
$ ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
$ make
# make install
$ curl -L -O http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
$ tar xzvf lame-3.99.5.tar.gz
$ cd lame-3.99.5
$ ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
$ make
$ su -
# make install
$ curl -O http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz
$ tar xzvf opus-1.1.tar.gz
$ cd opus-1.1
$ ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
$ make
$ su -
# make install
$ curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
$ tar xzvf libogg-1.3.1.tar.gz
$ cd libogg-1.3.1
$ ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
$ make
$ su -
# make install
$ curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz
$ tar xzvf libvorbis-1.3.4.tar.gz
$ cd libvorbis-1.3.4
$ ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared
$ make
$ su -
# make install
$ cd ~/ffmpeg_sources
$ git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
$ cd libvpx
$ ./configure --prefix="$HOME/ffmpeg_build" --disable-examples
$ make
$ su -
# make install
cd ~/ffmpeg_sources
curl -O http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz
tar xzvf libtheora-1.1.1.tar.gz
cd libtheora-1.1.1
./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-examples --disable-shared --disable-sdltest --disable-vorbistest
make
make install

最後にffmpegのビルド・インストール。

$ git clone --depth 1 git://source.ffmpeg.org/ffmpeg
$ cd ffmpeg
$ PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
$ export PKG_CONFIG_PATH
$ ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264
$ make
$ su -
# make install
# hash -r
# . ~/.bash_profile

で、OpenCVのreleaseディレクトリを削除してもう一度releaseディレクトリを作成。makeし直したら今度は問題無く通った。あとは環境変数とかの設定。