Внимание: Это -- устаревший способ. В результате получается невысокое качество: приемлемо, но глаз не радует. Сканирование в tiff даёт намного лучшие результаты, чем в pdf.
См. также эту страничку.
Для сканирования рукописного одноцветного текста в Linux удобно использовать сканер с автоматической подачей бумаги (есть у нас такой на работе, подключён к Windows-компьютеру), сохраняя результаты сканирования в многостраничном pdf-файле. Этот файл получается довольно большим (порядка 300 кбайт на страничку рукописного текста), поэтому желательно его перекодировать в формат djvu, что приводит к его похудению более чем в 10 раз. Нежелательно для записей использовать разлинованную бумагу (напр., в клеточку), т.к. потом приходится бороться за то, чтобы рисунок бумаги не был закодирован в djvu вместе с написанным текстом. Лучше всего для записей использовать чистый белый лист такой, на котором принтеры и ксероксы печатают.
Итак, для начала разбираем нужный файл на странички (file.pdf мы получили со сканера):
pdftoppm -gray file.pdf tmp
Получили множество одностраничных файлов tmp*.pgm. Наш сканер не понимает, что цвет бумаги белый. Он считает его светлосерым.
Кроме того, и цвет ручки он считает не чёрным, а тёмносерым. Значит, необходимо отбеливание:
mkdir new
for i in *.pgm ; do convert $i -white-threshold 60000 -black-threshold 50000 -monochrome new/$i ; done
для чётких (высококонтрастных) записей ручкой. Смысл этой команды: всё, что темнее некоторого уровня,
превращаем в чёрный, всё, что светлее некоторого уровня, превращаем в белый. У меня с такими параметрами
пропадает и рисунок разлиновки (если сканируемые записи были сделаны на разлинованной бумаге).
Для (нечётких) карандашных записей следует "смягчить" параметры команды convert:
for i in *.pgm ; do convert $i -white-threshold 71000 -black-threshold 60000 -monochrome new/$i ; done
в этом случае рисунок разлиновки у меня кодируется в djvu. Мораль: если уж любите писать карандашом, пишите
на неразлинованной белой бумаге!
Заключительный этап: перекодируем каждую страничку в djvu и из множества одностраничных djvu-файлов делаем один многостраничный:
cd new
for i in *.pgm ; do cjb2 -lossy $i $(basename $i .pgm).djvu ; done
djvm -c ../file.djvu *.djvu
Результат: file.djvu занимает по 5-22 кбайт на страничку.
Для эстетов: всё-таки лучше записи от руки выглядят в векторном формате (эффект перьевой ручки).
Возьмём для примера одностраничный file.djvu (полученный путём вышеописанных манипуляций) и перекодируем его в векторный file.pdf:
ddjvu -format=ppm -page=1 -size=1756x1343 file.djvu file.pbm
convert file.pbm -monochrome file-1.pbm
potrace --opttolerance 1 --unit .5 -b pdf file.pbm
Да, file.pdf получился в 3 раза больше file.djvu, но распечатайте и сравните...
Конечно, наилучшее средство обработки отсканированного печатного текста его распознавание (оцифровка).
Для сканирования художественной литературы есть очень хорошая программа FineReader. Ах, если бы она распознавала формулы
я бы точно упросил шефа её купить (но не дороже, чем за 500CHF).
На сегодня мне неизвестны программы, которые могут распознавать формулы. Таким образом, оцифровка научно-технической
литературы долгий трудоёмкий процесс. Гораздо быстрее отсканировать в pdf и затем закодировать в djvu...
Может понадобиться отбеливание и вырезание тёмной центральной части:
мы рисуем два белых прямоугольника в середине книжки и слева там, где неприятные чёрные полосы.
Что именно делает
mkdir new
pdftoppm -gray kniga.pdf tmp ; \
for i in *.pgm ; do mkbitmap -s 1 $i -o new/$i ; done
rm *.pgm
mv new/* .
for i in *.pgm ; \
do convert $i -white-threshold 60000 -black-threshold 50000 -monochrome -fill white \
-draw 'rectangle 840,0 940,1302' \
-draw 'rectangle 0,0 60,1302' \
new/$i ; done
mkbitmap
, я не знаю. Но без этой программы рисунки в серых
тонах закодировались бы в виде безобразных чёрных клякс.
Теперь стоит внимательно посмотреть с помощью gqview
содержимое каталога new/
.
Главное выяснить, не слишком ли много мы обрезали. (Если много и не там, следует изменить координаты и размеры rectangle
в предыдущей
команде.) Обнаруженные на некоторых страницах пятна (без этого не обходится) можно удалить вручную,
например, с помощью gimp
. Затем
cd new; for i in *.pgm ; do cjb2 -lossy -clean $i $(basename $i .pgm).djvu ; done
получили по .djvu - файлу на каждую страничку. А теперь их надо объединить с помощью djvm
,
точно так же, как и в случае рукописей см. выше.
Команда convert
предоставляет безграничные возможности для творчества. Например, я тут попробовал обрезать у одной книжки поля, чтобы потом
можно было увеличить текст, растягивая его на страницу формата A4. Этого эффекта я достиг с помощью
for i in *.pgm ; \
do convert $i -crop 1550x1150+60+100 -white-threshold 60000 -black-threshold 50000 -monochrome -fill white \
-draw 'rectangle 740,0 800,1302' -trim -transparent white new/$i ; done
Много информации о djvu можно получить здесь.