Pregunta

Necesito invocar tesseract OCR (es una biblioteca de código abierto en C ++ que hace 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. Guardar la imagen que se encuentra actualmente en la memoria en un archivo (a .tif)
  2. pase el nombre del archivo de imagen al programa de línea de comando tesseract.
  3. leer en el archivo de texto de salida de Java usando FileReader.

¿Cuántas mejoras en términos de rendimiento es probable que obtenga escribiendo un contenedor JNI para Tesseract? Desafortunadamente, no hay 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.

¿Fue útil?

Solución

Es difícil decir si valdría la pena. Si supone que si se realiza en el proceso a través de JNI, el código OCR puede acceder directamente a los datos de la imagen sin tener que escribirlos 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 emprender la opción JNI si el rendimiento no es aceptable. Al menos, entonces podrá realizar algunas evaluaciones comparativas y estimar las mejoras de rendimiento que podría obtener.

Otros consejos

Si persigue su propio contenedor, le recomiendo que eche un vistazo a JNA . Le permitirá llamar a la mayoría de los "nativos" bibliotecas que escriben solo código Java, y le brindarán más ayuda que JNI sin procesar para hacerlo de forma segura. JNA está disponible para la mayoría de las plataformas.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top