2. OCR - waterglass2s/GraduationProject GitHub Wiki

Development Environment

Android Studio compileSdkVersion 29 / buildToolsVersion 29.0.3

Library version

google vision API - 17.0.0

How to use OCR (google vision API)

Before you start, You have to make 'Google cloud project' (*Make sure that billing is enabled for your Cloud project)

  1. At your project console, enable the Mobile Vision API
  2. Create a service account
  3. Create a service account key
  4. Add dependencies at build.gradle
    ex) implementation 'com.google.android.gms:play-services-vision:17.0.0'
    --> More information, Click here

Then, you can use OCR at Android Studio.

Use OCR with realtime image using Camera

  1. First define view
cameraView = (SurfaceView)findViewById(R.id.surface_view);
textView = (TextView)findViewById(R.id.text_view);
  1. Get Camera source
TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build();
        if(!textRecognizer.isOperational())
        {
            Log.w("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(com.example.graduationproject.ocr.MainActivity.this,
                                    new String[]{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() {

                }
  1. When gets the result
 @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() {
//if you want to check result, get here
                                }
                            }
                        });
                    }
                }
⚠️ **GitHub.com Fallback** ⚠️