Cómo hacer OCR desde la línea de comandos de Linux usando Tesseract
Publicado: 2022-01-29Puede 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 unos 100 idiomas. Aquí se explica cómo usarlo.
Reconocimiento óptico de caracteres
El reconocimiento óptico de caracteres (OCR) es la capacidad de mirar y encontrar palabras en una imagen y luego extraerlas como texto editable. Esta tarea simple para los humanos es muy difícil de hacer 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 OCR.
Sin embargo, los pioneros en este campo aún gozaban de gran estima. 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 editable. Incluso si los resultados no fueran 100 por ciento precisos, esto fue un gran ahorro de tiempo.
Con un poco de limpieza manual, recuperaría su documento. La gente perdonaba los errores que cometía porque entendían la complejidad de la tarea que enfrenta un paquete de OCR. Además, era 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 de código abierto en 2005 y ahora es compatible con Google. Tiene capacidades en varios idiomas, se considera uno de los sistemas 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 instalar tesseract
En Manjaro, debe escribir:
sudo pacman-syu tesseract
Uso de 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 del Reglamento General de Protección de Datos. Veamos si OCR puede leer esto (y mantenerse despierto).
Es una imagen engañosa porque cada oración comienza con un débil superíndice, lo cual es típico en los documentos legislativos.
Necesitamos darle al comando tesseract
alguna información, incluyendo:
- 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 usar la opción
--dpi
para decirle atesseract
cuál es la resolución de puntos por pulgada (dpi) de la imagen. Si no proporcionamos un valor de dpi,tesseract
intentará resolverlo.
Nuestro archivo de imagen se llama "recital-63.png" y su resolución es de 150 ppp. Vamos a crear un archivo de texto llamado "recital.txt".
Nuestro comando se ve así:
tesseract considerando-63.png considerando --dpi 150
Los resultados son muy buenos. El único problema son los superíndices: eran demasiado débiles para leerlos correctamente. Una imagen de buena calidad es vital para obtener buenos resultados.
tesseract
interpretó los números en superíndice como comillas (") y símbolos de grado (°), pero el texto real se extrajo perfectamente (el lado derecho de la imagen tuvo que recortarse para que encajara 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 negrita-cursiva.png negrita --dpi 150
Este no planteó ningún problema, y el texto se extrajo perfectamente.
Uso de diferentes idiomas
Tesseract OCR admite alrededor de 100 idiomas. Para utilizar un idioma, primero debe instalarlo. Cuando encuentre el idioma que desea utilizar en la lista, 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á abajo. Es la primera estrofa del himno nacional de Gales.
Veamos si Tesseract OCR está a la altura del desafío. Usaremos la opción -l
(idioma) para que tesseract
sepa el idioma en el que queremos trabajar:
tesseract hen-wlad-fy-nhadau.png himno -l cym --dpi 150
tesseract
hace frente perfectamente, como se muestra en el texto extraído a continuación. Da iawn , Tesseract OCR.
Si su documento contiene dos o más idiomas (como un diccionario de galés a inglés, por ejemplo), puede usar un signo más ( +
) para indicarle a tesseract
que agregue otro idioma, así:
tesseract imagen.png archivo de texto -l eng+cym+fra
Uso de Tesseract OCR con archivos PDF
El comando tesseract
está diseñado para funcionar con archivos de imagen, pero no puede leer archivos PDF. Sin embargo, si necesita extraer texto de un PDF, primero puede usar otra utilidad para generar un conjunto de imágenes. Una sola imagen representará una sola página del PDF.
La utilidad pdftppm
que necesita ya debería estar instalada en su computadora con Linux. El PDF que usaremos para nuestro ejemplo es una copia del artículo seminal de Alan Turing sobre inteligencia artificial, "Maquinaria informática e inteligencia".
Usamos la opción -png
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
Para ejecutar tesseract
en cada archivo de imagen usando un solo comando, necesitamos usar un bucle for. Para cada uno de nuestros archivos "turing- nn.png ", ejecutamos tesseract
y creamos un archivo de texto llamado "text-" más "turing- nn " como parte del nombre del archivo de imagen:
para i en turing-??.png; hacer tesseract "$i" "texto-$i" -l eng; hecho;
Para combinar todos los archivos de texto en uno, podemos usar cat
:
gato texto-turing* > completo.txt
Entonces, ¿cómo fue? Muy bien, como puedes ver a continuación. Sin embargo, la primera página parece bastante desafiante. Tiene diferentes estilos y tamaños de texto, y decoración. También hay una "marca de agua" vertical en el borde derecho de la página.
Sin embargo, la salida está cerca del original. Obviamente, 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 que tesseract
lo leyera con precisión, pero sería bastante fácil encontrarlo y borrarlo. El peor resultado habría sido caracteres extraviados al final de cada línea.
Curiosamente, se han ignorado las letras sueltas al principio de la lista de preguntas y respuestas de 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 transcriben correctamente. Veamos qué sucede cuando tratamos de 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.
Una vez más, tesseract
tuvo problemas con el pequeño tamaño de los subíndices y se representaron incorrectamente.
Sin embargo, para ser justos, todavía fue un buen resultado. No pudimos extraer texto directo, pero luego, este ejemplo fue elegido deliberadamente porque presentaba un desafío.
Una buena solución cuando la necesita
OCR no es algo que necesitará usar a diario. Sin embargo, cuando surge la necesidad, es bueno saber que tiene uno de los mejores motores de OCR a su disposición.