From 3c09b075fcf967f2e49dda05df88463e992bae7c Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Tue, 18 Dec 2012 18:34:51 +0400 Subject: [PATCH] OpenCV Manager selection chapter added to documentation. --- android/service/doc/UseCases.rst | 44 ++++++++++++++++-- .../android_binary_package/O4A_SDK.rst | 24 ++-------- .../dev_with_OCV_on_Android.rst | 16 +------ .../install_opencv_manager_with_adb.png | Bin 16485 -> 0 bytes 4 files changed, 46 insertions(+), 38 deletions(-) delete mode 100644 doc/tutorials/introduction/android_binary_package/images/install_opencv_manager_with_adb.png diff --git a/android/service/doc/UseCases.rst b/android/service/doc/UseCases.rst index 96e733984e..ff26410e70 100644 --- a/android/service/doc/UseCases.rst +++ b/android/service/doc/UseCases.rst @@ -1,6 +1,40 @@ -******************************************* Manager Workflow -******************************************* +**************** + +.. _manager_selection: + +OpenCV Manager selection +------------------------ + +Since version 1.7 several packages of OpenCV Manager is built. Every package includes OpenCV library +for package target platform. The internal library is used for most cases, except the rare one, when +arm-v7a without NEON instruction set processor is detected. In this case additional binary package +for arm-v7a is used. The new package selection logic in most cases simplifies OpenCV installation +on end user devices. In most cases OpenCV Manager may be installed automatically from Google Play. +For such case, when Google Play is not available, i.e. emulator, developer board, etc, you can +install it manually using adb tool. + +.. code-block:: sh + :linenos: + + adb install OpenCV-2.4.3-android-sdk/apk/OpenCV_2.4.3_Manager_2.0_.apk + +Use table to determine right OpenCV Manager package: + ++----------------------------+-----------------+-----------------------------------------------------+ +| Hardware Platform | Android version | Package name | ++============================+=================+=====================================================+ +| Intel x86 | >= 2.3 | OpenCV_2.4.3_Manager_2.0_x86.apk | ++----------------------------+-----------------+-----------------------------------------------------+ +| MIPS | >= 2.3 | OpenCV_2.4.3_Manager_2.0_mips.apk | ++----------------------------+-----------------+-----------------------------------------------------+ +| armeabi (arm-v5, arm-v6) | >= 2.3 | OpenCV_2.4.3_Manager_2.0_armeabi.apk | ++----------------------------+-----------------+-----------------------------------------------------+ +| armeabi-v7a (arm-v7a-NEON) | >= 2.3 | OpenCV_2.4.3_Manager_2.0_armv7a-neon.apk | ++----------------------------+-----------------+-----------------------------------------------------+ +| armeabi-v7a (arm-v7a-NEON) | 2.2 | OpenCV_2.4.3.1_Manager_2.3_armv7a-neon-android8.apk | ++----------------------------+-----------------+-----------------------------------------------------+ + First application start ----------------------- @@ -9,10 +43,10 @@ There is no OpenCV Manager or OpenCV libraries: .. image:: img/NoService.png -Aditional library package installation --------------------------------------- +Additional library package installation +--------------------------------------- -There is an OpenCV Manager service, but there is no apropriate OpenCV library. +There is an OpenCV Manager service, but it does not contain appropriate OpenCV library. If OpenCV library installation has been approved\: .. image:: img/LibInstallAproved.png diff --git a/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst b/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst index b46e417d5a..b426c5c1ec 100644 --- a/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst +++ b/doc/tutorials/introduction/android_binary_package/O4A_SDK.rst @@ -50,8 +50,8 @@ The structure of package contents looks as follows: OpenCV-2.4.3-android-sdk |_ apk - | |_ OpenCV_2.4.3_binary_pack_XXX.apk - | |_ OpenCV_2.4.3_Manager.apk + | |_ OpenCV_2.4.3_binary_pack_armv7a.apk + | |_ OpenCV_2.4.3_Manager_2.0_XXX.apk | |_ doc |_ samples @@ -85,8 +85,8 @@ The structure of package contents looks as follows: On production devices that have access to Google Play Market (and Internet) these packages will be installed from Market on the first start of an application using OpenCV Manager API. But devkits without Market or Internet connection require this packages to be installed manually. - Install the `Manager.apk` and the corresponding `binary_pack.apk` depending on the device CPU, - the Manager GUI provides this info. Below you'll see exact commands on how to do this. + Install the `Manager.apk` and optional `binary_pack.apk` if it needed. + See :ref:`manager_selection` for details. .. note:: Installation from Internet is the preferable way since OpenCV team may publish updated versions of this packages on the Market. @@ -280,21 +280,7 @@ Well, running samples from Eclipse is very simple: To get rid of the message you will need to install `OpenCV Manager` and the appropriate `OpenCV binary pack`. Simply tap :menuselection:`Yes` if you have *Google Play Market* installed on your device/emulator. It will redirect you to the corresponding page on *Google Play Market*. - If you have no access to the *Market*, which is often the case with emulators - you will need to install the packages from OpenCV4Android SDK folder manually. Open the console/terminal and type in the following two commands: - - .. code-block:: sh - :linenos: - - /platform-tools/adb install /apk/OpenCV_2.4.3_Manager.apk - /platform-tools/adb install /apk/OpenCV_2.4.3_binary_pack_armv7a.apk - - If you're running Windows, that will probably look like this: - - .. image:: images/install_opencv_manager_with_adb.png - :alt: Run these commands in the console to install OpenCV Manager - :align: center - - When done, you will be able to run OpenCV samples on your device/emulator seamlessly. + If you have no access to the *Market*, which is often the case with emulators - you will need to install the packages from OpenCV4Android SDK folder manually. See :ref:`manager_selection` for details. * Here is ``Tutorial 2 - Use OpenCV Camera`` sample, running on top of stock camera-preview of the emulator. diff --git a/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst b/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst index f7f0c4718c..ba82a8a016 100644 --- a/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst +++ b/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.rst @@ -54,20 +54,8 @@ Using async initialization is a **recommended** way for application development. :alt: Add dependency from OpenCV library :align: center -To run OpenCV Manager-based application for the first time you need to install package with the `OpenCV Manager` for your platform. Armeabi, Armeabi-v7a with NEON, x86 and MIPS achitectures supported. -You can do it using Google Play Market or manually with ``adb`` tool: - -.. code-block:: sh - :linenos: - - /platform-tools/adb install /apk/OpenCV_2.4.3_Manager.apk - -For rare cases if NEON instruction set is not supported you need to install aditional OpenCV Library package: - -.. code-block:: sh - :linenos: - - /platform-tools/adb install /apk/OpenCV_2.4.3_binary_pack_armv7a.apk +In most cases OpenCV Manager may be installed automatically from Google Play. For such case, when Google Play is not available, i.e. emulator, developer board, etc, you can +install it manually using adb tool. See :ref:`manager_selection` 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. diff --git a/doc/tutorials/introduction/android_binary_package/images/install_opencv_manager_with_adb.png b/doc/tutorials/introduction/android_binary_package/images/install_opencv_manager_with_adb.png deleted file mode 100644 index 4bebe00e65a818fd35fa318974ba6f5ec801f2a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16485 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 tS&0=u9+W!SJ$h|N`vSYFBt<6ZWI!HwK%(