среда, 12 октября 2011 г.

Создание документа djvu из сканированных изображений

 Недавно передо мной встала обыденная задача - отсканировать документ и привести его в вид, удобный для чтения на компьютере. Сам документ представляет собой брошюру, сделанную из листов A4. Проделав все этапы и получив замечательный результат я решил поделиться опытом с вами.

Содержание:
0. Подготовка программного обеспечения.
1. Сканирование.
2. Обработка изображений (разрезание пополам, выравнивание,  обработка  полей).
3. Сжатие изображений с помощью алгоритма djvu.
4. Склейка страниц в единый документ.
5. Листинг скриптов, используемых для обработки файлов.

0. Подготовка программного обеспечения. Для работы понадобятся:
  1. Программы XSane и ScanTailor.
  2. Sh-совемстимый командный интерпретатор (желательно современный, например bash или zsh).
  3. Библиотека djvulibre.
В моей системе (Ubuntu) все это устанавливается путем:
$ sudo apt-get install djvulibre-bin 
zsh xsane scantailor

1. Для сканирования я использую замечатльную программу XSane. Параметр сканирования я выбрал следующие:
Качество: 600dpi
Формат: tiff (можно было использовать и например png)
Цветовая гамма: штриховая (два цвета - черный и белый)
XSane автоматически нумерует и сохраняет полученные после сканирования изображения, что весьма удобно.

2. Следующий этап - обработка изображений. Она производиться с помощью программы ScanTailor.
Для начала необходимо создать рабочий  каталог с необходимыми файлами, который потом будет выбран программой в качестве рабочего.
Работа программы состоит из следующих этапов:
  1. Установление правильной ориентации изображений.
  2. Разрезание станиц пополам, если таковое наобходимо.
  3. Поворот страниц.
  4. Вырезаниеиз изображений контента (текстов рисунков).
  5. Создание полей.
  6. Вывод.
Все этапы последовательно могут быть проведены вручную или автоматически (при нажатии кнопки начала обработки в пакетном режиме). Надо сказать, автоматические алгоритмы программы достаточно совершенны, поэтому я обычно доверяю им рутинные операции.




После прохождения последнего этапа в рабочем каталоге появится каталог out с разультатами работы программы в виде кучи новых обработанных файлов, при чем именованных достаточно логично для следующего этапа обработки.

 3. Настал черед сжать изображения с помощью библиоткеки djvulibre. Для решения этой задачи разумно воспользоваться скриптом, использующим утилиты с интерфейсом командной строки из пакета djvulibre. Для выполнения скрипта понадобится командный интерпретатор, или оболочка. Можно использовать bash или что-то иное из sh-совместимых оболочек.
#!/bin/bash
Сам скрипт лежит в каталоге с изображениями, которые именованы примерно так: 100_0447_1L.tif 100_0447_2R.tif 100_0448_1L.tif, то есть по порядку, что нам и надо. Необходимо обработать все изображения, поэтому целесообразно использовать цикл
$ for i in *.tif; do
Библиотека djvulibre требует специфичного формата pbm, поэтому сконвертируем в него наши изображения:
$ convert -format pbm $i "$i.pbm"
Теперь их можно сжать в djvu
$ cjb2 -dpi 600 -clean "$i.pbm" "$i.djvu"
Удалим промежуточные файлы
$ rm -f "$i.pbm"
Завершаем цикл
done

4. Теперь склеим полученные файлы djvu:
$ djvm -c file.djvu *.djvu
Когда документ готов, отдельные файлы вряд ли понадобятся, поэтому удалим все кроме file:
$ rm -f [^file]*.djvu 
После обработки у меня размер изображенний уменьшился с 20 Мб до 500 Кб, то есть в 40 раз. Внушительно, не правда ли? При этом качество восприятия информации существенно увеличилось.

5. Листинг скриптов для обработки файлов.
Скрипт сжатия черно-белых изображений:
#!/bin/bash
for i in *.tiff; do
  convert -format pbm $i "$i.pbm"
  cjb2 -dpi 600 -clean "$i.pbm" "$i.djvu"
  rm -f "$i.pbm"
done
Скрипт сжатия серых изображений:
#!/bin/bash
for i in *.tiff; do
  convert $i -format pgm "$i.pgm" 
  c44 -dpi 600 -percent 6 "$i.pgm" "$i.djvu"
  # percent 6 - степень сжатия изображения
  rm -f "$i.pgm"
done
Скрипт конкатенации (объединения) файлов djvu:
#!/bin/bash
djvm -c file.djvu *.djvu
# следующая строка - по потребности
rm -f *[^file].djvu

Комментариев нет:

Отправить комментарий