Translate

Step-by-Step tutorial to make an Android Application which can scan text from the images that mobile camera shows using Google Vision API

Demo Video of the App that will get formed following the below tutorial.

 

Step 1:- Add the following dependency in module-level build.gradle file,

implementation 'com.google.android.gms:play-services-vision:15.0.2'


Step 2:- Add the meta-data to AndroidManifest.xml,

<meta-data android:name="com.google.android.gms.vision.DEPENDENCIES"

           android:value="orc" />


Step 3:- Add the following permission to AndroidManifest.xml,

<uses-permission android:name="android.permission.CAMERA"/>


Step 4:- Design the layout in activity_main.xml,

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity"

    android:padding="10dp">



    <SurfaceView

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:id="@+id/surface_view"

        />



    <TextView

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_alignParentBottom="true"

        android:text="No Text"

        android:id="@+id/text_view"

        android:textColor="#ffffff"

        android:textSize="20sp"

        android:layout_margin="10dp" />



</RelativeLayout>


Step 5:- Now write the following code in MainActivity.java,

import android.Manifest;

import android.content.pm.PackageManager;

import android.support.annotation.NonNull;

import android.support.v4.app.ActivityCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.util.SparseArray;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.widget.TextView;



import com.google.android.gms.vision.CameraSource;

import com.google.android.gms.vision.Detector;

import com.google.android.gms.vision.text.TextBlock;

import com.google.android.gms.vision.text.TextRecognizer;



import java.io.IOException;



public class MainActivity extends AppCompatActivity {



    SurfaceView cameraView;

    TextView textView;

    CameraSource cameraSource;

    final int RequestCameraPermissionID = 1001;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        cameraView = (SurfaceView) findViewById(R.id.surface_view);

        textView = (TextView) findViewById(R.id.text_view);



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



        if (!textRecognizer.isOperational()) {



            Log.d("MainActivity", "Detector Dependencies are not yet available");

        } else {

            cameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer)

                    .setFacing(CameraSource.CAMERA_FACING_BACK)

                    .setRequestedPreviewSize(1280, 1024)

                    .setRequestedFps(2.0f)

                    .setAutoFocusEnabled(true)

                    .build();



            cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {

                @Override

                public void surfaceCreated(SurfaceHolder holder) {



                    try {

                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {



                            ActivityCompat.requestPermissions(MainActivity.this,

                                    new String[] {android.Manifest.permission.CAMERA},

                                    RequestCameraPermissionID);

                            return;

                        }

                        cameraSource.start(cameraView.getHolder());



                    }

                    catch (IOException e)

                    {

                        e.printStackTrace();

                    }



                }



                @Override

                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {



                }



                @Override

                public void surfaceDestroyed(SurfaceHolder holder) {



                    cameraSource.stop();



                }

            });



            textRecognizer.setProcessor(new Detector.Processor<TextBlock>() {

                @Override

                public void release() {



                }



                @Override

                public void receiveDetections(Detector.Detections<TextBlock> detections) {



                    final SparseArray<TextBlock> items = detections.getDetectedItems();

                    if(items.size() != 0)

                    {

                        textView.post(new Runnable() {

                            @Override

                            public void run() {

                                StringBuilder stringBuilder = new StringBuilder();



                                for(int i=0;i<items.size();++i) {

                                    TextBlock item = items.valueAt(i);

                                    stringBuilder.append(item.getValue());

                                    stringBuilder.append("\n");

                                }



                                textView.setText(stringBuilder.toString());



                            }

                        });

                    }



                }

            });



        }



    }



    @Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {



        switch(requestCode) {



            case RequestCameraPermissionID:

                if (grantResults[0] == PackageManager.PERMISSION_GRANTED ) {



                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {



                        return;

                    }

                    try {

                        cameraSource.start(cameraView.getHolder());

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                }



        }



    }

}

Comments

Popular posts from this blog

Step-by-Step tutorial to build an android application which reads text from an image like OCR, using Google Vision API

Tutorial to make a SimSimi Chatbot Android Application

Step-by-Step Tutorial to make an Unlock Splash Screen Android Application

You can now send voice messages on Instagram

Wanna use Themed WhatsApp.....??

Read This if you want to test your Android Applications BUT do not have a high configuration PC to test it on in-built Android Emulators

Step-by-Step Tutorial to create an Android Application with Transition Animation presented through Light Bulb

Web Terminology

How to Stop LinkedIn From Telling Someone You Viewed Their Profile