Red de conocimiento informático - Conocimiento informático - Cómo crear una aplicación de OCR para Android utilizando el motor de OCR de código abierto Tesseract

Cómo crear una aplicación de OCR para Android utilizando el motor de OCR de código abierto Tesseract

Para compilar Tesseract para la plataforma Android, necesita utilizar las herramientas tesseract-android proporcionadas por Google.

Cómo obtener el código:

git clone /p/tesseract-android- tools/

p>

Abra el archivo README y realice los siguientes pasos en la herramienta de línea de comando:

cd

curl - O /files/tesseract-ocr-3.02.02 .tar.gz

curl -O /files/ leptonica-1.69.tar.gz

tar -zxvf tesseract-ocr-3.02 .02.tar.gz

tar -zxvf leptonica-1.69.tar.gz

rm -f tesseract-ocr-3.02.02.tar.gz

rm -f leptonica-1.69.tar.gz

mv tesseract-3.02.02 jni/com_googlecode_tesseract_android/src

mv leptonica-1.69 jni/com_googlecode_leptonica_android/src

ndk-build -j8

proyecto de actualización de Android --target 1 --path .

ant debug (lanzamiento)

Nota: si está utilizando NDK r9, se producirá un error durante la compilación:

p>

el formato no es una cadena literal ni argumentos de formato [-Werror=format-security]

La solución está en Application.mk :

APP_CFLAGS += -Wno- error=format-security

Una vez completada la compilación, se generarán class.jar y algunos *.so.

Una aplicación OCR para Android}

Así de simple. Ahora puedes obtener imágenes para OCR de tres maneras:

Selecciona una imagen en la galería, selecciona Enviar o Compartir y luego selecciona la aplicación OCR

En AndroidManifest para agregar un xml. IntentFilter a la aplicación OCR

Agregue un IntentFilter a la aplicación OCR.

Después de obtener el URI, decodifica el URI para obtener el mapa de bits:

if (Intent.ACTION_SEND.equals(intent.getAction( )) ){getParcelableExtra(Intent.EXTRA_STREAM);

uriOCR(uri);

}

uriOCR vacío privado(Uri uri) {

if (uri != null) {

InputStream es = null;

prueba {

es = getContentResolver().openInputStream(uri);

p>

Mapa de bits mapa de bits = BitmapFactory.decodeStream(is);

mImage.setImageBitmap(mapa de bits);

doOCR(mapa de bits);

} catch (FileNotFoundException e) {

// TODO Bloque de captura generado automáticamente

e.printStackTrace();

} finalmente {

if (is ! = null) {

prueba {

is.close();

} catch (IOException e) {

//TODO genera automáticamente el bloque catch

e.printStackTrace();

}

}

}

}

Inicie la aplicación OCR, seleccione un mapa de la galería para OCR

Envíe un Intent para llamar a la galería y obtenga el URI devuelto en onActivityResult para OCR:

Intención intención = nueva Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(intent, REQUEST_PICK_PHOTO);

Inicie la aplicación OCR y realice el OCR después de tomar la foto

Para obtener imágenes de alta calidad, agregue la ruta de la imagen en el Intent.

Después de regresar, puede usar directamente la ruta de la imagen para decodificar:

private void despachoTakePictureIntent() {

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE _CAPTURE);

// Asegúrese de que haya una actividad de cámara para manejar la intención

if (takePictureIntent.resolveActivity(getPackageManager( ))) !!= null) {

// Cree el archivo donde se encuentra la foto

Archivo photoFile = null;

prueba {

photoFile = createImageFile();

} catch ( IOException ex) {

p>

// Se produjo un error al crear el archivo

}

//Continuar solo si el archivo se ha creado correctamente. creado

if (photoFile != null) {

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,

Uri.fromFile(photoFile)). fromFile(photoFile));

startActivityForResult( takePictureIntent, REQUEST_TAKE_PHOTO);

}

}

}

}

Finalmente, no olvide descargar el paquete de idioma y enviarlo al directorio tessdata de la tarjeta de memoria.