OCR decente con Linux: xsane + tesseract

July 12th, 2008

Hace unas semanas, David comentaba unos pequeños trucos para aquellos que quieran digitalizar su biblioteca.

Uno de los mayores problemas es el reconocimiento fiable del texto. El paquete gocr funciona, pero no demasiado bien. Tal como dice David, si el texto está un poco torcido, los errores resultan terriblemente hilarantes (al menos los primeros… cuando llevas 50 páginas empiezas a desesperarte).

Otro paquete para OCR algo más fiable es Tesseract. Probando la misma página con ambos, y con la página un pelín torcida y a 300ppp de resolución, el primer escaneo con Tesseract da un resultado con apenas 3 fallos, frente a un galimatías bastante potente de gocr.
El problema inicial de Tesseract, es que siendo un programa de línea de comandos, la forma de pasarle argumentos es poco usable:

tesseract fichero.tiff fichero.txt

Para hacer un par de archivos vale, pero cuando tienes una biblioteca en frente, hacer a mano cada página es… farragoso.

Cómo hacer que, no solamente tesseract coja bien los ficheros de entrada y salida, si no que lo haga automaticamente y lo único que tenga que hacer el usuario sea cambiar de página y darle al botón de “scan? Fácil!

Una vez tenemos xsane instalado, instalamos también los paquetes tesseract-ocr, tesseract-data y el paquete correspondiente al idioma en que esté escrito el texto.

Luego tenemos que instalar un pequeño script llamado xsane2tess. Como es un .rpm, necesitaremos instalar el paquete alien desde synaptic, y luego instalar el .rpm:

sudo alien -i tesseract-ocr-xsane-2.01-1mud2008.0.i586.rpm

Tras unos mensajes de advertencia, el paquete se instala bien, y solo quedará crear un nuevo directorio “tmp” en nuestra home, que es donde se almacenará el log del tesseract.

Hecho esto, arrancamos xsane y pulsamos “ALT+s” (o vamos a “Preferences –> Setup”) y buscamos la pestaña OCR. Sustituimos el comando “gocr” por “xsane2tess.sh -l eng”, cambiando el idioma, si es necesario, con las tres letras del nombre del paquete instalado: “spa” para español o “por” para portugués.
Dejamos las opciones “input” y “output” como están.

Ya solamente nos queda decirle a Xsane qué hacer con los resultados de cada escaneo. Si queremos hacerlo manualmente, en el desplegable que aparece al lado del icono del punto de mira pondremos “Viewer”, con lo que cada vez escaneemos algo, se nos abrirá una ventana nueva con la imagen y podremos decidir si guardarlo como imagen, convertirlo mediante OCR o lo que sea.

Para automatizar al máximo el proceso, en el desplegable seleccionaremos “Save”, y en el campo de texto justo debajo, pondremos la ruta al directorio y al fichero que queremos, por ejemplo “/home/usuario/directorio/pagina0001.txt”.
Debajo de la ruta, veremos dos desplegables más, uno con el tipo de fichero que queremos, y que cambiaremos a “TEXT”, y uno con una bota negra, que indica que hacer con los nombres de fichero para escaneos consecutivos. Si lo cambiamos a “+1″, una vez escaneada la página 1 y guardado en “/home/usuario/directorio/pagina0001.txt”, el siguiente fichero será “pagina0002.txt”, luego “pagina0003.txt”… con lo que nos ahorramos un pequeño pero tedioso trabajo de decir qué nombre queremos para cada fichero.

Ahora solamente falta escribir el nombre de fichero correcto para la página a escanear, situar el libro en el scanner, y pulsar “play”.
:)

Actualización: Gracias a David me di cuenta que faltaba un paso. Justo tras instalar el .rpm, debemos crear un nuevo directorio en nuestra home llamado “tmp”. En ese directorio se almacenará el log del tesseract, y parece ser que la cosa no funciona hasta que se crea el directorio.

Ampliación: Para hacer más fácil el transporte del texto escaneado a la plantilla optimizada, una vez tenemos todos los ficheros “pagina*.txt”, hay que asegurarse de eliminar los posibles backups de los ficheros (pagina*.txt~), si es que hemos editado alguno para hacer alguna corrección. En el explorador de ficheros vamos al directorio, pedimos que nos muestre los ficheros ocultos, y los borramos todos.

Ahora ya podemos poner todo el texto junto en un solo fichero con el comando “cat” en la línea de comandos. En el directorio donde tengamos los ficheros, simplemente pondremos

cat pagina* >> completo.txt

Como Tesseract reconoce los saltos de línea, con este comando tendremos un solo fichero con todo el texto, pero cada “página” escaneada estará separada de la siguiente por una línea vacía, facilitando así la maquetación posterior con Open Office.

One Response to “OCR decente con Linux: xsane + tesseract”

  1. » De los txt al libro electrónico deUgarte.com Says:

    [...] nos contaba Arnau cómo hacer escaneado decente. Si seguimos su tutorial tendremos un archivo txt bastante bueno de ese libro viejo y adorado que [...]