ubuntu10.10でopencv-androidのサンプルコンパイル

まずは・・・

opencvandroidで使うためには

http://opencv.willowgarage.com/wiki/Android

をチェック。
このあとの説明はほぼすべてここの説明の焼き直しです。
あとsdkはもう既にインストール済みであるという前提です。
パスもしっかり通してあるていでよろ。

$ cat ~/.profile |tail-2
PATH="$HOME/src/android-sdk-linux_x86/tools:$PATH"
PATH="$HOME/src/android-sdk-linux_x86/platform-tools:$PATH"
$ source ~/.profile

手っ取り早くopencvのサンプルアプリをインストール。

手っ取り早くサンプルをインストールして見たいなら

http://code.google.com/p/android-opencv/downloads/detail?name=CVCamera.0.7.apk

android端末のブラウザでダウンロードしてインストールするか、もしくはandroidをつないでコマンドライン上で

$ adb install CVCamera.0.7.apk

を実行

あと、このadbからのインストールの場合には、usbドライバの設定が必要。
ubuntu上でusbドライバ設定するには
HTC Desire HDなどのandroidをつないだ状態で、

$ lsusb
Bus 002 Device 004: ID 056e:0035 Elecom Co., Ltd 
Bus 002 Device 003: ID 413c:2003 Dell Computer Corp. Keyboard
Bus 002 Device 002: ID 8087:0020  
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0bb4:0ca2 High Tech Computer Corp. 
Bus 001 Device 002: ID 8087:0020  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ sudo emacs /etc/udev/rules.d/51-android.rules
$ cat /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

0bb4がベンダーであるHTCを意味しており、0ca2はHTC Desire HDといった製品を意味するはず。
ベンダー名"HTC"を許可しますよという設定だと勝手に解釈してる。

ちなみに、ここを参考にしました。
http://y-anz-m.blogspot.com/2010/03/androidubuntu-xperia.html

この後に

$ adb kill-server ; sudo /ほにゃらら/android-sdk-linux_x86/tools/adb start-server

を実行。これでデバイスをadbで認識するので、adb installなどできます。
いちいち打つのが面倒なので、~/.bash_aliasesにaliasすることをおすすめします。次のような感じで。

$ emacs ~/.bash_aliases
$ source ~/.bash_aliases
$ cat ~/.bash_aliases
alias adbconnect='adb kill-server;sudo /ほにゃらら/android-sdk-linux_x86/platform-tools/adb start-server
$ adbconnect # do it

opencvの取得とコンパイル

いよいよ本題の自分でコンパイルについて。
subversionで最新版のopencvをとってきます。

$ svn co https://code.ros.org/svn/opencv/trunk/opencv/
$ cd opencv
$ mkdir release
$ cd release
$ cmake ../
$ make; sudo make install

cmakeをする際に必要なモジュールがなかったら、apt-getでとってきてくらさい。例えば、GTKだったら

$ sudo apt-get install libgtk2.0-dev

とか。

opencvandroidコンパイル

まずndkの改造版をhttp://www.crystax.net/android/ndk-r4.phpからとってきてください。

$ cd ~
$ wget "http://www.crystax.net/data/android-ndk-r4-linux-x86-crystax-4.tar.bz2"
$ tar xvf android-ndk-r4-linux-x86-crystax-4.tar.bz2 

ここで重要なのはndkをホームディレクトリに解凍することです。
後々のパスの設定で$HOME/android-ndk-r4-crystaxが適用されます。
ちょっとキモいですが、文句はopencvの著者にどうぞ。

さて、buildです。
あ、その前にswigはインストールしておいてくらさい。
staticライブラリのビルド。

$ cd opencv/android
$ mkdir build
$ make

次にandroid-jniのビルド。
これが後のプロジェクトへの橋渡し役になります。

$ cd opencv/android/android-jni
$ make 
ERROR local environement not setup! try:
gedit local.env.mk
Makefile:12: *** Please setup the local.env.mk - the default was just created'.  中止.
$ make
$ sh ./project_create.sh
$ ant compile

一回目のmakeは気にせずに、2回目のmakeを実行。
sh project_create.sh
で次のようにうまくいかない場合は、

Error: The project either has no target set or the target is invalid.
Please provide a --target to the 'android update' command.
$ android update project --name android-opencv --path . --target 2

などとターゲット指定。
ant compileで

BUILD FAILED
<android-sdk-root>\tools\ant\lib_rules.xml:121: Refrence android.libraries.src not found

になった場合はbuild.xmlを修正。

$ emacs build.xml
$ diff build.xml build.xml~ -u
--- build.xml	2011-02-08 02:28:04.329244958 +0900
+++ build.xml~	2011-02-08 02:19:18.396426362 +0900
@@ -80,6 +80,5 @@
              - customize to your needs.
     -->
     <setup />
-    <path id="android.libraries.src"><path refid="project.libraries.src" /></path>
-    <path id="android.libraries.jars"><path refid="project.libraries.jars" /></path>
+
 </project>

といった感じで、setupタグの終わりにpathを2行挿入。
またコンパイルは、gcj-jdkとopen-jdkなどが入っていて、sun-java6-jdkを入ってないケースでもエラーになる。
その場合、

$ sudo apt-get --purge remove gcj-jdk
$ #その他いろいろ削除
$ sudo apt-get autoremove
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid parter"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

などでsun-java6-jdkを入れると通る。

Calibrationサンプルのインストール

$ cd opencv/android/apps/Calibration
$ sh project_create.sh # if you fail, set target such as: android update project --name CVCamera --path . --target 2
$ ant debug
$ ant install

sh project_create.shでだめだったらまたターゲットを指定して実行。
ant installの際には実機デバイスをつないでおく必要がある。
これでCalibrationがインストールされるはず。

CVCameraサンプルのインストール

Calibrationとほぼ同様。

$ cv opencv/android/apps/CVCamera
$ sh build.sh
$ make
$ sh project_create.sh # if you fail, set tartget such as: android update project --name CVCamera --path . --target 2
$ ant debug
$ ant install

opencvアプリの自作

一番したいことはこれですが、正直結構めんどいです。
得にswigの設定とかだるすぎでし。
テンプレートはopencv/android/apps/camera_templateにあります。
気が向いたらそのうち書くかも。