2009/06/17

Ubuntu環境でのOpenCVとffmpeg


"Chris Powell Ubuntu Tattoo" by Myles Braithwaite
(全然関係ないですが、わざわざ刺青まで彫るなんてよっぽどUbuntuが好きなんですねー)

Ubuntu環境でOpenCVという、画像処理用ライブラリをインストールする際にすんごく苦労しましたので、一応書いておこうと思います。

実は、OpenCVは通常のレポジトリからapt-getでインストールすることができるのですが、それだとビデオ機能が追加されておらず、このままではビデオ機能を使うことが出来ないのです。そのためソースコードを引っ張ってきてconfigure->make->make installの流れでインストールしなければならないのかーめんどくさいなーと思って調べてみたら、どうやらそれ以前にffmpegを追加しなければならないことが判明しまして、しょうがなくffmpegを野良ビルドした後にさあインストールだという感じでmakeしたら、どうしてもcvcap_ffmpeg.cppでエラーが出て止まってしまう。悔しいのでソースコードを書き換えるなりパッチ当てるなりで努力するも、悉くエラーが出て止まってしまうので、さてどうしようか諦めようかとか思っていた最中に、この記事を発見。

Getting video i/o working with opencv and Ubuntu Jaunty (9.04)

要は

$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com cafc44ee7f39098ce6ec229cca70e6a9087475a0

で鍵を入手して、
/etc/apt/sources.listに

deb http://ppa.launchpad.net/gijzelaar/opencv/ubuntu jaunty main

を追記。リポジトリを追加してインストールするだけでビデオ機能が追加されたOpenCVがインストールできますよという話なのでした(*1)。同じ環境で困っている方は試しにやってみてはいかがでしょうか。

それにしても…
I was disappointed, crying, screaming, running around angry and banging my head against the wall when the video i/o functionality stopped working when I updated to the latest Ubuntu release (Jaunty).
本当に自分もそんな気分になりましたよ。本当にOpenCVのビルドには多くの人が苦労されているようで…

余談

一応そんなわけで解決はしたのですが、自分の環境では

#include "highgui.h"
CvCapture *src;
src = cvCreateFileCapture("file.avi");

のようなコードを記述しますと"test.avi"が読み込まれずsrcがNULLになってしまいます。でもなぜかPython上ですと

>>> from opencv import highgui
>>> src = highgui.cvCreateFileCapture("file.avi")
>>> src
<Swig Object of type 'CvCapture *' at 0x9904420>

となって、正常に読み込まれているんですよねー…どうせ遊びにしか使いませんし、python+ctypesの組み合わせでもいいかなとか考えるようになってきましたよ。

*1) 今までのことはすべて無視して大丈夫です。みたいな