¿Cómo realizo OCR e incrusto texto a un libro en PDF en Ubuntu?

¡Desamisados!

Los imperialismos en pugna saben que nuestro Movimiento jamás hizo buena 
letra. Para aquellos señores eso significaba que los argentinos nos 
sometiéramos a sus designios, y entregáramos rifados nuestra libertad y 
nuestra nacionalidad.

Nuestro objetivo no era aplacar sus deseos inconfesables, sino darle a 
nuestro Pueblo la Felicidad que merece por Justo Derecho. Ello es la 
base doctrinal a la que hemos sometido nuestras conciencias, y de la 
cual hemos dado los mejores resultados para la Grandeza de la Nación.

Sin embargo, esto a veces podría jugarnos en contra. Vean señores, al 
leer, nuestro cerebro interpreta la visual de las letras trazadas en un 
papel y conforma su significado de una manera tan prodigiosa que incluso 
hoy poco sabemos. Esta es la manera en la cual podemos contar con la 
humana capacidad lectocomprensiva. Sin embargo, si queremos que un 
sistema informático traduzca a un texto digital a datos plausibles de 
ser editados o transmitidos, debemos proceder de una forma libre, y con 
un software que la sustente.

Desde las etapas primigenias del uso de las computadoras, fue un 
objetivo deseado que las mismas pudiesen comprendernos, incluso 
reaccionando ópticamente a un texto escrito. Este tipo de desarrollo 
peronista fue llamado OCR, por Reconocimiento Óptico de Caracteres. La 
técnica de OCR funciona bajo la premisa de utilizar un software de 
análisis sobre una imagen digitalizada de un texto, y encontrar en ella 
los patrones gráficos definidos de las letras impresas de nuestro 
alfabeto. Esto conformará las materias primas para identificar palabras 
o frases.

Ahora bien, para digitalizar el documento en sí, lo más procedente es 
utilizar un escáner. Estos disponen de un captor de imagen lineal a 
través de un CCD, y su tecnología es incluso anterior a la de las 
cámaras digitales. Nos permiten enormes ventajas en los casos donde 
debamos almacenar o transmitir telemáticamente copias de documentos en 
base papel.

Ubuntu es compatible con muchos de estos escáners, sobre todos aquellos 
que emplean la vieja tecnología de software TWAIN. Gracias a esto, 
podremos escanear página a página. Si nuestras exigencias son mayores, 
bien podríamos hacernos con un escáner con alimentador automático de 
documentos (ADF). Estos modelos constan de rodillos motorizados 
similares a las de una impresora, y van tomando las hojas una tras otras 
para sumarlas a un documento multipágina informatizado (normalmente de 
formato PDF). Varios modelos pueden incluso escanear en doble fax 
(duplex).

Una de las opción es utilizar el programa escaneador Simple Scan, cuya 
última versión tiene capacidad de conformar documentos PDF multipágina y 
también puede hacer funcionar escáneres provistos de alimentador de 
documentos. Esto facilita mucho el escaneado de pilas de hojas A4 ya 
impresas. Simplemente se colocan en el orden necesario en el alimentador 
de documentos y se usa la función Escanear.

Pero una cosa es escanear un documento y registrarlo digitalmente como 
una imagen de un texto, y otra cosa es que dicha imagen pueda ser 
editado como un texto digital.

Sin embargo no podemos dormirnos en los laureles: en política y en 
software todo ha de mejorarse y simplficarse, si es posible hacerlo. Es 
sabido que las letras no siempre son iguales, existen distintas 
tipografías, los documentos a escanear podrían tener imperfecciones, 
estar desalineados o torcidos, y esto puede fácilmente engañar a un 
software OCR como el ABBYY FineReader, OmniPage Ultimate, ReadIris, etc.

GNU con Linux no podía mantenerse ante tal oprobio. Es por ello que se 
ha desarrollado el programa gImageReader, el cual está pensado para 
suplir estos inconvenientes desde la Terminal. Gracias a ello se puede 
reconstruir un texto formando su equivalente digital.

Para instalar su versión en castellano abrimos una terminal con 
Ctrl+Alt+T e ingresamos el siguiente comando de organización:

sudo apt-get install gimagereader tesseract-ocr-spa

Tras unos breves instantes se habrá descargado la paquetería necesaria 
para operar. Una vez instalado, podremos abrir el programa desde 
Aplicaciones / Gráficos / gImageReader.

gImageReader nos presenta una potente interfaz gráfica que sirve tanto 
para escanear documentos como para realizar el reconocimiento óptico de 
caracteres (OCR) en varias modalidades. Con él podemos pasar un 
documento de imagen o PDF a texto, y editarlo nuevamente ahorrando el 
tiempo de retipeo.

