157 lines
6.1 KiB
Plaintext
157 lines
6.1 KiB
Plaintext
|
= Android =
|
||
|
Android is awesome, and so is OpenCV, so wouldn't it be awesomer if they could work together? Well they can, and its now officially supported in opencv trunk.
|
||
|
= quick ubuntu opencv static libs build =
|
||
|
* install swig {{{sudo apt-get install swig}}}
|
||
|
* unzip the crystax ndk r4 to your home directory http://www.crystax.net/android/ndk-r4.php
|
||
|
* svn up your opencv - from https://code.ros.org/svn/opencv/trunk/opencv
|
||
|
{{{
|
||
|
cd opencv/android
|
||
|
mkdir build
|
||
|
cd build
|
||
|
cmake ..
|
||
|
make
|
||
|
}}}
|
||
|
= Prerequisites =
|
||
|
* swig 1.3 - stable version in your package manager or from cygwin or from http://swig.org/
|
||
|
* crystax ndk r4 - http://www.crystax.net/android/ndk-r4.php - unzip/untar to your home directory for easy cmake locating
|
||
|
* android sdk latest - http://developer.android.com/sdk/index.html
|
||
|
* ant build system - for compiling android apps on command line
|
||
|
* (optional) eclipse android sdk adt plugin and eclipse cdt http://developer.android.com/sdk/eclipse-adt.html
|
||
|
* latest code from opencv svn trunk - from https://code.ros.org/svn/opencv/trunk/opencv
|
||
|
= android ndk =
|
||
|
This will not work with the official release of the android ndk.
|
||
|
The official android ndk does not support c++ concepts fully like RTTI, exceptions, and most of the stl.
|
||
|
Make sure you use the modified android ndk from crystax available at http://www.crystax.net/android/ndk-r4.php
|
||
|
|
||
|
The android ndk, now referred to as the ndk, is the gcc toolchain for android, and is what creates the shared
|
||
|
libraries for android that are loadable by android apps through a the Java Native Interface(JNI)
|
||
|
|
||
|
Recommended install of the ndk is to unzip it to your home directory
|
||
|
|
||
|
For example this is what mine looks like:
|
||
|
{{{
|
||
|
erublee@bde:~/android-ndk-r4-crystax$ ls
|
||
|
build docs GNUmakefile ndk-build ndk-gdb README.TXT samples sources
|
||
|
}}}
|
||
|
|
||
|
= Android SDK =
|
||
|
Please read the very well documented android sdk getting started instructions - http://developer.android.com/sdk/index.html and at least build and install a hello world app on your Android phone.
|
||
|
|
||
|
== Android SDK tips ==
|
||
|
I always add the android sdk tools directory to my path so i can run the adb from any where.
|
||
|
|
||
|
On ubuntu, add the following to your {{{~/.bashrc}}}
|
||
|
{{{
|
||
|
export PATH=~/android-sdk-linux_x86/tools:$PATH
|
||
|
}}}
|
||
|
|
||
|
Install ant so that you can build from command line.
|
||
|
|
||
|
Make sure your udev permissions are set for usb debug and that the phone itself is set to allow debugging
|
||
|
http://developer.android.com/guide/developing/device.html#setting-up
|
||
|
|
||
|
Nexus one users on ubuntu lucid should have the following udev file:
|
||
|
|
||
|
{{{
|
||
|
/etc/udev/rules.d/51-android.rules
|
||
|
SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
|
||
|
}}}
|
||
|
|
||
|
see the following blog post on why http://alan.lamielle.net/2010/01/22/nexus-one-usb-in-ubuntu-9-10
|
||
|
|
||
|
= How and What =
|
||
|
The android port involves high jacking the existing cmake build files and replacing the define_opencv_module with android specific build commands.
|
||
|
|
||
|
In particular the cmake based build creates android ndk build files and calls the android ndk to build opencv.
|
||
|
|
||
|
== OpenCV static libs ==
|
||
|
The main cmake build of opencv generates a static lib for each module and some of the 3rdparty libraries. These can then be linked against in your own android projects.
|
||
|
|
||
|
the cmake build will also generate an android-opencv.mk file in the build folder. Include this file in your Android.mk files to link against the static libs.
|
||
|
|
||
|
this would go in your Android.mk file. See the docs in the ndk for an explanation of LOCAL_LDLIBS and LOCAL_C_INCLUDES.
|
||
|
{{{
|
||
|
#define OPENCV_INCLUDES and OPENCV_LIBS
|
||
|
include $(PATH_TO_OPENCV_ANDROID_BUILD)/android-opencv.mk
|
||
|
|
||
|
LOCAL_LDLIBS += $(OPENCV_LIBS)
|
||
|
|
||
|
LOCAL_C_INCLUDES += $(OPENCV_INCLUDES)
|
||
|
}}}
|
||
|
== OpenCV shared library ==
|
||
|
There is an attempt at a library that is more generally useful for android that could also be linked against in your on projects. This project is under
|
||
|
opencv/android/android-jni
|
||
|
|
||
|
This uses swig to expose some functions to java. Also it implements a live camera preview interface, so that you can have access to the Android camera for live vision apps.
|
||
|
|
||
|
== Apps ==
|
||
|
A few sample apps that use the library are under opencv/android/apps
|
||
|
* CVCamera is a complete example that uses the opencv static libs and the android-jni project
|
||
|
* Calibration is a stand alone camera calibration app for your Android that is pure java and links against the android-jni project - use this app to make a camera.yml calibration file in your sdcard's home directory
|
||
|
* more to come ...
|
||
|
= steps =
|
||
|
=== Static libs ===
|
||
|
{{{
|
||
|
cd opencv/android
|
||
|
mkdir build
|
||
|
cd build
|
||
|
cmake ..
|
||
|
make
|
||
|
}}}
|
||
|
this may take a while
|
||
|
=== android-jni ===
|
||
|
After the static libs are built, run make in the android-jni folder
|
||
|
{{{
|
||
|
cd opencv/android/android-jni
|
||
|
make
|
||
|
}}}
|
||
|
That creates the swig wrappers and compiles the shared library.
|
||
|
|
||
|
now run the ant based java build
|
||
|
{{{
|
||
|
sh ./project_create.sh
|
||
|
ant debug
|
||
|
}}}
|
||
|
|
||
|
Now you're ready to use it in a sample
|
||
|
=== CVCamera ===
|
||
|
{{{
|
||
|
cd opencv/android/apps/CVCamera
|
||
|
sh build.sh
|
||
|
}}}
|
||
|
That builds the swig wrappers and shared library.
|
||
|
|
||
|
Build the android apk ( the thing that gets installed on the phone )
|
||
|
{{{
|
||
|
sh project_create.sh
|
||
|
ant debug
|
||
|
}}}
|
||
|
|
||
|
Now if everything worked, try to install it. Connect your device and run the following
|
||
|
{{{
|
||
|
ant install
|
||
|
}}}
|
||
|
|
||
|
Run it, press menu to see options - right now it can draw fast, star, and surf feature points on the live preview image.
|
||
|
=== Calibration ===
|
||
|
{{{
|
||
|
sh project_create.sh
|
||
|
ant debug
|
||
|
ant install
|
||
|
}}}
|
||
|
|
||
|
To run the app, make sure that the sdcard is not mounted on your computer and point the phone at a calibration pattern and snap away. When you have taken enough chessboards to satisfy yourself
|
||
|
press the save button to have the camera calibarted. The calibration will be saved to /sdcard/opencv/calibration.yml
|
||
|
|
||
|
Also see this app for how to make a slightly nicer camera ui than CVCamera.
|
||
|
=== Troubles ===
|
||
|
try to edit the local.env.mk file's that get created in CVCamera and android-jni to reflect your system.
|
||
|
|
||
|
Also using cmake-gui or ccmake are good options to set up where your ndk directory are.
|
||
|
|
||
|
Send questions/comments to Ethan Rublee ethan.rublee@gmail.com
|
||
|
|
||
|
= Programming your own apps =
|
||
|
Try to look at the samples - like CVCamera, for how to do this. A tutorial may be forth coming.
|
||
|
|