sábado, 27 de abril de 2019

¿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

5 comentarios:

  1. Excelente, gracias! Me funcionó a la perfección.

    ResponderEliminar
    Respuestas
    1. Estimado Altamiro:

      El software libre será la baza que tornará Realidad Efectiva todos sus sueños.
      Encomio lo actuado,

      Juan Perón

      Eliminar
  2. impresionante. Probe el gimagereder y el ocrmypdf, y son espectaculares. Gracias.

    ResponderEliminar
  3. Impresionante. Probe el gimagereader y el ocrmypdf, y andan fantastico (y muy rapidos). Gracias!

    ResponderEliminar
    Respuestas
    1. Estimado Dario:

      Enhorabuena por el éxito alcanzado. Continúe en la auténtica senda de la liberación. Reciba un saludo muy afectuoso,

      Juan Perón

      Eliminar