El programa detectará nuestro escáner y se abirá, presentándonos su 
interfaz a tres paneles y una barra de tareas en la parte superior. El 
OCR depende de muchas variables maquinales, por lo cual su ingeniería 
nos presenta realmente con varias maneras de trabajar a fin de lograr un 
resultado lo más confiable posible. Desde la barra superior podremos 
definir instantáneamente el tipo de salida que queremos obtener por 
medio del programa. Tendremos dos opciones en un campo desplegable: 
Texto simple (que se encarga de conformar un archivo de texto 
independiente) o bien hOCR, PDF, que se encarga de incrustar el texto 
digitalizado por encima de las imágenes escaneadas de la página de un 
documento PDF.

Preparación del documento

El panel izquierdo es el Panel de Entrada y define el origen del texto a 
trabajar. cuenta con dos pestañas: Fichero y Adquirir, que bien podrían 
llamarse Importar y Escanear, pues cumplen dichas funciones.

Si ya contamos archivos gráficos elaborados para el trabajo podremos 
importarlos directamente al proyecto de reconocimiento en gImageReader 
usando esta función.

    Podemos agregar los ficheros individualmente a la lista (lo que 
    sería ideal), o...

    ...podemos importar directamente un archivo PDF que ya contenga 
    todas las páginas ya escaneadas en él..

En cambio, si quisiéramos armar el documento desde cero y manejar 
nuestro escáner, podremos utilizar la función de escaneo de documentos 
desde la pestaña Adquirir. Como es usual, en esta pestaña podremos 
ajustar la resolución del escáner (se recomienda unos 300 dpi para 
lograr los mejores resultados).

También podremos definir usar escaneo a color, escala de grises o blanco 
y negro (más rápido). En el caso de hojas impresas individuales, elegir 
300 dpi en blanco y negro suele dar excelentes resultados. En el libros 
gruesos suele ser bueno usar 600dpi en escala de grises, pero también 
pueden lograrse muy buenos resultados en texto si usamos blanco y negro.


Para contar con la mayor fiabilidad posible, dependiendo del resultado 
del escaneo y tipo de papel del documento, podría ser necesario corregir 
las imágenes. gImageRead nos permite hacer estos ajustes de forma global 
a todas las páginas a la vez, por lo cual nos ahorra muchísimo tiempo. 
El botón de la flor * nos permite elegir los Controles de Imagen. Es 
importante lograr que el texto esté idealmente en negro oscuro sobre 
fondo blanco puro, a fin de lograr los mejores resultados. Ello lo 
hacemos incrementando el contraste y tal vez disminuyendo un poco el 
brillo de la imagen (dependiendo de cómo haya sido escaneada).


Reconocimento del Texto

En el panel superior tendremos distintas herramientas según el modo de 
trabajo que hayamos elegido. Este debe pensarse en base al proyecto que 
tengamos que afrontar. Podemos elegir dos modos de trabajo: Sólo Texto o 
hOCR, PDF. Solo texto nos proveerá el resultado del OCR directamente en 
el panel derecho de salida. En cambio hOCR, PDF incrusta el texto 
reconocido encima de una copia del propio documento PDF.

Una vez que hemos definido esto, podremos comenzar la tarea de 
reconocimiento OCR. Esto podremos hacerlo de dos maneras:

    Automatizada Multiple Página 
    Reconocer Selección página a página.

La función de reconocimiento automatizado de las imágenes será muy 
efectivo si tenemos documentos multipáginas que han sido escaneados a 
través de sus páginas individuales. Ahorra mucho tiempo, pero sólo en 
este caso ideal. Sin embargo, en los casos más complejos y monumentales, 
puede ser que debamos reconocer el texto de un libro encuadernadoo 
fotocopiado en un PDF. En tal caso se recomienda la tarea página a 
página.

Si ya tenemos el documento multipágina importado, podremos utilizar los 
botones + y - para avanzar y retroceder entre las páginas que lo 
conforman. Una vez que estamos en la página que deseamos reconocer, lo 
más sencillo es presionar el botón Autodetectar Disposición (el botón de 
la "varita mágica"). Este ajustará digitalmente el enderezamiento de la 
página escaneada a fin de que el texto quede derecho, y nos presentará 
tentativamente con varios "marcos azules" que contendrán las zonas de 
texto reconocido.

