Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Mobile Vision Text API Example

I am currently writing code that should be able to view a picture of text and then extract the text from the picture for android based devices. I did some research online and found that Google provides their own API called "Mobile Vision" (a package with many items i.e. text recognition, facial recognition, etc). However, in their demos they only demonstrate live text recognition. I was wondering if anyone could give me an example of text recognition on a still image using the Mobile Vision API. Any help is welcome. Thanks.

like image 361
Andrew Avatar asked Jul 07 '16 20:07

Andrew


People also ask

What is Mobile Vision API?

The Mobile Vision API has detectors that let you find objects in photos and video. This training will guide you to install a sample application for Android that will detect faces in photos in real time.

Is Google Vision API free?

Pricing is tiered - the first 1000 units used each month are free, units 1001 to 5,000,000 are priced as marked, etc. If you pay in a currency other than USD, the prices listed in your currency on Cloud Platform SKUs apply.


1 Answers

The Google Play Services Mobile Vision API Documentation describes how to do this, you can use the TextRecognizer class to detect text in Frames. Once you have the Bitmap image you can then convert it into a frame and do processing on it. See below for an example.

// imageBitmap is the Bitmap image you're trying to process for text
if(imageBitmap != null) {

    TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build();

    if(!textRecognizer.isOperational()) {
        // Note: The first time that an app using a Vision API is installed on a
        // device, GMS will download a native libraries to the device in order to do detection.
        // Usually this completes before the app is run for the first time.  But if that
        // download has not yet completed, then the above call will not detect any text,
        // barcodes, or faces.
        // isOperational() can be used to check if the required native libraries are currently
        // available.  The detectors will automatically become operational once the library
        // downloads complete on device.
        Log.w(LOG_TAG, "Detector dependencies are not yet available.");

        // Check for low storage.  If there is low storage, the native library will not be
        // downloaded, so detection will not become operational.
        IntentFilter lowstorageFilter = new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW);
        boolean hasLowStorage = registerReceiver(null, lowstorageFilter) != null;

        if (hasLowStorage) {
            Toast.makeText(this,"Low Storage", Toast.LENGTH_LONG).show();
            Log.w(LOG_TAG, "Low Storage");
        }
    }


    Frame imageFrame = new Frame.Builder()
            .setBitmap(imageBitmap)
            .build();

    SparseArray<TextBlock> textBlocks = textRecognizer.detect(imageFrame);

    for (int i = 0; i < textBlocks.size(); i++) {
        TextBlock textBlock = textBlocks.get(textBlocks.keyAt(i));

        Log.i(LOG_TAG, textBlock.getValue()); 
        // Do something with value
    }
}

You also need to ensure you include the mobile vision dependency in the module's build.gradle

dependencies {
    compile 'com.google.android.gms:play-services-vision:9.4.0'
} 

And also include the following in the app's Android Manifest

<meta-data
    android:name="com.google.android.gms.vision.DEPENDENCIES"
    android:value="ocr" />
like image 124
businesscasual Avatar answered Oct 09 '22 13:10

businesscasual