Cómo crear una aplicación de OCR para Android utilizando el motor de OCR de código abierto Tesseract
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); 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) { p> //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.