Una ventana de terminal en una computadora portátil Linux.
Fatmawati Achmad Zaenuri / Shutterstock
Puede extraer texto de imágenes en la línea de comandos de Linux utilizando el motor Tesseract OCR. Es rápido, preciso y funciona en aproximadamente 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 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 todavía se tenían en alta 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 y editable. Incluso si los resultados no fueran 100 por ciento precisos, esto aún era 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 multilingües, es 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
sudo apt install tesseract-ocr en una ventana de terminal.
En Fedora, el comando es:
sudo dnf install tesseract
sudo dnf instala tesseract en una ventana de terminal.
En Manjaro, debe escribir:
sudo pacman -Syu tesseract
sudo pacman -Syu tesseract en una ventana de terminal.

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 del  Reglamento general de protección de datos . Veamos si OCR puede leer esto (y mantenerse despierto).
extracto del considerando 63 del RGPD
Es una imagen engañosa porque cada oración comienza con un número superíndice débil, lo cual es típico en los documentos legislativos.
Necesitamos darle información al tesseractcomando, 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 usar la --dpiopción para saber tesseractcuál es la   resolución de puntos por pulgada (ppp) de la imagen. Si no proporcionamos un valor de ppp,  tesseractintentaremos averiguarlo.
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 recital-63.png recital --dpi 150
tesseract recital-63.png recital --dpi 150 en una ventana de terminal.
Los resultados son muy buenos. El único problema son los superíndices: eran demasiado débiles para ser leídos correctamente. Una imagen de buena calidad es vital para obtener buenos resultados.
Texto extraído del considerando 63.
tesseract ha interpretado los números de superíndice como comillas (") y símbolos de grados (°), pero el texto real se ha extraído perfectamente (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, en negrita y cursiva.
Imagen con diferentes tamaños de texto en negrita y cursiva.
El nombre de este archivo es "bold-italic.png". Queremos crear un archivo de texto llamado "bold.txt", por lo que nuestro comando es:
tesseract bold-italic.png negrita --dpi 150
tesseract bold-italic.png bold --dpi 150 en una ventana de terminal.
Este no planteó ningún problema, y ​​el texto se extrajo perfectamente.
texto extraído de bold-italic.png.

Usando diferentes idiomas

Tesseract OCR admite alrededor de 100 idiomas . Para usar un idioma, primero debe instalarlo. Cuando encuentre el idioma que desea usar 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 en el extremo. Para instalar el archivo de idioma galés en Ubuntu, usaremos:
sudo apt-get install tesseract-ocr-cym
sudo apt-get install tesseract-ocr-cym en una ventana de terminal.
La imagen con el texto está debajo. Es el primer verso del himno nacional galés.
imagen que contiene el texto del primer verso del himno nacional galés.
Veamos si Tesseract OCR está a la altura del desafío. Usaremos la -lopción (idioma) para informar tesseractel idioma en el que queremos trabajar:
tesseract hen-wlad-fy-nhadau.png himno -l cym --dpi 150
tesseract hen-wlad-fy-nhadau.png himno -l cym --dpi 150 en una ventana de terminal.
tesseractse adapta perfectamente, como se muestra en el texto extraído a continuación. Da iawn , Tesseract OCR.
Texto galés extraído.
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 indicar tesseractque agregue otro idioma, así:
tesseract image.png archivo de texto -l eng + cym + fra

Uso de Tesseract OCR con archivos PDF

El tesseractcomando está diseñado para funcionar con archivos de imagen, pero no puede leer archivos PDF. Sin embargo, si necesita extraer texto de un PDF, puede usar otra utilidad primero para generar un conjunto de imágenes. Una sola imagen representará una sola página del PDF.
La pdftppmutilidad que necesita  ya debe estar instalada en su computadora Linux. El PDF que usaremos para nuestro ejemplo es una copia del documento seminal de Alan Turing sobre inteligencia artificial, "Maquinaria e inteligencia informática".
PDF de la página de título de "Maquinaria e inteligencia informática" por AM Turing.
Usamos la -pngopción para especificar que queremos crear archivos PNG. El nombre del 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
pdftoppm -png turing.pdf turing en una ventana de terminal.
Para ejecutar tesseractcada archivo de imagen usando un solo comando, necesitamos usar un bucle for . Para cada uno de nuestros archivos "turing- nn .png", ejecutamos tesseracty creamos un archivo de texto llamado "text-" más "turing- nn " como parte del nombre del archivo de imagen:
para yo en turing - ??. png; hacer tesseract "$ i" "text- $ i" -l eng; hecho;
para yo en turing - ??. png;  hacer tesseract "$ i" "text- $ i" -l eng;  hecho;  en una ventana de terminal.
Para combinar todos los archivos de texto en uno, podemos usar cat:
cat text-turing *> complete.txt
cat text-turing *> complete.txt en una ventana de terminal.
Entonces, ¿cómo te 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.
Primera página del texto extraído del PDF de Turing.
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 poder leerlo con tesseractprecisión, pero sería bastante fácil encontrarlo y eliminarlo. El peor resultado habría sido caracteres extraviados al final de cada línea.
Curiosamente, las letras individuales al inicio de la lista de preguntas y respuestas en la página dos han sido ignoradas. La sección del PDF se muestra a continuación.
Una lista de preguntas y respuestas del PDF del documento de Turing.
Como puede ver a continuación, las preguntas permanecen, pero las "Q" y "A" al comienzo de cada línea se perdieron.
Texto extraído de la página de preguntas y respuestas del PDF de Turing.
Los diagramas tampoco se transcribirán correctamente. Veamos qué sucede cuando intentamos extraer el que se muestra a continuación del PDF de Turing.
Un diagrama de "Entrada" y "Último estado" del PDF de Turing.
Como puede ver en nuestro resultado a continuación, se leyeron los caracteres, pero se perdió el formato del diagrama.
Texto extraído de un diagrama en el PDF de Turing.
Nuevamente, tesseractluché con el pequeño tamaño de los subíndices, y se representaron incorrectamente.
Para ser justos, sin embargo, 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 necesitas

OCR no es algo que deba usar a diario. Sin embargo, cuando surja la necesidad, es bueno saber que tiene uno de los mejores motores OCR a su disposición.