Problemas de reconocimiento de caracteres de Tesseract en Android (¿pero no en iOS?)

He creado una aplicación que utiliza Tesseract (V3.03 rc1) para identificar algunas cadenas de text específicas. Estos, lamentablemente, están impresos en una fuente personalizada que requiere que compile mi propio file de datos entrenados. He creado la aplicación en ambos iOS (usando https://github.com/gali8/Tesseract-OCR-iOS para inspiración) y Android (usando https://github.com/rmtheis/tess-two/ para get inspiración bien).

El flujo de trabajo para ambas plataforms es el siguiente:

  • Selecciono un cuadro delimitador en la pantalla de vista previa para que pueda recortar el text relevante y recortar la image en consecuencia.

  • Utilizo OpenCV para get una image binaria (utilizando la function de umbral adaptativo de OpenCV con los mismos parameters para ambas plataforms)

  • Paso esta image binaria a Tesseract. Ambas plataforms (Android e iOS) usan el mismo file de datos entrenados.

Y, sin embargo, iOS reconoce perfectamente las cadenas de text, mientras que Android sigue identificando erróneamente ciertos caracteres (6s para Ss, As para Hs).

En ambas plataforms, uso la misma cadena de list blanca, deshabilito load_type_dawg y load_system_dawg, y también elijo save las opciones de blob.

¿Alguien ha encontrado este tipo de situación antes? ¿Me estoy perdiendo una configuration en Android que se maneja automáticamente en iOS? ¿Hay algo especial sobre Android que no se me haya pasado por la mente?

Cualquier pensamiento o consejo sería muy apreciado!

Entonces, después de mucho trabajo, descubrí qué estaba mal con mi aplicación de Android (por suerte, no fue un problema con Tesseract en absoluto). Como estoy más familiarizado con las aplicaciones de iOS que con Android, no estaba seguro de cómo podía cargar el file de datos entrenados en la aplicación sin requerir que el usuario cargue el file en su dispositivo de almacenamiento externo. Encontré inspiración en este proyecto ( http://www.codeproject.com/Tips/840623/Android-Character-Recognition ), ya que cargan automáticamente el file de datos capacitados.

Sin embargo, entendí mal cómo funcionaba. Originalmente pensé que el TessDataManager realizó una búsqueda de files en la carpeta local tesseract / tessdata del proyecto para get el file de datos capacitado (como lo hago también en iOS). Sin embargo, eso no es lo que hace. Más bien, comtesting la estructura de files interna (data / data / projectname / files / tesseract / tessdata / traineddatafilegoeshere) para ver si el file existe y, si no lo hace, copy el file de datos capacitados que guarda en los Recursos / Directorio sin formatting En mi caso, de forma pnetworkingeterminada, el file eng, por lo que nunca lee mi file de fuente personalizado.

Espero que esto ayude a otra persona que tenga problemas similares. ¡Gracias a Robin y RmTheis por toda su ayuda!