Обработка сканов с «манхэттенской» (блочной) структурой.
Инструменты:
- python-cropper-tk (зависит от python, python-tk, python-reportlab)
- python-pdfwatermark (зависит от python, python-pypdf2)
- hocr-tools (зависит от python, python-reportlab)
- imagemagick
- libtiff
- tesseract
- ghostscript
«Манхэттенская» структура означает, что скан можно разделить на кардинально отличающиеся друг от друга области: цветные иллюстрации и чёрно-белый (хотя не обязательно чёрный) текст.
Первое. Отделяем иллюстрации от текста:
$ croppertktopdf.py page-062.png
Устанавливаем параметры:
- DPI: 600 - разрешение скана
- Формат: png - на данном этапе используем Flate кодирование
- div: 2 - downsample иллюстраций (скан не обладает достаточным качеством, чтобы имело смысл сохранять иллюстрации в 600dpi, поэтому сохранять их будем в 300dpi, что облегчит просмотр во вьючере)
- []: 3 - clean margin, очистка дополнительно трёх пикселей вокруг иллюстраций на нулевом (текстовом) фрейме. Это чтобы не оставалось контуров от иллюстраций.
Используя моды [Zoom] и [+] можно очень точно выделить иллюстрации (не очень удобно правда, но лучше я уже сделать не смог). После того, как все иллюстрации выделены жмём [Crops]. В результате получаем <page-062.png.pdf> с иллюстрациями (как выглядит) и набор фреймов, из которых для дальнейшей обработки нужен только нулевой <page-062__crop__0.png> (как выглядит)
Иллюстрации имеют пока большой размер (11.2M), но только потому, что на данном этапе используется Flate компрессия.
Второе. Бинаризуем нулевой фрейм используя imagemagick:
convert +dither -colors 2 -units PixelsPerInch -density 600 -compress Group4 page-062__crop__0.png page-062__crop__0.tiff
Третье. Конвертируем бинаризованное изображение текста в pdf, используя tiff2pdf:
tiff2pdf -o page-062__crop__0.pdf page-062__crop__0.tiff
Размер page-062__crop__0.pdf с текстом вполне себе: 58K.
Четвертое. Объединяем текст и иллюстрации:
pdfwatermark page-062.png.pdf page-062__crop__0.pdf page.pdf
Размер page.pdf пока что большой (11.3M), по ещё Flate.
Пятое. Распознаем текст с помощью tesseract:
tesseract page-062__crop__0.tiff page-062__crop__0 -l rus+eng hocr
hocr-pdf -d 600 -i tiff -o hocr.pdf -n .
pdfwatermark hocr.pdf page.pdf page-062.pdf
Шестое. DCT компрессия иллюстраций с помощью ghostscript:
ps2pdf page-062.pdf page-062.gs.pdf
Результирующий документ page-062.gs.pdf имеет размер 800K, быстро просматривается во вьючере, текст чёткий, без муара, иллюстрации на месте, имеет OCR слой. (Можно оптимизировать дополнительно с помощью jpdftweak)