Android tutorial updated
OpenCV version incremented; New CvCameraViewListener interface description added.
This commit is contained in:
parent
11885e86ee
commit
8458f5c489
@ -48,10 +48,10 @@ The structure of package contents looks as follows:
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
OpenCV-2.4.3-android-sdk
|
OpenCV-2.4.4-android-sdk
|
||||||
|_ apk
|
|_ apk
|
||||||
| |_ OpenCV_2.4.3_binary_pack_armv7a.apk
|
| |_ OpenCV_2.4.4_binary_pack_armv7a.apk
|
||||||
| |_ OpenCV_2.4.3_Manager_2.0_XXX.apk
|
| |_ OpenCV_2.4.4_Manager_2.6_XXX.apk
|
||||||
|
|
|
|
||||||
|_ doc
|
|_ doc
|
||||||
|_ samples
|
|_ samples
|
||||||
@ -157,10 +157,10 @@ Get the OpenCV4Android SDK
|
|||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
unzip ~/Downloads/OpenCV-2.4.3-android-sdk.zip
|
unzip ~/Downloads/OpenCV-2.4.4-android-sdk.zip
|
||||||
|
|
||||||
.. |opencv_android_bin_pack| replace:: OpenCV-2.4.3.2-android-sdk.zip
|
.. |opencv_android_bin_pack| replace:: OpenCV-2.4.4-android-sdk.zip
|
||||||
.. _opencv_android_bin_pack_url: http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.3/OpenCV-2.4.3.2-android-sdk.zip/download
|
.. _opencv_android_bin_pack_url: http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.4/OpenCV-2.4.4-android-sdk.zip/download
|
||||||
.. |opencv_android_bin_pack_url| replace:: |opencv_android_bin_pack|
|
.. |opencv_android_bin_pack_url| replace:: |opencv_android_bin_pack|
|
||||||
.. |seven_zip| replace:: 7-Zip
|
.. |seven_zip| replace:: 7-Zip
|
||||||
.. _seven_zip: http://www.7-zip.org/
|
.. _seven_zip: http://www.7-zip.org/
|
||||||
@ -295,7 +295,7 @@ Well, running samples from Eclipse is very simple:
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
:linenos:
|
:linenos:
|
||||||
|
|
||||||
<Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.3_Manager_armv7a-neon.apk
|
<Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.4_Manager_armv7a-neon.apk
|
||||||
|
|
||||||
.. note:: ``armeabi``, ``armv7a-neon``, ``arm7a-neon-android8``, ``mips`` and ``x86`` stand for
|
.. note:: ``armeabi``, ``armv7a-neon``, ``arm7a-neon-android8``, ``mips`` and ``x86`` stand for
|
||||||
platform targets:
|
platform targets:
|
||||||
|
@ -55,14 +55,14 @@ Manager to access OpenCV libraries externally installed in the target system.
|
|||||||
:guilabel:`File -> Import -> Existing project in your workspace`.
|
:guilabel:`File -> Import -> Existing project in your workspace`.
|
||||||
|
|
||||||
Press :guilabel:`Browse` button and locate OpenCV4Android SDK
|
Press :guilabel:`Browse` button and locate OpenCV4Android SDK
|
||||||
(:file:`OpenCV-2.4.3-android-sdk/sdk`).
|
(:file:`OpenCV-2.4.4-android-sdk/sdk`).
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency0.png
|
.. image:: images/eclipse_opencv_dependency0.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
#. In application project add a reference to the OpenCV Java SDK in
|
#. In application project add a reference to the OpenCV Java SDK in
|
||||||
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.3``.
|
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.4``.
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency1.png
|
.. image:: images/eclipse_opencv_dependency1.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
@ -128,27 +128,27 @@ described above.
|
|||||||
#. Add the OpenCV library project to your workspace the same way as for the async initialization
|
#. 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`,
|
above. Use menu :guilabel:`File -> Import -> Existing project in your workspace`,
|
||||||
press :guilabel:`Browse` button and select OpenCV SDK path
|
press :guilabel:`Browse` button and select OpenCV SDK path
|
||||||
(:file:`OpenCV-2.4.3-android-sdk/sdk`).
|
(:file:`OpenCV-2.4.4-android-sdk/sdk`).
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency0.png
|
.. image:: images/eclipse_opencv_dependency0.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
#. In the application project add a reference to the OpenCV4Android SDK in
|
#. In the application project add a reference to the OpenCV4Android SDK in
|
||||||
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.3``;
|
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.4``;
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency1.png
|
.. image:: images/eclipse_opencv_dependency1.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
#. If your application project **doesn't have a JNI part**, just copy the corresponding OpenCV
|
#. If your application project **doesn't have a JNI part**, just copy the corresponding OpenCV
|
||||||
native libs from :file:`<OpenCV-2.4.3-android-sdk>/sdk/native/libs/<target_arch>` to your
|
native libs from :file:`<OpenCV-2.4.4-android-sdk>/sdk/native/libs/<target_arch>` to your
|
||||||
project directory to folder :file:`libs/<target_arch>`.
|
project directory to folder :file:`libs/<target_arch>`.
|
||||||
|
|
||||||
In case of the application project **with a JNI part**, instead of manual libraries copying you
|
In case of the application project **with a JNI part**, instead of manual libraries copying you
|
||||||
need to modify your ``Android.mk`` file:
|
need to modify your ``Android.mk`` file:
|
||||||
add the following two code lines after the ``"include $(CLEAR_VARS)"`` and before
|
add the following two code lines after the ``"include $(CLEAR_VARS)"`` and before
|
||||||
``"include path_to_OpenCV-2.4.3-android-sdk/sdk/native/jni/OpenCV.mk"``
|
``"include path_to_OpenCV-2.4.4-android-sdk/sdk/native/jni/OpenCV.mk"``
|
||||||
|
|
||||||
.. code-block:: make
|
.. code-block:: make
|
||||||
:linenos:
|
:linenos:
|
||||||
@ -221,7 +221,7 @@ taken:
|
|||||||
|
|
||||||
.. code-block:: make
|
.. code-block:: make
|
||||||
|
|
||||||
include C:\Work\OpenCV4Android\OpenCV-2.4.3-android-sdk\sdk\native\jni\OpenCV.mk
|
include C:\Work\OpenCV4Android\OpenCV-2.4.4-android-sdk\sdk\native\jni\OpenCV.mk
|
||||||
|
|
||||||
Should be inserted into the :file:`jni/Android.mk` file **after** this line:
|
Should be inserted into the :file:`jni/Android.mk` file **after** this line:
|
||||||
|
|
||||||
@ -382,7 +382,7 @@ result.
|
|||||||
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
#. Defines that your activity implements CvViewFrameListener interface and fix activity related
|
#. Defines that your activity implements ``CvViewFrameListener2`` interface and fix activity related
|
||||||
errors by defining missed methods. For this activity define ``onCreate``, ``onDestroy`` and
|
errors by defining missed methods. For this activity define ``onCreate``, ``onDestroy`` and
|
||||||
``onPause`` and implement them according code snippet bellow. Fix errors by adding requited
|
``onPause`` and implement them according code snippet bellow. Fix errors by adding requited
|
||||||
imports.
|
imports.
|
||||||
@ -423,8 +423,8 @@ result.
|
|||||||
public void onCameraViewStopped() {
|
public void onCameraViewStopped() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mat onCameraFrame(Mat inputFrame) {
|
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
|
||||||
return inputFrame;
|
return inputFrame.rgba();
|
||||||
}
|
}
|
||||||
|
|
||||||
#. Run your application on device or emulator.
|
#. Run your application on device or emulator.
|
||||||
@ -432,7 +432,7 @@ result.
|
|||||||
Lets discuss some most important steps. Every Android application with UI must implement Activity
|
Lets discuss some most important steps. Every Android application with UI must implement Activity
|
||||||
and View. By the first steps we create blank activity and default view layout. The simplest
|
and View. By the first steps we create blank activity and default view layout. The simplest
|
||||||
OpenCV-centric application must implement OpenCV initialization, create its own view to show
|
OpenCV-centric application must implement OpenCV initialization, create its own view to show
|
||||||
preview from camera and implements ``CvViewFrameListener`` interface to get frames from camera and
|
preview from camera and implements ``CvViewFrameListener2`` interface to get frames from camera and
|
||||||
process it.
|
process it.
|
||||||
|
|
||||||
First of all we create our application view using xml layout. Our layout consists of the only
|
First of all we create our application view using xml layout. Our layout consists of the only
|
||||||
@ -448,8 +448,13 @@ After creating layout we need to implement ``Activity`` class. OpenCV initializa
|
|||||||
been already discussed above. In this sample we use asynchronous initialization. Implementation of
|
been already discussed above. In this sample we use asynchronous initialization. Implementation of
|
||||||
``CvCameraViewListener`` interface allows you to add processing steps after frame grabbing from
|
``CvCameraViewListener`` interface allows you to add processing steps after frame grabbing from
|
||||||
camera and before its rendering on screen. The most important function is ``onCameraFrame``. It is
|
camera and before its rendering on screen. The most important function is ``onCameraFrame``. It is
|
||||||
callback function and it is called on retrieving frame from camera. The callback input is frame
|
callback function and it is called on retrieving frame from camera. The callback input is object
|
||||||
from camera. RGBA format is used by default. You can change this behavior by ``SetCaptureFormat``
|
of ``CvCameraViewFrame`` class that represents frame from camera.
|
||||||
method of ``View`` class. ``Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA`` and
|
|
||||||
``Highgui.CV_CAP_ANDROID_GREY_FRAME`` are supported. It expects that function returns RGBA frame
|
.. note::
|
||||||
that will be drawn on the screen.
|
Do not save or use ``CvCameraViewFrame`` object out of ``onCameraFrame`` callback. This object
|
||||||
|
does not have its own state and its behavior out of callback is unpredictable!
|
||||||
|
|
||||||
|
It has ``rgba()`` and ``gray()`` methods that allows to get frame as RGBA and one channel gray scale
|
||||||
|
``Mat`` respectively. It expects that ``onCameraFrame`` function returns RGBA frame that will be
|
||||||
|
drawn on the screen.
|
||||||
|
@ -156,9 +156,21 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac
|
|||||||
private CvCameraViewListener mOldStyleListener;
|
private CvCameraViewListener mOldStyleListener;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class interface is abstract representation of single frame from camera for onCameraFrame callback
|
||||||
|
* Attention: Do not use objects, that represents this interface out of onCameraFrame callback!
|
||||||
|
*/
|
||||||
public interface CvCameraViewFrame {
|
public interface CvCameraViewFrame {
|
||||||
public abstract Mat rgba();
|
|
||||||
public abstract Mat gray();
|
/**
|
||||||
|
* This method returns RGBA Mat with frame
|
||||||
|
*/
|
||||||
|
public Mat rgba();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns single channel gray scale Mat with frame
|
||||||
|
*/
|
||||||
|
public Mat gray();
|
||||||
};
|
};
|
||||||
|
|
||||||
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
|
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
|
||||||
|
Loading…
Reference in New Issue
Block a user