Puede extraer texto de imágenes en la línea de comandos de Linux usando el motor Tesseract OCR. Es rápido, preciso y funciona en aproximadamente 100 idiomas. He aquí cómo usarlo.
Acreditación óptico de caracteres
Reconocimiento óptico de caracteres (OCR) es la capacidad de mirar y hallar palabras en una imagen y después extraerlas como texto editable. Esta sencilla tarea para los humanos es muy difícil de realizar para las computadoras. Los primeros esfuerzos fueron torpes, por decir lo menos. Las computadoras a menudo se confundían si el tipo de letra o el tamaño no eran del agrado del software de OCR.
A pesar de esto, los pioneros en este campo aún eran muy estimados. Si perdió la copia electrónica de un documento, pero aún tenía una versión impresa, OCR podría volver a crear una versión electrónica y editable. Inclusive si los resultados no fueron 100 por ciento precisos, esto fue un gran ahorro de tiempo.
Con un poco de orden manual, recuperaría su documento. Las personas perdonaron los errores cometidos debido a que comprendieron la complejidad de la tarea que enfrenta un paquete de OCR. Al mismo tiempo, fue mejor que volver a escribir todo el documento.
Las cosas han mejorado significativamente desde entonces. La aplicación Tesseract OCR, escrita por Hewlett Packard, comenzó en la década de 1980 como una aplicación comercial. Fue open source en 2005 y ahora cuenta con el respaldo de Google. Tiene capacidades en varios idiomas, está considerado como uno de los sistemas de OCR más precisos disponibles y puede usarlo de forma gratuita.
Instalación de Tesseract OCR
Para instalar Tesseract OCR en Ubuntu, use este comando:
sudo apt-get install tesseract-ocr
En Fedora, el comando es:
sudo dnf install tesseract
En Manjaro, debe escribir:
sudo pacman -Syu tesseract
Usando Tesseract OCR
Vamos a plantear una serie de desafíos para Tesseract OCR. Nuestra primera imagen que contiene texto es un extracto del considerando 63 de la Normativa general de protección de datos. Veamos si OCR puede leer esto (y permanecer despierto).
Es una imagen engañosa debido a que cada oración comienza con un número débil en superíndice, que es típico en los documentos legislativos.
Necesitamos dar el tesseract
ordenar cierta información, que incluye:
- El nombre del archivo de imagen que queremos que procese.
- El nombre del archivo de texto que creará para contener el texto extraído. No tenemos que proporcionar la extensión del archivo (siempre será .txt). Si ya existe un archivo con el mismo nombre, se sobrescribirá.
- Podemos utilizar el
--dpi
opción de contartesseract
que puntos por pulgada (dpi) la resolución de la imagen es. Si no proporcionamos un valor de ppp,tesseract
tratará de resolverlo.
Nuestro archivo de imagen se llama “recital-63.png” y su resolución es de 150 dpi. Vamos a crear un archivo de texto llamado «recital.txt».
Nuestro comando se ve así:
tesseract recital-63.png recital --dpi 150
Los resultados son muy buenos. El único problema son los superíndices: eran demasiado tenues para leerlos correctamente. Una imagen de buena calidad es vital para obtener buenos resultados.
tesseract
ha interpretado los números en superíndice como comillas (“) y símbolos de grado (°), pero el texto real se ha extraído estupendamente (el lado derecho de la imagen tuvo que recortarse para que quepa aquí).
El carácter final es un byte con el valor hexadecimal de 0x0C, que es un retorno de carro.
A continuación se muestra otra imagen con texto en diferentes tamaños, tanto en negrita como en cursiva.
El nombre de este archivo es «negrita-cursiva.png». Queremos crear un archivo de texto llamado «bold.txt», por lo que nuestro comando es:
tesseract bold-italic.png bold --dpi 150
Éste no supuso ningún problema y el texto se extrajo estupendamente.
Usando diferentes idiomas
Soporta Tesseract OCR alrededor de 100 idiomas. Para usar un idioma, primero debe instalarlo. Cuando encuentre el idioma que desea usar en el listado, observe su abreviatura. Vamos a instalar soporte para galés. Su abreviatura es «cym», que es la abreviatura de «Cymru», que significa galés.
El paquete de instalación se llama “tesseract-ocr-” con la abreviatura del idioma etiquetada al final. Para instalar el archivo de idioma galés en Ubuntu, usaremos:
sudo apt-get install tesseract-ocr-cym
La imagen con el texto está debajo. Es la primera estrofa del himno nacional de Gales.
Veamos si Tesseract OCR está a la altura del desafío. Usaremos el -l
(idioma) opción para dejar tesseract
conocer el idioma en el que queremos trabajar:
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
tesseract
se adapta estupendamente, como se muestra en el texto extraído a continuación. Amanecer, Tesseract OCR.
Si su documento contiene dos o más idiomas (como un diccionario de galés a inglés, a modo de ejemplo), puede utilizar un signo más (+
) decir tesseract
para agregar otro idioma, así:
tesseract image.png textfile -l eng+cym+fra
Uso de Tesseract OCR con archivos PDF
los tesseract
El comando está diseñado para trabajar con archivos de imagen, pero no puede leer archivos PDF. A pesar de esto, si necesita extraer texto de un PDF, puede utilizar otra utilidad primero para generar un conjunto de imágenes. Una sola imagen representará una sola página del PDF.
los pdftppm
utilidad que necesitas ya debería estar instalado en su computadora Linux. El PDF que usaremos para nuestro ejemplo es una copia del post seminal de Alan Turing sobre inteligencia artificial, «Maquinaria e inteligencia de cómputo».
Usamos el -png
opción para especificar que queremos crear archivos PNG. El nombre de archivo de nuestro PDF es «turing.pdf». Llamaremos a nuestros archivos de imagen «turing-01.png», «turing-02.png», y así sucesivamente:
pdftoppm -png turing.pdf turing
Correr tesseract
en cada archivo de imagen usando un solo comando, necesitamos utilizar un en bucle. Para cada uno de nuestros «turing-nn.png ”, archivos que ejecutamos tesseract
y cree un archivo de texto llamado «texto-» más «turing-nn”Como parte del nombre del archivo de imagen:
for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;
Para combinar todos los archivos de texto en uno, podemos utilizar cat
:
cat text-turing* > complete.txt
Entonces, ¿cómo te fue? Muy bien, como puedes ver a continuación. A pesar de esto, la primera página parece bastante desafiante. Tiene diferentes estilos y tamaños de texto y decoración. Además hay una «marca de agua» vertical en el borde derecho de la página.
A pesar de esto, la salida es cercana a la original. Por lo visto, se perdió el formato, pero el texto es correcto.
La marca de agua vertical se transcribió como una línea de galimatías en la parte inferior de la página. El texto era demasiado pequeño para ser leído por tesseract
con precisión, pero sería bastante sencillo encontrarlo y eliminarlo. El peor resultado habría sido caracteres extraviados al final de cada línea.
Curiosamente, se han ignorado las letras individuales al comienzo de la lista de preguntas y respuestas en la página dos. La sección del PDF se muestra a continuación.
Como puede ver a continuación, las preguntas permanecen, pero se perdieron la “Q” y la “A” al comienzo de cada línea.
Los diagramas tampoco se transcribirán correctamente. Veamos qué sucede cuando intentamos extraer el que se muestra a continuación del PDF de Turing.
Como puede ver en nuestro resultado a continuación, se leyeron los caracteres, pero se perdió el formato del diagrama.
De nuevo, tesseract
luchó con el tamaño pequeño de los subíndices, y se renderizaron incorrectamente.
A pesar de esto, para ser justos, fue un buen resultado. No pudimos extraer un texto sencillo, pero después, este ejemplo se eligió deliberadamente debido a que presentaba un desafío.
Una buena solución cuando la necesita
OCR no se trata de algo que deba utilizar a diario. A pesar de esto, cuando surja la necesidad, es bueno saber que tiene uno de los mejores motores de OCR a su disposición.