¿No sería genial si tuviéramos algún paquete programado que podría aceptar algunos archivos PDF y devolver el texto que contiene?? Resulta que tenemos una biblioteca para hacer exactamente eso. Tesseract es un marco de código abierto escrito en C ++ que nos permite trabajar con imágenes PNG, imágenes JPG y archivos PDF y devolver el texto que contiene el archivo para que podamos usar ese texto como queramos.
En esta lección sobre Tesseract con Java y Maven, veremos cómo podemos desarrollar una aplicación Java simple que acepte un archivo PDF y devuelve el texto que contiene con Tesseract OCR Service. También veremos por qué Tesseract tiene tanto éxito. Una de las razones por las que Tesseract es un paquete tan exitoso es que está respaldado por Google mismo.
Para trabajar con esta lección, es importante instalar el motor Tesseract OCR en su sistema. Dirígete al repositorio oficial de GitHub para seguir las instrucciones de instalación. Directamente del repositorio de Github, “Tesseract se desarrolló originalmente en los laboratorios Hewlett-Packard Bristol y en Hewlett-Packard Co, Greeley Colorado entre 1985 y 1994, con algunos cambios más realizados en 1996 a Port to Windows, y algunos C ++ Izing en 1998. En 2005, Tesseract fue de origen abierto por HP. Desde 2006 es desarrollado por Google."
Comenzaremos haciendo un proyecto Java simple que se basa en Maven y contiene la siguiente dependencia de Maven:
neto.Fuente de la fuente.Tess4J Tess4J 4.3.0
Esta es una dependencia de Maven que proporciona un proyecto de envoltorio al que puede referir aquí para obtener más comprensión. Desde el sitio web, Tess4J simplemente se describe como un envoltorio Java JNA para Tesseract OCR API.
Estructura del proyecto
Tenemos un proyecto muy simple con un solo archivo de código fuente. La estructura del proyecto actual se verá así:
Como mencionamos, tenemos un solo archivo de código fuente que utilizaremos. Podríamos poner un archivo PDF en la carpeta de recursos un poco más tarde para demostrar leer un archivo PDF y extraer texto de él.
Construir objeto Tesseract
Una vez que tenemos una clase de código fuente de muestra donde podemos comenzar (como se muestra en la estructura del proyecto en la última sección), podemos comenzar a agregarle algún código. A partir de ahora, es una clase vacía:
paquete com.Linuxhint.tess4j;
clase pública tess4jdemo
Como hemos hablado sobre Tesseract antes, Tesseract se puede usar para extraer texto de documentos como documentos PDF. Para hacer esto, tenemos que entrenar la biblioteca de Tesseract sobre cómo se estructuran los documentos y qué texto puede contener.
Además de esto, como Tesseract admite aproximadamente 37 idiomas, debe informar explícitamente a Tesseract sobre qué idioma estamos leyendo en este momento (si esa información está realmente disponible para nosotros).
Definiremos un método Java simple para Tesseract:
Private static tesseract getTesseract ()
Dentro de este método, podemos hacer una nueva instancia de Tesseract desde la biblioteca Maven que agregamos anteriormente:
Tesseract instancia = new Tesseract ();
Solo para dejar en claro, aquí está la declaración de importación que tenemos para la instanciación anterior:
red de importación.Fuente de la fuente.Tess4J.Tesseract;
A continuación, agregaremos algunas propiedades a esta instancia, como donde se pueden encontrar los datos de capacitación para esta biblioteca. Esto es muy importante ya que sin establecer una ruta para los datos de capacitación, Tesseract puede proporcionar resultados altamente inexactos. Afortunadamente, los datos de capacitación para Tesseract vienen con su instalación, por lo que todo lo que necesita hacer es mirar el lugar correcto. Así es como establecemos la ruta de datos de entrenamiento:
instancia.setDatapath ("/usr/local/cella/tesseract/4.0.0/compartir/tessData ");
instancia.setLanguage ("Eng");
Como estamos utilizando un Macintosh para este tutorial, nuestra ruta de datos se parece a lo anterior. Además de la ruta de datos de capacitación, también le proporcioné a Tesseract la información que utilizaremos el Inglés idioma.
A continuación, le diremos a Tesseract que la salida que necesitamos es en el formato algo llamado Hocr formato. Básicamente, el formato HOCR es un formato simple basado en XML que contiene dos cosas:
Podemos habilitar el formato HOCR como:
instancia.sethocr (verdadero);
Finalmente, puedo devolver la instancia que hicimos anteriormente. Aquí está el código fuente completo del método que acabamos de definir aquí:
Private static tesseract getTesseract ()
Tesseract instancia = new Tesseract ();
instancia.setDatapath ("/usr/local/cella/tesseract/4.0.0/compartir/tessData ");
instancia.setLanguage ("Eng");
instancia.sethocr (verdadero);
instancia de retorno;
Usando Tesseract
Puede que no lo creas, pero configurar un objeto Tesseract fue tan fácil. Podemos usarlo ahora con una definición simple en una función principal:
public static void main (string [] args)
Tesseract tesseract = getTesseract ();
¿Puedes adivinar lo que queda ahora?? Lo único que debemos hacer ahora es proporcionar un archivo a Tesseract que puede analizar y leer su texto. Ahora podemos, recoger fácilmente un documento PDF para leerlo, pero eso suena bastante textual. ¿Por qué no probamos una imagen de inmediato??
Para esta lección, creamos una imagen muy simple que pondremos para usar:
Una vez que tenga esta imagen (o cualquier otra imagen de su elección), podemos completar nuestro método principal para que finalmente podamos analizar la imagen seleccionada:
Public static void main (string [] args) lanza TesseractException
Tesseract tesseract = getTesseract ();
Archivo archivo = nuevo archivo ("/usuarios/shubham/escritorio/tess4j.jpg ");
Resultado de cadena = tesseract.doocR (archivo);
Sistema.afuera.println (resultado);
Si miramos de cerca, no hay nada mágicamente que haya sucedido aquí. Ese es el poder de este simple envoltorio para la biblioteca Tesseract que se nos proporciona.
Ahora estamos listos para ejecutar el programa anterior. Puede ejecutarlo para ver una salida extraña en formato XML. Si tiene problemas para comprender el resultado, simplemente comente la propiedad donde habilitamos la salida de HOCR. Una vez que haga eso, verá una salida simple como:
Una nota rápida que intente Evite las imágenes PNG y use imágenes JPEG En su lugar, si estás trabajando con imágenes. Esto se debe a que Tesseract es muy malo en leer imágenes PNG debido a sus técnicas de compresión.
Limitaciones del motor Tesseract OCR
Según las preguntas frecuentes de la página de Tesseract, “Tesseract es un motor OCR en lugar de un programa totalmente destacado similar al software OCR comercial como la omnipage de Nuance. Originalmente tenía la intención de servir como parte de componentes de otros programas o sistemas.
Aunque Tesseract funciona desde la línea de comandos, para ser utilizable por el usuario promedio, el motor debe integrarse en otros programas o interfaces, como FreeOCR.neto, weocr u ocrpous. Sin integración en programas como estos, Tesseract no tiene análisis de diseño de página, ningún formato de salida ni interfaz gráfica de usuario (GUI). "
Si observamos la limitación anterior, la biblioteca Tess4J también resolvió la limitación anterior al proporcionar un envoltorio Java JNA simple pero efectivo sobre la biblioteca C ++ que se puede usar literalmente en cualquier lugar.
En esta rápida lección sobre Tesseract y Java, hicimos un ejemplo muy simple de Tesseract OCR Engine que nos permite leer texto de varios archivos de formato como PDF y archivos de imagen. Esta es una habilidad muy importante para tener ya que leer texto de archivos como PDF e imágenes es el primer paso que debe hacer si desea aplicar técnicas de procesamiento de lenguaje natural (PNL) en estos formatos de datos.
El hecho de que Tess4J esté disponible es increíble porque de esta manera, en realidad podemos usar una biblioteca C ++ en un entorno muy simple que de otra manera es difícil y difícil de usar.