From: Andrey Pavlenko Date: Thu, 12 Jul 2012 09:21:32 +0000 (+0000) Subject: updating wording and initDebug() descr X-Git-Tag: accepted/2.0/20130307.220821~364^2~373 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f6a4350ddd6423649d1a09604faa3cc4a93c892b;p=profile%2Fivi%2Fopencv.git updating wording and initDebug() descr --- diff --git a/doc/tutorials/introduction/android_binary_package/android_binary_package.rst b/doc/tutorials/introduction/android_binary_package/android_binary_package.rst index 72639b3..5f61ead 100644 --- a/doc/tutorials/introduction/android_binary_package/android_binary_package.rst +++ b/doc/tutorials/introduction/android_binary_package/android_binary_package.rst @@ -314,26 +314,30 @@ Well, running samples from Eclipse is very simple: How to use OpenCV library project in your application ===================================================== -In this section we will explain how to make some existing application to use OpenCV. Starting from 2.4.2 release on Android so-called "OpenCV Manager" is used for providing applications with the best version of OpenCV. You can get more information here: :ref:`Android_OpenCV_Manager`. +In this section we will explain how to make some existing application to use OpenCV. +Starting from 2.4.2 release on Android so-called "OpenCV Manager" is used for providing applications with the best version of OpenCV. +You can get more information here: :ref:`Android_OpenCV_Manager`. Application development with async initialization ------------------------------------------------- -Using async initialization is a preferred way for application development. It uses OpenCV Manager Android service to get OpenCV libraries. +Using async initialization is a preferred way for application development. It uses the OpenCV Manager for access to OpenCV libraries. -#. Add OpenCV library project to your workspace. Go to :guilabel:`File –> Import –> Existing project in your workspace`, push Browse button and select OpenCV SDK path. +#. Add OpenCV library project to your workspace. Use menu :guilabel:`File –> Import –> Existing project in your workspace`, + push :guilabel:`Browse` button and select OpenCV SDK path (:file:`OpenCV-2.4.2-android-sdk/sdk`). .. image:: images/eclipse_opencv_dependency0.png :alt: Add dependency from OpenCV library :align: center -#. In application project add reference to OpenCV Java SDK in :guilabel:`Project –> Properties –> Android –> Library –> Add` select ``OpenCV Library - 2.4.2``; +#. In application project add a reference to the OpenCV Java SDK in :guilabel:`Project –> Properties –> Android –> Library –> Add` select ``OpenCV Library - 2.4.2``. .. image:: images/eclipse_opencv_dependency1.png :alt: Add dependency from OpenCV library :align: center -If you want to use OpenCV Manager-based approach you need to install packages with the Service and OpenCV package for you platform. You can do it using Google Play service or manually with adb tool: +To use OpenCV Manager-based approach you need to install packages with the `Manager` and `OpenCV binary package` for you platform. +You can do it using Google Play Market or manually with ``adb`` tool: .. code-block:: sh :linenos: @@ -341,7 +345,7 @@ If you want to use OpenCV Manager-based approach you need to install packages wi adb install ./org.opencv.engine.apk adb install ./org.opencv.lib_v24_.apk -There is a very base code snippet for Async init. It shows only basis principles of library Initiation. See the "15-puzzle" OpenCV sample for details. +There is a very base code snippet implementing the async initialization. It shows basic principles. See the "15-puzzle" OpenCV sample for details. .. code-block:: java :linenos: @@ -354,14 +358,14 @@ There is a very base code snippet for Async init. It shows only basis principles switch (status) { case LoaderCallbackInterface.SUCCESS: { - Log.i(TAG, "OpenCV loaded successfully"); - // Create and set View - mView = new puzzle15View(mAppContext); - setContentView(mView); + Log.i(TAG, "OpenCV loaded successfully"); + // Create and set View + mView = new puzzle15View(mAppContext); + setContentView(mView); } break; default: { - super.onManagerConnected(status); + super.onManagerConnected(status); } break; } } @@ -385,55 +389,82 @@ There is a very base code snippet for Async init. It shows only basis principles } It this case application works with OpenCV Manager in asynchronous fashion. ``OnManagerConnected`` callback will be called in UI thread, when initialization finishes. -Please note, that it is not allowed to use OpenCV calls or load OpenCV-dependent native libs before invoking this callback. Load your own native libraries after OpenCV initialization. +Please note, that it is not allowed to use OpenCV calls or load OpenCV-dependent native libs before invoking this callback. +Load your own native libraries that depend on OpenCV after the successful OpenCV initialization. Application development with static initialization -------------------------------------------------- -According to this approach all OpenCV binaries are linked and put to your application package. It is designed mostly for development purposes. -This way is deprecated for the production code, release package should communicate with OpenCV Manager, use the async initialization described above. +According to this approach all OpenCV binaries are included into your application package. It is designed mostly for development purposes. +This approach is deprecated for the production code, release package is recommended to communicate with OpenCV Manager via the async initialization described above. -#. Add OpenCV library project to your workspace. Go to :guilabel:`File –> Import –> Existing project in your workspace`, push :guilabel:`Browse` button and select OpenCV SDK path. +#. Add the OpenCV library project to your workspace the same way as for the async initialization above. + Use menu :guilabel:`File –> Import –> Existing project in your workspace`, push :guilabel:`Browse` button and select OpenCV SDK path (:file:`OpenCV-2.4.2-android-sdk/sdk`). .. image:: images/eclipse_opencv_dependency0.png :alt: Add dependency from OpenCV library :align: center -#. In application project add reference to OpenCV Java SDK in :guilabel:`Project –> Properties –> Android –> Library –> Add` select ``OpenCV Library - 2.4.2``; +#. In the application project add a reference to the OpenCV Java SDK in :guilabel:`Project –> Properties –> Android –> Library –> Add` select ``OpenCV Library - 2.4.2``; .. image:: images/eclipse_opencv_dependency1.png :alt: Add dependency from OpenCV library :align: center -#. Copy native libs to your project directory to folder :file:`libs/target_arch/`. +#. If your application project **doesn't have a JNI part**, just copy the OpenCV native libs to your project directory to folder :file:`libs/target_arch/`. + + In case of the application project **with a JNI part**, instead of manual libraries copying you need to modify your ``Android.mk`` file: + add the following two code lines after the ``"include $(CLEAR_VARS)"`` and before ``"include path_to_OpenCV-2.4.2-android-sdk/sdk/native/jni/OpenCV.mk"`` -After adding depedency from OpenCV library project, Eclipse will automatically copy all needed libraries to the application package. -To use OpenCV functionality you need to add OpenCV library initialization code before using any OpenCV specific code, for example, to the static section of ``Activity`` class. + .. code-block:: make + :linenos: -.. code-block:: java - :linenos: + OPENCV_CAMERA_MODULES:=on + OPENCV_INSTALL_MODULES:=on + + The result should look like the following: + + .. code-block:: make + :linenos: + + include $(CLEAR_VARS) + + # OpenCV + OPENCV_CAMERA_MODULES:=on + OPENCV_INSTALL_MODULES:=on + include ../../sdk/native/jni/OpenCV.mk + + After that the OpenCV libraries will be copied to your application :file:`libs` folder during the JNI part build. + + Eclipse will automatically include all the libraries from the :file:`libs` folder to the application package (APK). - static { - if (!OpenCVLoader.initDebug()) { - // Report initialization error +#. The last step of enabling OpenCV in your application is Java initialization code before call to OpenCV API. + It can be done, for example, in the static section of the ``Activity`` class: + + .. code-block:: java + :linenos: + + static { + if (!OpenCVLoader.initDebug()) { + // Handle initialization error + } } - } -If you application includes other OpenCV-dependent native libraries you need to init OpenCV before them. + If you application includes other OpenCV-dependent native libraries you should load them **after** OpenCV initialization: -.. code-block:: java - :linenos: + .. code-block:: java + :linenos: - static { - if (OpenCVLoader.initDebug()) { - System.loadLibrary("my_super_lib1"); - System.loadLibrary("my_super_lib2"); - } else { - // Report initialization error + static { + if (!OpenCVLoader.initDebug()) { + // Handle initialization error + } else { + System.loadLibrary("my_jni_lib1"); + System.loadLibrary("my_jni_lib2"); + } } - } -Whats next? -=========== +What's next? +============ Read the :ref:`Android_Binary_Package_with_NDK` tutorial to learn how to add native OpenCV code to your Android project.