miércoles, 2 de noviembre de 2011

Crear libros DjVu a partir de imágenes

En el trabajo nos repartieron el material para un curso interno como un archivo comprimido RAR lleno de las imágenes JPEG. El archivo RAR pesaba poco más de 170 MiB.
Mi primera reacción fue cambiarle la extensión y convertir el archivo en un CBR, sin embargo, leer el archivo con Evince se hacía tedioso debido al alto tiempo de carga entre imágenes.
Luego, recordé que el formato DjVu es particularmente bueno para almacenar libros digitalizados. Una vez que me topé con un manual de WikiCommons adapté el procedimiento. A continuación los pasos que seguí:
  1. Organizar en carpetas: Así se facilita procesar masivamente los archivos y se evita reescribirlos o traspapelarlos accidentalmente. Los comandos utilizados fueron:
    mkdir jpeg
    mv *.jpeg jpeg/
    mkdir pbm
    mkdir limpio
    mkdir djvu
  2. Convertir los JPEG a PBM de tamaño uniforme: Como algunas páginas estaban digitalizadas con una resolución de 5100x7033 y otras en 2550x3517, decidí estandarizarlas a 2550x3517, que resultaba suficientemente legible. El formato PBM es ideal para páginas digitalizadas sin color ya que es binario: blanco o negro (sin escala de grises). El comando utilizado, desde la carpeta que contiene todas las imágenes JPEG fue:
    cd jpeg/
    find -type f -exec convert {} --resize 2550x3517 ../pbm/{}.pbm \;
    cd ..
  3. Limpiar los archivos PBM: Los archivos que me hicieron llegar contenían páginas torcidas, se veía la junta entre páginas, páginas manchadas, etc. Para limpiarlas se ejecuta:
    cd pbm/
    find -type f -exec unpaper --layout single {} ../limpio/{} \;
    cd ..
  4. Convertir a formato DjVu: Ahora cada página se convierte en un archivu DjVu individual, utilizando los comandos:
    cd limpio/
    find -type f -exec cjb2 -clean {} ../djvu/{}.djvu \;
    cd ..
  5. Juntar el libro en un archivo DjVU: Finalmente, se unen todas las páginas DjVu individuales en un sólo archivo de múltiples páginas, utilizando el comando:
    djvm -c libro.djvu djvu/*
  6. Agregar capa de texto: Opcionalmente se le puede agregar al libro digital una capa de texto que facilite su accesibilidad y el copiado de texto, utilizando el comando (nótese que "eng" se debe a que el libro está en inglés):
    ocrodjvu -o libro-ocr.djvu libro.djvu --language=eng
El libro completo sin capa de texto pesaba apenas 2 MiB y con capa de texto 2,2 MiB, lo cual representa menos de 1.30% de los 170 MiB originales.
Las dependencias de este manual se pueden instalar en Ubuntu, Debian o sus derivados ejecutando, como administrador (o con sudo), la siguiente instrucción:
apt-get install imagemagick unpaper djvulibre-bin ocrodjvu --install-recommends
En caso de que el texto del libro no se encuentre en inglés, se debería instalar también el paquete tesseract-ocr-??? apropiado.