Difference between revisions of "Android support"

From BoofCV
Jump to navigationJump to search
m
m
Line 1: Line 1:
BoofCV works without modification on Android systems, however to build in image types are not directly compatible with BoofCV.  To get around this issue BoofCV provides code in its integration package for converting to and from several Android image types. Support is currently provided for converting Bitmap and NV21 images.  These functions are many times faster than trying to convert images using Bitmap's RGB values or through some more convoluted process like NV21->jpeg->Bitmap->BoofCV.  Functions have been tested on Android 2.3.3 API and will most likely work on even earlier versions.
BoofCV works without modification on Android systems, however you will need to convert Android specific image types into BoofCV image types. Support is provided for converting Bitmap, NV21, and YUV420 images.  Camera 2 API is actively supported while camera 1 API is unsupported but can still be used.


* [http://boofcv.org/javadoc/integration/boofcv/android/ConvertBitmap.html Convert Bitmap]
* [http://boofcv.org/javadoc/integration/boofcv/android/ConvertBitmap.html Convert Bitmap]
* [http://boofcv.org/javadoc/integration/boofcv/android/ConvertCameraImage.html Convert YUV_420_888]
* [http://boofcv.org/javadoc/integration/boofcv/android/ConvertNV21.html Convert NV21]
* [http://boofcv.org/javadoc/integration/boofcv/android/ConvertNV21.html Convert NV21]


To use these additional functions you must either use the precompiled BoofCVAndroid.jar or compile it yourself from source code.  Source code for Android integration can be found in the 'boofcv/integration/android' directory.  An ant script is provided for compiling the jar file, but needs to be modified so that it points towards your Android API installation.
To use BoofCV in your project all you need to do is add the following line to dependencies in app/build.gradle


= Having Trouble in Android Studio? =
<syntaxhighlight lang="java">
api group: 'org.boofcv', name: 'boofcv-android', version: '0.31'
</syntaxhighlight>


Here are a few common issues with using BoofCV in Android.
No need to add jars manually, cut-and-paste BoofCV's source, sacrifice a chicken, or whatever weird stuff you guys keep on wanting to do. It's very simple. Well that's a little bit of a lie. You might also want to add the following to your app/build.gradle file since in some versions there's a conflict:


* Don't compile code that's byte compatible with JDK 8
<syntaxhighlight lang="java">
* Remove conflicting libraries.
// conflicts with a Android stuff
* Look at this working [https://github.com/lessthanoptimal/BoofCV/tree/SNAPSHOT/integration/android/examples/video example].
 
Make sure your 'app/build.gradle' file has the following in it:
 
<pre>
// Remove libraries that conflict with libraries already included with Android
configurations {
configurations {
     all*.exclude group: "xmlpull", module: "xmlpull"
     all*.exclude group: "xmlpull", module: "xmlpull"
     all*.exclude group: "org.apache.commons", module: "commons-compress"
     all*.exclude group: "org.apache.commons", module: "commons-compress"
    all*.exclude group: "com.thoughtworks.xstream", module: "commons-compress"
}
}
</syntaxhighlight>


dependencies {
= Trouble Shooting =
    ['android', 'core'].each { String a -> compile group: 'org.boofcv', name: a, version: 'ENTER YOUR BOOFCV VERSION HERE' }
    ... other dependencies ...
}
</pre>


Does your code run much slower than the demo? Try switching the build to release. Click on "Build Variants" on the bottom left, then in the panel that pops up select "release" from the build variant.


= Usage Examples =
= Usage Examples =
Line 65: Line 61:


   // from NV21 to YUV Multi-Spectral
   // from NV21 to YUV Multi-Spectral
     ConvertNV21.nv21ToMsYuv(bytes,width,height,colorMS,GrayU8.class);
     ConvertNV21.nv21ToPlanarYuv(bytes,width,height,colorMS,GrayU8.class);
</syntaxhighlight>
</syntaxhighlight>


Line 74: Line 70:
Android demonstration and benchmark applications are available for download from the google play store.
Android demonstration and benchmark applications are available for download from the google play store.
* [https://play.google.com/store/apps/details?id=org.boofcv.android Demonstration]
* [https://play.google.com/store/apps/details?id=org.boofcv.android Demonstration]
* [https://play.google.com/store/apps/details?id=boofcv.benchmark.android Benchmark]


The demonstration visualizes several computer vision algorithms and provides a good estimate on what sort of runtime performance can be expected when using BoofCV on Android.  The benchmark application is primarily a diagnostic app and if you submit results helps the BoofCV developers understand how will it performs on different devices.  Additional information on each of these apps can be accessed using the links below.  Full source is available for both applications.
The demonstration visualizes several computer vision algorithms and provides a good estimate on what sort of runtime performance can be expected when using BoofCV on Android.


* [http://peterabeles.com/blog/?p=204 Demonstration Instructions]
* [http://peterabeles.com/blog/?p=204 Demonstration Instructions]
* [[Android_benchmark_app|Benchmark Wiki]]
* [[Android_benchmark_app|Benchmark Wiki]]
= Problems? =
* If you try to compile BoofCV in an Android you will get errors due to the swing code.  The solution to this problem is to not compile it inside the Android app and instead just link to its jars.
* Compiler can't find ConvertBitmap?  Make sure BoofCVAndroid.jar is included in your project.

Revision as of 20:58, 16 October 2018

BoofCV works without modification on Android systems, however you will need to convert Android specific image types into BoofCV image types. Support is provided for converting Bitmap, NV21, and YUV420 images. Camera 2 API is actively supported while camera 1 API is unsupported but can still be used.

To use BoofCV in your project all you need to do is add the following line to dependencies in app/build.gradle

api group: 'org.boofcv', name: 'boofcv-android', version: '0.31'

No need to add jars manually, cut-and-paste BoofCV's source, sacrifice a chicken, or whatever weird stuff you guys keep on wanting to do. It's very simple. Well that's a little bit of a lie. You might also want to add the following to your app/build.gradle file since in some versions there's a conflict:

// conflicts with a Android stuff
configurations {
    all*.exclude group: "xmlpull", module: "xmlpull"
    all*.exclude group: "org.apache.commons", module: "commons-compress"
    all*.exclude group: "com.thoughtworks.xstream", module: "commons-compress"
}

Trouble Shooting

Does your code run much slower than the demo? Try switching the build to release. Click on "Build Variants" on the bottom left, then in the panel that pops up select "release" from the build variant.

Usage Examples

A more detailed and working example for processing video images in Android can be found at the link below. Short code snippets are included in this section.

Full Examples:

Converting Bitmap images

    	// Easiest way to convert a Bitmap into a BoofCV type
    	GrayU8 image = ConvertBitmap.bitmapToGray(bitmap, (GrayU8)null, null);
	
    	// If you are converting a sequence of images it is faster reuse a
    	// previously declare image and buffer
    	byte[] workBuffer = ConvertBitmap.declareStorage(bitmap, null);
    	ConvertBitmap.bitmapToGray(bitmap, image, workBuffer);
    	
    	// Convert back into a Bitmap
    	ConvertBitmap.grayToBitmap(image, bitmap, workBuffer);

    	// another less efficient way
    	bitmap = ConvertBitmap.grayToBitmap(image, Bitmap.Config.ARGB_8888);
    	
    	// Functions are also provided for multi-spectral images
    	Planar<GrayF32> color = ConvertBitmap.bitmapToMS(bitmap, null, GrayF32.class, null);

Converting NV21 Images

Data from camera previews is made available in the NV21 image format.

    	// from NV21 to gray scale
    	ConvertNV21.nv21ToGray(bytes,width,height,gray)

   	// from NV21 to YUV Multi-Spectral
    	ConvertNV21.nv21ToPlanarYuv(bytes,width,height,colorMS,GrayU8.class);

Besides converting images, VisualizeImageData is provided for visualizing

Android Apps

Android demonstration and benchmark applications are available for download from the google play store.

The demonstration visualizes several computer vision algorithms and provides a good estimate on what sort of runtime performance can be expected when using BoofCV on Android.