TensorFlow is an open-source software library which was first introduced by Google in November 2015. It is used in Android to implement Machine Learning, and this library is mainly used for Machine Intelligence.
The core of the TensorFlow library is built in C++, but the programmers can write the TensorFlow software in either C++ or Python.
The TensorFlow library was initially designed for internal use, but later, its features were used in its live products. It is one of the best alternatives to Google Cloud Vision API. And, there is no need for an internet connection too; we can also work offline with TensorFlow.
It is an easy and fast way to classify and detect objects from an image directly by using one’s mobile device’s camera.
Many examples of TensorFlow are available on its official website.
If we want to build the TensorFlow from scratch, then we need to install the Android NDK, Bazel (primary build system for Android Studio), and build tools.
Google’s open source TensorFlow project includes three apps which we can easily find on its official website, i.e., TF Classify, TF Detect, and TF Stylize.
It uses Google’s inception model and classifies images which you will show to it in real-time. It then display results after classifying these objects along with a confidence level.
It detects or tracks people in the camera’s preview in real-time by using a model which is based on Scalable Object detection using Deep Neural Networks.
It restyles the preview image in a different manner by using a model which is based upon A Learned Representation for the artistic style.
In this post, we are going to show you some features of TF Classify: How it works and the files that need to be used.
Some Essential Parts for Building TensorFlow in Android
- If we want to build TensorFlow in Android, then we have to use JNI (Java Native Interface) to call C++ functions like loadModel, getPredictions, etc.
- We also need a jar (Java API) file and a .so (C++ compiled file) file.
- To classify images, we must have a pre-trained model file and a label file for this.
Our library folder should look like this:
As I discussed above here, libandroid_tensorflow_inference_java.jar is a native Java library and lintensorflow_inference.so is a native shared library.
Inside the assets folder, the model file and another label file should look like this:
Here, it is a prebuilt TensorFlow graph which describes the actual operations needed to perform this classification on the image data. The actual logic and results come from this model file. It takes more than 50 MB space, and that’s why the apk size is bigger.
This is a label file which contains 1000 classifications and effects the results (like, bottle, watch, pen, etc.). It is defined by ImageNet Large Scale Visual Recognition Challenge, which the model was built on.
How the Android TensorFlow Example Uses the C++ Interface?
- When we start the Application, it first launches the java and then starts the fragment, CameraConnectionFragment.java.
- After this, the Fragment setup runs and the camera takes the image from the user in real time. This instantiates java.
- After this, the listener goes to the Classifier,e., ClassifierActivity.java. Here it receives the image and carries out the classification process. The results get displayed along with a confidence level as discussed earlier.
Inside ClassifierActivity.java, we can modify the constants according to the path, but it looks like this:
private static final int INPUT_SIZE = 224; private static final int IMAGE_MEAN = 117; private static final float IMAGE_STD = 1; private static final String INPUT_NAME = "input"; private static final String OUTPUT_NAME = "output"; private static final String MODEL_FILE = "file:///android_asset/tensorflow_inception_graph.pb"; private static final String LABEL_FILE = "file:///android_asset/imagenet_comp_graph_label_strings.txt";
Here, we will use the model file and label file as discussed above in this activity.
Classifying the Images Using TensorFlow in Our Android Applications
Let’s see some samples of recognition of images.
Here, in the above pictures, we can see very well how TensorFlow works and classifies the images captured by the camera in real time. It also display these results with its confidence level.
This confidence score which defines the guessing level can be understood like this:
1.000 is for perfect confidence
0.000 is for zero confidence
We can say that this classification is correct 80% of the times.
This results from the fact that this model is trained against millions of images. It simply looks at the objects and classifies them as its best guesses by referring to the 1000-object classification that it already knows.
Sometimes, it can also take additional time to accurately classify the image, but this extra time only makes a small difference towards the eventual image framing and displaying of the results. But, most of the time, it will guess correctly.
Because it is launched as an open-source library and many people accept this for their development environment and have been adopting it to design and solve real-world problems. It is also very flexible to design and test new networks.
Also, many institutes around the world are adding TensorFlow in their machine learning courses.
After designing the network in TensorFlow, we can easily export it to a platform like Android and iOS apps.
This was a small introduction of TensorFlow in Android. It is an open-source library which is used for Machine learning as I discussed above. It classifies images, detects people, and also stylizes objects. This is the best alternative for cloud vision API. TensorFlow also works in an offline mode. Some primary builds are necessary to work with TensorFlow, like we need to install Android NDK and Bazel first and then the other build tools. Next, we can also make a custom TensorFlow model in our Android application.
The three open-source Google Apps that I mentioned earlier, i.e., TF Classify, TF Detect, and TF Stylize, also use some features of the TensorFlow Machine learning library.
So, get started with TensorFlow, as it is quickly gaining widespread popularity and is pretty important in Android Development.
Keep visiting AcadGild’s blog page for more updates on upcoming Android technologies!
Enroll for Our Android Developer Training and lead a successful Android developer career.