OpenCV2.3.1をUbuntu11.10(64bit)にインストール
前置き
OpenCV 2 プログラミングブック OpenCV 2.2/2.3対応
- 作者: OpenCV 2 プログラミングブック制作チーム
- 出版社/メーカー: マイナビ
- 発売日: 2011/12/27
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 61回
- この商品を含むブログ (9件) を見る
しかしOpenCVのインストールでかなりハマってしまったので、手順のメモを書くことにした。
OSは、Ubuntu 11.10 (64bit)である。
ちなみにこの本、間違いが結構あって、正誤表はOpenCV 2プログラミングブック - サポートサイトにある。
何をインストールするか
画像処理ということで、当然Webカメラが欲しくなったので、
LOGICOOL ウェブカム HD画質 120万画素 C270
- 出版社/メーカー: Logicool(ロジクール)
- 発売日: 2010/08/20
- メディア: Personal Computers
- 購入: 21人 クリック: 267回
- この商品を含むブログ (21件) を見る
このカメラはドライバインストール不要で、UVCと言われるものらしい。
実は、
UVCのカメラ画像をOpenCVで操作(Windows Vista sp1) 涙目ブログ/ウェブリブログ
OpenCVを使って顔認識プログラムを作ってみた | ふじもんのブログ
などに、OpenCVはUVCに対応していないと書いてある。
しかし、
OpenCV で UVC(USB video device class)対応のカメラを使う | Moonmile Solutions Blog
を見ると、OpenCV2.3なら対応していると書いてある。
現在OpenCVの最新版は2.3.1であり、2.3で対応しているなら多分2.3.1でも対応しているはずなので、ここでは最新版の2.3.1をインストールすることを考える。
新しくインストールするなら最新版を入れるのは当然と思われるかもしれないが、aptで入手できるOpenCVは2.0をベースとしているらしい。
よって、最新版のソースをDLして自分でコンパイルする必要がある。
自分はまずaptで入手してしまってカメラが認識されずに困ってしまった。
ffmpeg
他サイトを見てソースからコンパイルしたとき、大体は上手くいくのだが、makeを実行したときに17%くらいのところでエラーになってしまった。
どうやら、cap_ffmpeg.cppをコンパイルするときにエラーになってしまっているらしい。
どう考えてもffmpegが悪い事をしている。残念ながら日本語のサイトにいい情報は見つからなかった。
これは、
Laz's Vision: OpenCV 2.3.1 on Ubuntu 10.10 or later
のコメントを見ることで解決した。
そこで同じようなエラーになっている人がいて、解決策としてURLが示されている。
A Comprehensive Guide to Installing and Configuring OpenCV 2.4.2 on Ubuntu - OzBotzOzBotz
OpenCV Installation Troubleshooting Guide - OzBotzOzBotz
に書いてあることが全てである。
ffmpegは現在最新版は0.10であるが、OpenCV2.3.1が対応しているバージョンは、ffmpeg0.8.xである。(ちなみに2.3以前は0.7.x)
もし新しいffmpegをインストールしてしまっているならばアンインストールして0.8.xをインストールする必要がある。
バージョンは、端末で
ffmpeg
を実行すれば見ることが出来る。
以下上のサイトに書いてある手順を書く。
インストール方法
ffmpegとx264をアンインストールする。(x264は意味があるか分からない)
sudo apt-get remove ffmpeg x264 libx264-dev
x264とffmpegの依存パッケージをインストールする。
sudo apt-get update sudo apt-get install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev
gstreamerをインストール
sudo apt-get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg
x264をDLして解凍してインストール(aptでもいい気がする)
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
からどれかを選んで(x264-snapshot-20110808-2245-stable.tar.bz2なら間違いない)
./configure --enable-static make sudo make install
ffmpegをDLしてインストール
http://ffmpeg.org/download.html
から FFmpeg 0.8.10 "Love" をDLして解凍して
./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab make sudo make install
その他いろいろインストール
sudo apt-get install libgtk2.0-0 libgtk2.0-dev libjpeg62 libjpeg62-dev libv4l-dev
OpenCV2.3.1をインストール
http://sourceforge.net/projects/opencvlibrary/files/ からOpenCV-2.3.1.tar.bz2をDLして解凍してインストール
mkdir release cd release cmake .. make sudo make install
makeでエラーが出ていなかったら成功。
cmakeのとき自分の環境では下のようになった。
-- GUI: -- GTK+ 2.x: YES -- GThread: YES -- -- Media I/O: -- ZLib: YES -- JPEG: TRUE -- PNG: TRUE -- TIFF: TRUE -- JPEG 2000: TRUE -- OpenEXR: YES -- OpenNI: NO -- OpenNI PrimeSensor Modules: NO -- XIMEA: NO -- -- Video I/O: -- DC1394 1.x: NO -- DC1394 2.x: NO -- FFMPEG: YES -- codec: YES -- format: YES -- util: YES -- swscale: YES -- gentoo-style: YES -- GStreamer: YES -- UniCap: NO -- PvAPI: NO -- V4L/V4L2: Using libv4l -- Xine: NO -- -- Other third-party libraries: -- Use IPP: NO -- Use TBB: YES -- Use ThreadingFramework: NO -- Use Cuda: NO -- Use Eigen: YES -- -- Interfaces: -- Python: YES -- Python interpreter: /usr/bin/python2.7 -B (ver 2.7) -- Python numpy: YES -- Java: NO -- -- Documentation: -- Sphinx: /usr/bin/sphinx-build (ver 1.0.7) -- PdfLaTeX compiler: /usr/bin/pdflatex -- Build Documentation: YES -- -- Tests and samples: -- Tests: YES -- Examples: YES -- -- Install path: /usr/local -- -- cvconfig.h is in: /home/it/OpenCV-2.3.1/release -- -----------------------------------------------------------------
パスの設定
~/.bashrcに
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
を追加して
source ~/.bashrc
動作確認
#include <iostream> #include "opencv/cv.h" #include "opencv/highgui.h" using namespace std; int main() { cv::VideoCapture cap(0); if (!cap.isOpened()) { cout << "カメラを開けない" << endl; return -1; } cv::namedWindow("camera", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO); while (1) { cv::Mat img; cap >> img; cv::imshow("camera", img); char ch = cv::waitKey(30); if ( ch == 27 ) break; // ESCで終了 } }
を作って、simplecapture.cppとする。
g++ simplecapture.cpp `pkg-config --libs --cflags opencv`
のようにコンパイルして./a.outを実行した結果カメラの映像がウィンドウに表示されたら成功。