2011-05-27 12 views
5

Estoy trabajando en una aplicación que necesita convertir la imagen jpeg a texto para que pueda identificar el texto escrito allí en la imagen. Por favor dame una guía para hacer eso.android: Extraiga el texto de la imagen

+0

posible duplicado de [androide OCR?] (Http://stackoverflow.com/questions/1106202/android-ocr) – EboMike

+0

Google lanzó recientemente una API de OCR para lograrlo: https://developers.google.com/vision/text-overview – Wirling

Respuesta

1

EXTRACTO DE Making OCR app using Tesseract.

Nota: Estas instrucciones son para Android SDK r19 y Android NDK R7C. En Ubuntu de 64 bits, es posible que deba instalar la biblioteca de compatibilidad ia32-libs de 32 bits. También necesitarías las variables de PATH apropiadas añadidas.

Descarga la fuente o copia esta git repository. Este proyecto contiene herramientas para compilar las bibliotecas Tesseract, Leptonica y JPEG para su uso en Android. Contiene un proyecto de biblioteca Eclipse Android que proporciona una API Java para acceder a las API compiladas de Tesseract y Leptonica. No necesitas ojos, dos códigos, puedes prescindir de ellos.

construir este proyecto utilizando estos comandos (aquí, Tess-dos es el directorio dentro Tess de dos - el que está en el mismo nivel que de Tess y dos de prueba):

cd <project-directory>/tess-two 
ndk-build 
android update project --path . 
ant release 

Ahora importar el proyecto como una biblioteca en Eclipse.

File -> Import -> Existing Projects into workspace -> tess-two directory<code>. Right click the project, Android Tools -> Fix Project Properties. Right click -> Properties -> Android -> Check Is Library 

Configure su proyecto para utilizar el proyecto de dos Tess como un proyecto de biblioteca:

Right click your project name -> Properties -> Android -> Library -> Add, and choose tess-two. 

Ahora está listo a OCR cualquier imagen usando la biblioteca.

Primero, necesitamos obtener la imagen. Para eso, encontré un código simple para capturar la imagen aquí. Después de tener el mapa de bits, solo necesitamos realizar el OCR, que es relativamente fácil. Esté seguro de corregir el tipo de rotación y la imagen haciendo algo como:

// _path = path to the image to be OCRed 
ExifInterface exif = new ExifInterface(_path); 
int exifOrientation = exif.getAttributeInt(
     ExifInterface.TAG_ORIENTATION, 
     ExifInterface.ORIENTATION_NORMAL); 

int rotate = 0; 

switch (exifOrientation) { 
case ExifInterface.ORIENTATION_ROTATE_90: 
    rotate = 90; 
break; 
case ExifInterface.ORIENTATION_ROTATE_180: 
    rotate = 180; 
break; 
case ExifInterface.ORIENTATION_ROTATE_270: 
    rotate = 270; 
break; 
} 

if (rotate != 0) { 
    int w = bitmap.getWidth(); 
    int h = bitmap.getHeight(); 

    // Setting pre rotate 
    Matrix mtx = new Matrix(); 
    mtx.preRotate(rotate); 

    // Rotating Bitmap & convert to ARGB_8888, required by tess 
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false); 
} 
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); 

Ahora tenemos la imagen del mapa de bits, y simplemente podemos usar el TessBaseAPI para ejecutar el OCR gusta:

TessBaseAPI baseApi = new TessBaseAPI(); 
// DATA_PATH = Path to the storage 
// lang = for which the language data exists, usually "eng" 
baseApi.init(DATA_PATH, lang); 
// Eg. baseApi.init("/mnt/sdcard/tesseract/tessdata/eng.traineddata", "eng"); 
baseApi.setImage(bitmap); 
String recognizedText = baseApi.getUTF8Text(); 
baseApi.end(); 
(You can download the language files from [here][2] and put them in a directory on your device – manually or by code) 

Ahora que tienes el texto OCRed en la variable recognitedText, puedes hacer prácticamente cualquier cosa con él: ¡traducir, buscar, cualquier cosa! PD. Puede agregar compatibilidad de varios idiomas teniendo una preferencia y luego descargando el archivo de datos de idioma requerido desde here. Incluso puede ponerlos en la carpeta de activos y copiarlos en la tarjeta SD al inicio.

Solución de problemas

  • Acerca de la actualización PATH - Es necesario actualizar la variable PATH para los comandos a la función, de lo contrario se vería un comando no se encuentra el error. Para Android SDK, agregue la ubicación de las herramientas del SDK y los directorios de herramientas de plataforma a la variable de entorno PATH. Para Android NDK, use el mismo proceso para agregar el directorio android-ndk a la variable PATH.
  • Maven-ising - Compruebe esto post por James Elsey. También menciona que lo consiguió trabajando en Windows sin ningún problema.
  • También puede intentar Ctrl + F-ing su problema en esta página, alguien podría haberlo encontrado y publicado una solución en los comentarios.
+0

No escribió esto; indique claramente que lo ha copiado de la publicación del blog (para lo cual agregó el enlace) para evitar que se lo tome como plagio. – laalto

+0

Antes solía publicar los enlaces de inmediato, pero un miembro de Stack Overflow fue quien me dijo que pusiera los datos de cualquier enlace en respuesta en caso de que el enlace no funcionara. – Confuse

+0

Sí. No publique respuestas solo de enlace. No publiques contenido de otras personas como propio. – laalto

Cuestiones relacionadas