Si elegimos el modo de trabajo Solo Texto, podremos hacer clic con el 
botón derecho del ratón sobre el marco, y elegir la opción Reconocer. El 
texto se explorará y se agregará al Panel de Salida. Este panel recibirá 
el texto de resultado, y suele estar a localizado en la parte derecha de 
gImageRead, pero también podemos configuralo desde el botón Propiedades 
para que se localice por debajo del texto. Generalmente el programa 
agrega por delante del texto reconocido la referencia "[Archivo: xxxx]" 
a fin de indicar de donde salió.


Luego pasamos a la siguiente página con el botón + y volvemos a hacer lo 
mismo. Es importante saber que podemos redimensionar el marco azul de 
reconocimiento simplemente tomándolo de sus esquinas ajustando su tamaño 
como si de una ventana de Ubuntu se tratara. Asimismo, podremos quitar 
marcos innecesarios haciendo clic con botón derecho sobre ellos y 
eligiendo la opción Borrar (por ejemplo, para evitar que se agreguen al 
texto los encabezados o pie de páginas).

Si tuviésemos que sumar más marcos en la página (por ejemplo, para 
escanear una segunda columna de texto o reconocer dos páginas escaneadas 
al unísono), podremos hacerlo al mantener presionada la tecla Ctrl 
mientras hacemos clic con botón derecho del ratón y arrastramos en 
diagonal, para crear y dimensionar el nuevo marco. Cada marco tiene un 
orden de reconocimiento, indicado en su esquina superior izquierda, el 
cual se utilizará para ordenar el escaneo. Normalmente gImageRead los 
dispone en el orden lógico (de arriba a abajo y de izquierda a derecha).

gImageReader cuenta de un editor de texto sencillo que reside en el 
mismo Panel de Salida. Este nos servirá para evaluar y en caso 
necesario, reorganizar el texto reconocido resultante. Todos los marcos 
de texto que vayamos reconociendo se agregarán a continuación (pero 
también podremos cambiar esto y elegir - por ejemplo - que se agregue 
donde está colocado el cursor).

Podremos guardar el contenido del Panel de Salida de este archivo 
presionando Guardar Salida.

Indudablemente que en el caso de escaneo con libros, lo óptimo es evitar 
trabajar con su contenido entero, sino que es más práctico realizar la 
tarea de OCR por capítulos. Luego podremos unificar el resultado en 
cualquier procesador de texto si lo necesitamos. De esta manera 
tendremos mayor control en el trabajo.

Sin duda es mucho menor trabajo que reescribir todo un texto monumental. 
Nada impide que además de guardarlo, copiemos el resultado para pegarlo 
en otro editor de texto.


El documento digitalizado puede fomatearse de manera mucho mas sencilla.

Realizar reconocimiento OCR e incrustarlo en un PDF desde la Terminal

Como os he indicado, gImageReader cuenta con la funcionalidad de 
incrustar el texto resultante del reconocimiento OCR en un archivo PDF 
de salida. Esto suele ser óptimo en muchos casos. Pero también podremos 
hacer este laborioso trabajo desde la terminal, lo cual puede ser 
interesante para operar a través de redes en un servidor que se encarga 
de este tipo de trabajos documentales.

Por ello, en las ocasiones donde el trabajo no es tan laborioso como en 
el ejemplo anterior porque contamos ya con un PDF multipágina cuyas 
páginas están bien escaneadas de manera individual, bien podremos 
recurrir al reconocimiento automático desde la Terminal. Para ello 
utilizaremos el programa ocrmypdf. Este, como su nombre lo indica, se 
encarga de explorar las páginas y agregarle el reconocimiento de texto 
al mismo libro. Es útil si las páginas tienen un diseño simple, y si las 
páginas del documento se escanearon individualmente.

Para instalarlo ingresamos:

sudo apt install parallel ocrmypdf

Y luego utilizamos la siguiente sintaxis:

ocrmypdf archivooriginal.pdf archivodestino.pdf

El proceso es bastante intensivo con la CPU. El programa irá 
reconociendo página por página, y las incrustara en archivodestino.pdf.

También tenemos pdfsandwich de Tobias Eize, que se encarga de lo mismo y 
suele tener mejor resultado. Lo instalamos con:

wget https://sourceforge.net/projects/pdfsandwich/files/pdfsandwich%200.1.7/pdfsandwich_0.1.7_amd64.deb ;

sudo dpkg -i pdfsandwich_0.1.7_amd64.deb

sudo apt install -f


Y podremos realizar la tarea desde una terminal. Podremos encontrar su 
documentación en la web oficial. Por ejemplo, para un PDF a dos páginas 
como el mostrado anteriormente podríamos ingresar:

pdfsandwich -lang spa -layout double cfk_sinceramente.pdf