traineddata tess4j source open libreria example ejemplo java jni ocr tesseract

tess4j - tesseract ocr java



Invocando a través de línea de comando contra JNI (3)

Necesito invocar tesseract OCR (es una biblioteca de código abierto en C ++ que tiene reconocimiento óptico de caracteres) desde un servidor de aplicaciones Java. En este momento es bastante fácil ejecutar el ejecutable usando Runtime.exec (). La lógica básica sería

  1. Guarde la imagen que se encuentra actualmente en la memoria para archivar (a .tif)
  2. pase el nombre del archivo de imagen al programa de línea de comando de tesseract.
  3. leer en el archivo de texto de salida de Java usando FileReader.

¿Cuántas mejoras en términos de rendimiento puedo obtener al escribir un contenedor JNI para Tesseract? Lamentablemente, no existe un contenedor JNI de código abierto que funcione en Linux. Tendría que hacerlo yo mismo y me pregunto si el beneficio vale el costo de desarrollo.


Es difícil decir si valdría la pena. Si supone que si lo hace en proceso a través de JNI, el código OCR puede acceder directamente a los datos de la imagen sin tener que escribirlo en un archivo, entonces eliminaría cualquier restricción de E / S del disco allí.

Recomiendo ir con el enfoque más simple y solo realizar la opción JNI si el rendimiento no es aceptable. Al menos entonces podrás hacer una evaluación comparativa y estimar los aumentos de rendimiento que puedas realizar.


Estoy de acuerdo con tweakt. No use JNI si no hay razones de rendimiento para hacer esto. La estabilidad de la aplicación también podría estar en peligro si utiliza llamadas JNI si hay algunas posibilidades de pérdidas de memoria o incluso bloqueos en la capa JNI o ​​en el OCR. Esto nunca sucederá si lo usa a través de la interfaz de línea de comando (toda la memoria se liberará en la salida del programa y todas las terminaciones anormales del programa se pueden verificar en el código de la persona que llama).


Si persigue su propio contenedor, le recomiendo que consulte JNA . Le permitirá llamar a la mayoría de las bibliotecas "nativas" que solo escriben código Java, y le dará más ayuda que JNI sin procesar para hacerlo de manera segura. JNA está disponible para la mayoría de las plataformas.