Кодированием в djvu я предпочитаю заниматься на рабочем компьютере т.к. это -- довольно-таки "тяжеловесная" операция и выполнять её рекомендуется на более мощной машине, чем мой домашний старичок. (То есть в принципе он может, но в несколько раз медленнее.)
Конечно, наилучшее средство обработки отсканированного печатного текста его распознавание (оцифровка).
Для сканирования художественной литературы есть очень хорошая программа FineReader. Ах, если бы она распознавала формулы
я бы точно упросил шефа её купить (но не дороже, чем за 500CHF).
На сегодня мне неизвестны программы, которые могут распознавать формулы. Таким образом, оцифровка научно-технической
литературы долгий трудоёмкий процесс. Гораздо быстрее отсканировать в tiff и закодировать в djvu.
Итак, дано: многостраничный файл scan.tif
, который мы хотим переделать в djvu. Выполняем в терминале следующие команды:
Что именно делает
mkdir new
tiffsplit scan.tif tmp
for i in tmp*.tif ; do convert $i -rotate -90 new/$(basename $i .tif).pgm ; done
rm tmp*.tif
for i in new/*.pgm ; do mkbitmap -s 1 $i -o $(basename $i) ; done && rm new/*.pgm
mkbitmap
, я не знаю. Но без этой программы рисунки в серых
тонах закодировались бы в виде безобразных чёрных клякс. Кроме того, mkbitmap
заменяет отбеливание
(см. старую версию этой странички)
рисуем четыре белых прямоугольника в середине книжки и по краям там, где неприятные чёрные полосы.
Затем хитрожопо (индивидуально для каждой странички-картинки) получаем правильные параметры для обрезания полей, и передаём эти параметры команде
for i in *.pgm ; do convert $i -fill white \
-draw 'rectangle 0,0 3443,100' \
-draw 'rectangle 0,0 100,2550' \
-draw 'rectangle 1600,0 1700,2550' \
-draw 'rectangle 3200,0 3436,2550' \
-monochrome tmp.pbm && \
cropZone=$(convert tmp.pbm -virtual-pixel edge -blur 0x10 -fuzz 5% -trim -format '%wx%h%O' info:) && \
convert tmp.pbm -crop $cropZone new/$(basename $i .pgm).pbm ; done ; rm tmp.pbm
crop
.
Теперь стоит посмотреть с помощью gqview
содержимое каталога new/
.
Главное выяснить, не слишком ли много мы обрезали. (Если много и не там, следует изменить координаты rectangle
в предыдущей
команде.) Обнаруженные на некоторых страницах пятна (без этого не обходится) можно удалить вручную,
например, с помощью gimp
. Затем кодируем наши картинки в djvu:
cd new; for i in *.pbm ; do cjb2 -lossy -clean $i $(basename $i .pbm).djvu ; done
получили по .djvu - файлу на каждую страничку. Их можно объединить с помощью djvm
:
djvm -c ../file.djvu *.djvu
Итог: 20-50 кбайт/стр., хорошее качество, радует глаз, а умная обрезка позволяет при распечатывании растягивать область текста почти до 100% формата A4, что
приводит к увеличению текста, а значит, к меньшей усталости глаз. Недостаток метода cjb2
не умеет делать
Multi-page compression. Matching characters on several pages would improve the compression ratios for multi-page documents. (цитата из man cjb2
).
Если кто знает, подскажите, пожалуйста, метод объединения одностраничных "словарей" (dictionaries) в многостраничном djvu-файле.
Много информации о djvu можно получить здесь.
Примечание: я использую tiffsplit scan.tif tmp
, а теоретически мог бы сразу же запускать convert scan.tif %02d.pgm
для
преобразования многостраничного tiff-файла. Преимущество tiffsplit
в том, что он не задыхается даже под тяжестью гигабайтного tiff-файла (на
компьютере с 2Гб ОЗУ). Что же касается convert
, так он уже очень активно начинает скрипеть винчестером при размере tiff-файла в 150 мегабайт.
А ещё надо разобраться с пакетом unpaper
, который автоматически поворачивает текст.
Всё вышеизложенное я засунул в эти скрипты:
одностороннее сканирование на сканере ScanSnap S510
двустороннее сканирование на сканере ScanSnap S510
кодируем отсканированное (формат letter) в djvu на 8ми процессорах
кодируем отсканированное (формат A4) в djvu на 8ми процессорах
-- этим скриптам требуются служебные файлы: ryba.sh и ryba-A4.sh