Firebase ML Kit 101 : Barcode Scanning
Barcode Scanning is used to read the data encoded in the barcodes.
Barcodes can store data into a printed/digital image which can be read easily by our apps. In the case of 2D QR Codes, we can also encode structured data such as contact information or WiFi network credentials.
ML Kit’s Barcode Scanning API works on the device itself which makes it fast and accurate.
Firebase ML Kit Series
In this series of articles, we will deep dive into different ML Kit APIs that it offers…
- Firebase ML Kit 101 : Introduction
- Firebase ML Kit 101 : Text Recognition
- Firebase ML Kit 101 : Face Detection
- Firebase ML Kit 101 : Barcode Scanning (you’re here)
- Firebase ML Kit 101 : Image Labeling
- Firebase ML Kit 101 : Landmark Recognition
- Firebase ML Kit 101 : Language Identification
- Firebase ML Kit 101 : Smart Reply
Let’s look into the ML Kit’s Barcode Scanning API and how we can integrate it into our apps.
ML Kit’s Barcode Scanning
The ML Kit’s Barcode Scanning API provides the following key features.
- The API can read almost all standard barcode formats.
- The API by default scans for all supported barcode formats. However, you can speed up this process by explicitly specifying the formats you expect it to read.
- The API can also parse structured data stored in 2D QR codes.
Data such as URLs, contact information, email addresses, phone numbers, WiFi connection information etc.
Note: Firebase ML Kit is in beta as of January ‘19.
Let’s Code!
Step 1 : Add Firebase to your app
Offcourse! You can add Firebase to your app by following the steps mentioned here.
Step 2 : Include the dependency
You need to include the ML Kit dependency in your app-level build.gradle
file.
dependencies {
// ... implementation 'com.google.firebase:firebase-ml-vision:19.0.2'
}
Step 2.5 : Specify the ML models (optional)
For on-device APIs, you can configure your app to automatically download the ML models after it is installed from the Play Store. Otherwise, the model will be downloaded on the first time you run the on-device detector.
To enable this feature you need to specify your models in your app’s AndroidManifest.xml
file.
<application ...>
...
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="barcode" />
<!-- To use multiple models: android:value="barcode,model2" -->
</application>
Step 3 : Get! — the Image
ML Kit provides an easy way to scan barcodes from variety of image types like Bitmap
, media.Image
, ByteBuffer
, byte[]
, or a file on the device. You just need to create a FirebaseVisionImage
object from the above mentioned image types and pass it to the model.
In my sample app I’ve used a Bitmap
image to create a FirebaseVisionImage
object.
val image = FirebaseVisionImage.fromBitmap(bitmap)
To create FirebaseVisionImage
object from other image types, please refer to the official documentation.
Step 4 : Set! — the Model
Now, It’s time to prepare our Barcode Scanning model.
val detector = FirebaseVision.getInstance().visionBarcodeDetector
To speed up the barcode scanning process, we can also configure our model to detect only barcode formats that we expect it to read.
val options = FirebaseVisionBarcodeDetectorOptions.Builder()
.setBarcodeFormats(
FirebaseVisionBarcode.FORMAT_QR_CODE,
FirebaseVisionBarcode.FORMAT_AZTEC
)
.build()val detector = FirebaseVision.getInstance().getVisionBarcodeDetector(options)
For the full list of barcode formats that ML Kit supports, please refer to the official documentation.
Step 5 : Gooo!
Finally, we can pass our image to the model for Barcode Scanning.
detector.detectInImage(image)
.addOnSuccessListener {
// Task completed successfully
}
.addOnFailureListener {
// Task failed with an exception
}
Step 6 : Extract the information
Voilà! That’s it!
If the barcode scanning was successful, the success listener will receive a list of FirebaseVisionBarcode
objects. Each FirebaseVisionBarcode
object represents a barcode that was detected and contains all the information related to it.
You can extract all this information like this.
Have a Look!
This is what you can achieve with ML Kit’s Barcode Scanning API.
Here’s the source code for the above app…
Firebase ML Kit Series
Don’t forget to have a look at other ML Kit APIs covered this series of articles.
- Firebase ML Kit 101 : Introduction
- Firebase ML Kit 101 : Text Recognition
- Firebase ML Kit 101 : Face Detection
- Firebase ML Kit 101 : Barcode Scanning
- Firebase ML Kit 101 : Image Labeling
- Firebase ML Kit 101 : Landmark Recognition
- Firebase ML Kit 101 : Language Identification
- Firebase ML Kit 101 : Smart Reply