BeagleBoard-xM + Ubuntu10.10(Maverick) にOpenCVを導入

BeagleBoardOpenCVを導入してみました。


まずは関係するライブラリ群とOpenCVのパッケージをインストールします。


% sudo apt-get update

% sudo apt-get install ffmpeg
% sudo apt-get install libgtk2.0-dev
% sudo apt-get install libavcodec-dev
% sudo apt-get install libavformat-dev
% sudo apt-get install libjpeg62-dev
% sudo apt-get install libtiff4-dev
% sudo apt-get install libgif-dev

% sudo apt-get install libcv-dev
% sudo apt-get install libcvaux-dev
% sudo apt-get install libhighgui-dev
% sudo apt-get install opencv-doc

OpenCVのバージョンは2.1がインストールされたと思います。


しかし、↓のUSBカメラの画像を表示するサンプルプログラムをコンパイルして実行したところ、画像が崩れてしまっていました。
http://opencv.jp/sample/video_io.html


以前遭遇した、luvcviewの表示が崩れてしまい、「-f yuv」を付けると改善した現象と同じ問題のようです。
おそらく、USBカメラ(LOGICOOL C905m)のMJPEGとOSのJPEGライブラリの相性(?)の問題ではないかと思います。


↓など、いくつかの情報によると、OpenCVで画像形式の決定順序がMJPGがYUYVより優先になっているので、優先順位を変更して強制的にYUYVを使用するようにしてあげると改善されるようです。
http://www.mori-soft.com/index.php?option=com_content&view=article&id=88:opencv-&catid=1:opencv&Itemid=6


というわけで、OpenCVのパッケージはいったんアンインストールして、ソースからビルドしてインストールしなおします。


OpenCVのパッケージをアンインストールします。


% sudo apt-get remove libcv-dev


OpenCVのビルドに必要になるcmakeをインストールします。


% sudo apt-get install cmake


作業時の最新だったOpenCV2.2のソースからビルドしようとしましたが、いろいろとエラーが出てうまくいかなかった(最新のパッチを当てるか、SVNから最新版をとってくれば良いのかもしれません。)ので、2.3RCをインストールしました。(7/4にRCがとれた2.3の正式版がリリースされたようです)


2.3RC(2011/6/21版)のソース(OpenCV-2.3.0rc.tar.bz2)をダウンロード後、以下の手順でコンパイル前のところまで行います。


% mkdir opencv
% mv OpenCV-2.3.0rc.tar.bz2 opencv
% cd opencv
% tar xjf OpenCV-2.3.0rc.tar.bz2
% mkdir release
% cd release
% cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_PYTHON_SUPPORT=ON ../OpenCV-2.3.0


MJPEGよりもYUYVの優先度を上げるため、ソースを変更します。
OpenCV-2.3.0/modules/highgui/src/cap_v4l.cppのautosetup_capture_mode_v4l2()関数を変更します。


if (try_palette_v4l2(capture, V4L2_PIX_FMT_YUYV) == 0)
{
capture->palette = PALETTE_YUYV;
}
else
の部分を
#ifdef HAVE_JPEG
の前へ移動します。
詳しくは、↓を参照してください。
http://www.mori-soft.com/index.php?option=com_content&view=article&id=88:opencv-&catid=1:opencv&Itemid=6


コンパイル開始。


% make -j 2


インストールします。


% sudo make install
% sudo ldconfig


先ほどのカメラのサンプルプログラムをコンパイルし直して、正常に動くことを確認しました。
コンパイル方法:


% gcc -o opencv opencv.c -I/usr/local/include/opencv -lopencv_core -lopencv_highgui -lopencv_ml


続いて、OpenCVに付属のサンプルをビルドします。


% cd OpenCV-2.3.0/samples/c
% sh build_all.sh


サンプルの中にある顔認識のサンプル(facedetect)を動かしてみます。


% ./facedetect --cascade="../../data/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="../../data/haarcascades/haarcascade_eye.xml" --scale=1.3

1フレームの処理に2.5秒前後かかりますが、なんとか動きました。