10 agosto 2015

Cómo pasar fotos de libros a pdf (sin OCR)

Hola a todos y feliz comienzo de semana desde... Oxford.

Escribir, o tratar de escribir una tesis no es tarea fácil, y si le añadimos las vicisitudes de la vida real y el rechazo profundo que siente mi cuerpo a estar sentado más de media hora, todo ello podría ser una buena excusa para este largo tiempo sin escribir: la simple realidad es que no lo he hecho, sea cual sea el motivo. Sin embargo, gracias a este periodo de descanso tengo más cosas de las que hablar, y con mayor conocimiento de causa.

Suele ser habitual que no siempre encontremos el libro que buscamos en formato digital (pdf, djvu o mobi/epub), ante lo cual, mi solución provisional suele ser recurrir a la cámara del móvil: con una mano abres el libro mientras haces malabares con la otra para pulsar el botón en una pantalla que no apenas ves y sin por supuesto perder el pulso, luchando además con el deseo espontáneo de tu cámara de enfocar ese precioso fondo blanco amarillento en lugar de las letras, que es lo que me interesa. Después de cinco, diez o media hora tienes una carpeta llena de fotos; funcional, sí, pero poco manejable para enviar por correo o gestionar con una base de datos (Mendeley en mi caso, de la que hablaré pronto).

1. Una foto cualquiera sacada con el móvil
2. El resultado que buscamos


Esto se ha convertido en un proceso rutinario desde casi los comienzos de la tesis, al igual que la esperanza de encontrar una mágica aplicación que convirtiera esa colección de retratos librescos en un pequeño y legible pdf. Pero cuando la necesidad aguza el ingenio, y una de las soluciones a las que llegué fue usar un programa de edición de imágenes para pasar las fotos a ByN, reducir su tamaño y por último comprimirlas en un pdf con otro muy gracioso llamado smallpdf.

Antes de nada quiero dejar claro que no es mi intención fomentar en modo alguno el pirateo, sino ofrecer una manera de gestionar más cómodamente una copia privada de material sobre el que tenemos los derechos. El resultado, por otra parte, seguirán siendo imágenes: no podremos hacer búsqueda de texto ni nada por el estilo; lamentablemente, la tecnología actual de OCR, a pesar de todas los avances y promesas que hagan en sus páginas, sigue sin llevar muy bien eso de las tablas, símbolos, notas a pie de página y el reconocimiento de varios idiomas a la vez. Y aunque lo hicieran, la fiabilidad del resultado nunca es del 100%. Lo siento pero soy muy quisquilloso en eso.

Manos a la obra. Tomemos como punto de partida un artículo cualquiera, de unas 10 o 20 páginas y demos por hecho que hemos sacado un número equivalente de fotos con unas condiciones de iluminación decentes para leer. Nuestro objetivo es conseguir el mismo número de fotos con texto negro sobre fondo blanco, sin perder nitidez en los trazos de las letras. No importa qué programa (o software si lo preferís) utilicéis mientras sea un editor de imágenes que permita manejar capas. En este ejemplo uso paint.net, aunque Gimp o Photoshop son igualmente válidos; la última opción es como matar una mosca a cañonazos en términos de potencia, y Gimp, al menos en windows 8, corre más lento que el primero.

A continuación tenéis un video donde explico lo que voy haciendo, y por si no queda claro, debajo están los pasos generales.



  1. Bordes fuera. Recortamos el marco de la imagen; ojo, no es lo mismo que redimensionar la imagen. Escoged una opción del estilo "cambiar tamaño de lienzo" o más rápido, "selección rectangular" > dibujar un rectángulo que se ajuste al texto dejando un poco de margen > "ajustar lienzo/imagen a la selección".
  2. Color fuera. Al carajo la policromía. Pasamos la imagen a blanco y negro utilizando bien una opción del estilo "modo > blanco y negro" o bien "desaturar" (sinónimo de "quitar colores"). Quizá apreciéis más sombras en el papel de esta manera, pero es un efecto óptico: ya estaban ahí. No pasa nada.
  3. Duplicar capa. Literalmente, buscamos el menú de "capas" y creamos una copia de la imagen que tenemos.
  4. Modificar la imagen. Trabajamos por capa así que ojo al menú de capas para ver en cual estamos trabajando.
    1. Capa de fondo (abajo). Usamos la herramienta "detectar bordes". Si os da a elegir el modo de detección, Sobel me ha dado buenos resultados. Tendréis una imagen llena de líneas blancas sobre fondo negro. Invertimos los colores ("invertir color")
    2. Capa superior (arriba). Con la herramienta "seleccionar color" y un nivel de zoom decente, pinchamos sobre el color negro de una letra. El objetivo es seleccionar todos el texto, que en el caso de una buena foto, suele ser de un mismo tono de negro más oscuro que el resto. No es tarea fácil siempre, aún así, atinar a la primera. El truco es por un lado, jugar con la sensibilidad de la herramienta y, en caso de que la selección resultante os incluya el fondo de la página en las partes sombreadas, pinchar sobre una letra dentro de una zona sombreada. Una vez hecho esto, invertimos la selección y usamos la herramienta "borrar" para eliminar todo lo que no sea texto.
  5. Si todo ha salido bien, la selección de color negro de la capa superior se solapará con los bordes de texto que resaltamos en la capa inferior, corrigiendo con ello esos molestos píxeles sueltos que hubieramos tenido si sólo hubieramos ejecutado el punto 4.2. Guardamos como png y a por la siguiente imagen.
Repetir el proceso con cada imagen puede ser un poco agotador, y aunque sé que la solución pasaría por crear una macro, cosa que Gimp soporta (aunque no lo he probado), paint.net es muchísimo más rápido aun con varios archivos abiertos a la vez. Si alguien conoce la solución, le estaría muy agradecido si la compartiera en los comentarios.

Hasta la próxima, χαιρετε / bene valete!