Hoy vamos a mostrar un ejemplo de scanner OCR en android en tiempo real con la cámara del dispositivo, el objetivo de este post es mostrar la funcionalidad de reconocimiento de caracteres de Google Visión aplicada a un pequeño proyecto hola mundo en android.
Mediante esta api de Google podemos detectar y extraer texto de cualquier imagen.
En este proyecto utilizaremos esta herramienta para obtener texto mediante la cámara del dispositivo en tiempo real.
Puedes ver más información sobre Google Visión en su página web.

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.
UdemyPara comenzar creamos un nuevo proyecto en Android Studio, dejamos todo por default y elegimos una plantilla vacía.
Al finalizar el proyecto tendremos una app capaz de apuntar a cualquier objeto con algún texto y poder pasarlo a la app con una velocidad bastante aceptable.
Vamos a revisar el codigo fuente destacado del proyecto.
MainActivity.java
Declaramos variables
private CameraSource mCameraSource; private SurfaceView mCameraView; private TextView textview;
En nuestro onCreate
setContentView(R.layout.activity_main); mCameraView = (SurfaceView) findViewById(R.id.surfaceView); textview = (TextView) findViewById(R.id.text_view); iniciarCamara();
En el metodo iniciarCamara
final TextRecognizer textRecognizer = new TextRecognizer.Builder(getApplicationContext()).build(); if (!textRecognizer.isOperational()) { Log.w("JMR", "Detector dependencies not loaded yet"); } else { mCameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer) .setFacing(CameraSource.CAMERA_FACING_BACK) .setRequestedPreviewSize(1280, 1024) .setAutoFocusEnabled(true) .setRequestedFps(2.0f) .build(); mCameraView.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[]{Manifest.permission.CAMERA}, 2517); return; } mCameraSource.start(mCameraView.getHolder()); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCameraSource.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()); } }); } } }); }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:weightSum="5" tools:context="com.easycodigo.ocrdemo.MainActivity"> <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="4" /> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_margin="8dp" android:layout_weight="1" android:gravity="center" android:textStyle="bold" android:text="@string/txt_message" android:textColor="@android:color/black" android:textSize="20sp" /> </LinearLayout>
Necesitamos además agregar una etiqueta a nuestros strings
<string name="txt_message">TEXTO</string>
En nuestro build.gradle de App implementamos
implementation 'com.google.android.gms:play-services-vision:11.0.4'
Y por último en nuestro android manifest no olvidamos agregar permisos de cámara y una meta de Google Vision.
<uses-permission android:name="android.permission.CAMERA"/> ... <meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="ocr"/>
Al ejecutar el proyecto veremos nuestro scanner OCR en android en funcionamiento.
Si esta información sobre cómo programar un scanner OCR en android te ha sido de utilidad no olvides compartirla en tus redes sociales favoritas y dejarnos un comentario en la sección de abajo si tienes cualquier duda al respecto, será un placer ayudarte.
¡Hasta luego!