1OpenCV4Android SDK {#tutorial_O4A_SDK}
2==================
3
4This tutorial was designed to help you with installation and configuration of OpenCV4Android SDK.
5
6This guide was written with MS Windows 7 in mind, though it should work with GNU Linux and Apple Mac
7OS as well.
8
9This tutorial assumes you have the following software installed and configured:
10
11-   JDK
12-   Android SDK and NDK
13-   Eclipse IDE
14-   ADT and CDT plugins for Eclipse
15
16If you need help with anything of the above, you may refer to our @ref tutorial_android_dev_intro guide.
17
18If you encounter any error after thoroughly following these steps, feel free to contact us via
19[OpenCV4Android](https://groups.google.com/group/android-opencv/) discussion group or OpenCV [Q&A
20forum](http://answers.opencv.org). We'll do our best to help you out.
21
22Tegra Android Development Pack users
23------------------------------------
24
25You may have used [Tegra Android Development
26Pack](http://developer.nvidia.com/tegra-android-development-pack) (**TADP**) released by **NVIDIA**
27for Android development environment setup.
28
29Beside Android development tools the TADP 2.0 includes OpenCV4Android SDK, so it can be already
30installed in your system and you can skip to @ref tutorial_O4A_SDK_samples "samples" section of this tutorial.
31
32More details regarding TADP can be found in the @ref tutorial_android_dev_intro guide.
33
34General info
35------------
36
37OpenCV4Android SDK package enables development of Android applications with use of OpenCV library.
38
39The structure of package contents looks as follows:
40
41    OpenCV-2.4.9-android-sdk
42    |_ apk
43    |   |_ OpenCV_2.4.9_binary_pack_armv7a.apk
44    |   |_ OpenCV_2.4.9_Manager_2.18_XXX.apk
45    |
46    |_ doc
47    |_ samples
48    |_ sdk
49    |    |_ etc
50    |    |_ java
51    |    |_ native
52    |          |_ 3rdparty
53    |          |_ jni
54    |          |_ libs
55    |               |_ armeabi
56    |               |_ armeabi-v7a
57    |               |_ x86
58    |
59    |_ LICENSE
60    |_ README.android
61
62-   `sdk` folder contains OpenCV API and libraries for Android:
63-   `sdk/java` folder contains an Android library Eclipse project providing OpenCV Java API that can
64    be imported into developer's workspace;
65-   `sdk/native` folder contains OpenCV C++ headers (for JNI code) and native Android libraries
66    (\*.so and \*.a) for ARM-v5, ARM-v7a and x86 architectures;
67-   `sdk/etc` folder contains Haar and LBP cascades distributed with OpenCV.
68-   `apk` folder contains Android packages that should be installed on the target Android device to
69    enable OpenCV library access via OpenCV Manager API (see details below).
70
71    On production devices that have access to Google Play Market (and Internet) these packages will
72    be installed from Market on the first start of an application using OpenCV Manager API. But
73    devkits without Market or Internet connection require this packages to be installed manually.
74    Install the Manager.apk and optional binary_pack.apk if it needed. See `Manager Selection`
75    for details.
76
77    @note Installation from Internet is the preferable way since OpenCV team may publish updated
78    versions of this packages on the Market.
79
80-   `samples` folder contains sample applications projects
81    and their prebuilt packages (APK). Import them into Eclipse workspace (like described below) and
82    browse the code to learn possible ways of OpenCV use on Android.
83
84-   `doc` folder contains various OpenCV documentation in PDF format. It's also available online at
85    <http://docs.opencv.org>.
86    @note The most recent docs (nightly build) are at <http://docs.opencv.org/2.4>. Generally, it's more
87    up-to-date, but can refer to not-yet-released functionality.
88    @todo I'm not sure that this is the best place to talk about OpenCV Manager
89
90Starting from version 2.4.3 OpenCV4Android SDK uses OpenCV Manager API for library initialization.
91OpenCV Manager is an Android service based solution providing the following benefits for OpenCV
92applications developers:
93
94-   Compact apk-size, since all applications use the same binaries from Manager and do not store
95    native libs within themselves;
96-   Hardware specific optimizations are automatically enabled on all supported platforms;
97-   Automatic updates and bug fixes;
98-   Trusted OpenCV library source. All packages with OpenCV are published on Google Play;
99
100For additional information on OpenCV Manager see the:
101
102-   [Slides](https://docs.google.com/a/itseez.com/presentation/d/1EO_1kijgBg_BsjNp2ymk-aarg-0K279_1VZRcPplSuk/present#slide=id.p)
103-   [Reference Manual](http://docs.opencv.org/android/refman.html)
104
105Manual OpenCV4Android SDK setup
106-------------------------------
107
108### Get the OpenCV4Android SDK
109
110-#  Go to the [OpenCV download page on
111    SourceForge](http://sourceforge.net/projects/opencvlibrary/files/opencv-android/) and download
112    the latest available version. Currently it's [OpenCV-2.4.9-android-sdk.zip](http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.9/OpenCV-2.4.9-android-sdk.zip/download).
113-#  Create a new folder for Android with OpenCV development. For this tutorial we have unpacked
114    OpenCV SDK to the `C:\Work\OpenCV4Android\` directory.
115
116    @note Better to use a path without spaces in it. Otherwise you may have problems with ndk-build.
117
118-#  Unpack the SDK archive into the chosen directory.
119
120    You can unpack it using any popular archiver (e.g with 7-Zip):
121
122    ![](images/android_package_7zip.png)
123
124    On Unix you can use the following command:
125    @code{.bash}
126    unzip ~/Downloads/OpenCV-2.4.9-android-sdk.zip
127    @endcode
128
129### Import OpenCV library and samples to the Eclipse
130
131-#  Start Eclipse and choose your workspace location.
132
133    We recommend to start working with OpenCV for Android from a new clean workspace. A new Eclipse
134    workspace can for example be created in the folder where you have unpacked OpenCV4Android SDK
135    package:
136
137    ![](images/eclipse_1_choose_workspace.png)
138
139-#  Import OpenCV library and samples into workspace.
140
141    OpenCV library is packed as a ready-for-use [Android Library
142    Project](http://developer.android.com/guide/developing/projects/index.html#LibraryProjects). You
143    can simply reference it in your projects.
144
145    Each sample included into the `OpenCV-2.4.9-android-sdk.zip` is a regular Android project that
146    already references OpenCV library. Follow the steps below to import OpenCV and samples into the
147    workspace:
148
149    -   Right click on the Package Explorer window and choose Import... option from the context
150        menu:
151
152        ![](images/eclipse_5_import_command.png)
153
154    -   In the main panel select General --\> Existing Projects into Workspace and press Next
155        button:
156
157        ![](images/eclipse_6_import_existing_projects.png)
158
159    -   In the Select root directory field locate your OpenCV package folder. Eclipse should
160        automatically locate OpenCV library and samples:
161
162        ![](images/eclipse_7_select_projects.png)
163
164    -   Click Finish button to complete the import operation.
165
166    @note OpenCV samples are indeed **dependent** on OpenCV library project so don't forget to import it to your workspace as well.
167
168    After clicking Finish button Eclipse will load all selected projects into workspace, and you
169    have to wait some time while it is building OpenCV samples. Just give a minute to Eclipse to
170    complete initialization.
171
172    ![](images/eclipse_cdt_cfg4.png)
173
174    Once Eclipse completes build you will have the clean workspace without any build errors:
175
176    ![](images/eclipse_10_crystal_clean.png)
177
178@anchor tutorial_O4A_SDK_samples
179### Running OpenCV Samples
180
181At this point you should be able to build and run the samples. Keep in mind, that face-detection and
182Tutorial 2 - Mixed Processing include some native code and require Android NDK and NDK/CDT plugin
183for Eclipse to build working applications. If you haven't installed these tools, see the
184corresponding section of @ref tutorial_android_dev_intro.
185
186**warning**
187
188Please consider that some samples use Android Java Camera API, which is accessible with an AVD.
189
190@note Recent *Android SDK tools, revision 19+* can run ARM v7a OS images but they available not for
191all Android versions.
192
193Well, running samples from Eclipse is very simple:
194
195-   Connect your device with adb tool from Android SDK or create an emulator with camera support.
196    -   See [Managing Virtual Devices](http://developer.android.com/guide/developing/devices/index.html) document for help
197        with Android Emulator.
198    -   See [Using Hardware Devices](http://developer.android.com/guide/developing/device.html) for
199        help with real devices (not emulators).
200
201-   Select project you want to start in Package Explorer and just press Ctrl + F11 or select option
202    Run --\> Run from the main menu, or click Run button on the toolbar.
203
204    @note Android Emulator can take several minutes to start. So, please, be patient. \* On the first
205    run Eclipse will ask you about the running mode for your application:
206
207    ![](images/eclipse_11_run_as.png)
208
209-   Select the Android Application option and click OK button. Eclipse will install and run the
210    sample.
211
212    Chances are that on the first launch you will not have the [OpenCV
213    Manager](https://docs.google.com/a/itseez.com/presentation/d/1EO_1kijgBg_BsjNp2ymk-aarg-0K279_1VZRcPplSuk/present#slide=id.p)
214    package installed. In this case you will see the following message:
215
216    ![](images/android_emulator_opencv_manager_fail.png)
217
218    To get rid of the message you will need to install OpenCV Manager and the appropriate
219    OpenCV binary pack. Simply tap Yes if you have *Google Play Market* installed on your
220    device/emulator. It will redirect you to the corresponding page on *Google Play Market*.
221
222    If you have no access to the *Market*, which is often the case with emulators - you will need to
223    install the packages from OpenCV4Android SDK folder manually. See `Manager Selection` for
224    details.
225    @code{.sh}
226    <Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.9_Manager_2.18_armv7a-neon.apk
227    @endcode
228
229    @note armeabi, armv7a-neon, arm7a-neon-android8, mips and x86 stand for platform targets:
230        -   armeabi is for ARM v5 and ARM v6 architectures with Android API 8+,
231        -   armv7a-neon is for NEON-optimized ARM v7 with Android API 9+,
232        -   arm7a-neon-android8 is for NEON-optimized ARM v7 with Android API 8,
233        -   mips is for MIPS architecture with Android API 9+,
234        -   x86 is for Intel x86 CPUs with Android API 9+.
235
236    @note
237    If using hardware device for testing/debugging, run the following command to learn its CPU
238    architecture:
239    @code{.sh}
240    adb shell getprop ro.product.cpu.abi
241    @endcode
242    If you're using an AVD emulator, go Window \> AVD Manager to see the list of availible devices.
243    Click Edit in the context menu of the selected device. In the window, which then pop-ups, find
244    the CPU field.
245
246    @note
247    You may also see section `Manager Selection` for details.
248
249    When done, you will be able to run OpenCV samples on your device/emulator seamlessly.
250
251-   Here is Sample - image-manipulations sample, running on top of stock camera-preview of the
252    emulator.
253
254    ![](images/emulator_canny.png)
255
256What's next
257-----------
258
259Now, when you have your instance of OpenCV4Adroid SDK set up and configured, you may want to proceed
260to using OpenCV in your own application. You can learn how to do that in a separate @ref tutorial_dev_with_OCV_on_Android tutorial.
261