Улучшить качество скана djvu

Обновлено: 04.07.2024

  • ЖАНРЫ 360
  • АВТОРЫ 278 562
  • КНИГИ 658 211
  • СЕРИИ 25 239
  • ПОЛЬЗОВАТЕЛИ 614 493

Создание электронных книг из сканов. DjVu или Pdf из бумажной книги легко и быстро

Итак: перед вами взятая у приятеля, из библиотеки, или просто хорошая, интересная книга, которую хотелось бы иметь на компьютере. И не просто иметь, а иметь в таком виде, который позволил бы выполнять поиск по тексту, удобно читать книгу на экране монитора или на устройствах еВоок, а если это не научно-техническая или справочная литература – еще и читать на любимом сотовом телефоне, iPhon'e или PDA. В этом пошаговом руководстве, основанном на собственном опыте, я постараюсь рассказать о том, как «выжать» максимум результатов из проделанной простой, но иногда весьма утомительной работы по сканированию книги.

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

Шаг 1. Сканирование

1.1 Подготовка к процессу

Сканирование, с которого начинается, зачастую, долгий путь «в Сеть» любой изданной когда-либо книги (рынок легальных электронных книг, размещаемых издателями непосредственно после электронной верстки, у нас совершенно неразвит) – это самая монотонная часть всей предстоящей работы, поэтому к ней стоит тщательно подготовиться заранее – протереть стекло сканера, проверить наличие свободного места на диске – несжатый скан одной средней по размеру книги может занимать до 1 Гбайт. Потом начинается собственно сканирование.

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

Phistek OpticBook: преимущества и недостатки

Создание электронных книг из сканов. DjVu или Pdf из бумажной книги легко и быстро - pic_1.jpg

Из всех сканеров, имеющихся на рынке, для сканирования книг в больших количествах нет ничего лучше серии Plustek OpticBook. Эти планшетные сканеры отличаются высоким корпусом и прозрачным основанием, выполненным "в край" – так, чтобы на него можно было уложить книгу, не ломая и не деформируя корешок. Такой сканер – идеален для перевода в электронный вид десятков томов, например из библиотеки университетской кафедры. Однако, для домашнего повседневного применения он практически непригоден. Причина этого – в сугубой спецbализированности устройства под книгосканирование и OCR. В конструкции PlusTek OpticBook в жертву быстродействию и разрешению принесено все, что только можно, включая четкость, избирательность и цветопередачу.

Сканирование всех своих книг я проводил и провожу на достаточно старом (2003 года выпуска) полупрофессиональном планшетном сканере для документсистем Hewlett-Packard ScanJet 6390с. Эта машина отличается высоким быстродействием (15-25 сек на страницу формата А4 в режиме градаций серого). Кроме того, в ее комплект поставки входит удобное программное обеспечение HP Precision Scan Pro. Именно на этой программе сделаны все скрины с примерами сканирования.

Заранее хочу предостеречь от использования в качестве основного инструмента сканирования программы FineReader. Оставим эту программу до стадии OCR. Пока она может лишь максимально усложнить нам задачу пакетной обработки, применив (причем, без нашего ведома) – свои не слишком хорошие алгоритмы чистки и сжатия сканов. А главное – она практически лишит нас шансов применить важнейший прием – оверсемплинг до разрешения 600 dpi.

Собственно сканирование состоит из трех этапов: сканирования обложки, основной части книги, цветных вклеек и иллюстрации. Последовательно описывать эти этапы нет смысла – они переплетаются друг с другом в зависимости от верстки книги. Стоит привести лишь параметры сканирования, оптимальные для разных типов книжных страниц.

Здесь приведу еще одно важнейшее предупреждение(!):

На некоторых очень старых моделях сканеров есть возможность вручную включать внутренний оверсемплинг, тo есть фактически сканировать с меньшим разрешением, чем имеет выходной файл. Обозначается такая установка разрешения обычно словом Software или Resampled. Эту установку использовать нельзя! Ее включение приведет в полную негодность полученные файлы, и их дальнейшая обработка окончательно потеряет смысл. Также нельзя использовать установку сканирования в режиме Linearеt или Black amp;White (одноцветный)

Общие рекомендации такие: для текстовых страниц используйте:

• Режим Grayscale (оттенки серого), для цветных иллюстраций и обложек – True Color (полноцветный).

• Разрешение сканирования – 300 dpi (только оптическое, повторимся еще раз!).

• Остальные установки можно оставить по умолчанию.

Таблица 1. Оптимальные параметры сканирования

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

Разрешение: 300 dpi

Резкость: Low или Medium

Яркость и контраст: Любые, специальные параметры не использовать

Разрешение: 300 dpi

Резкость: Medium. High

Яркость и контраст: Любые, можно применить пресет B amp;W Photo

Разрешение: 300 dpi

Резкость: High можно применить пресет B amp;W Photo

Яркость и контраст: Определяются по предварительному сканированию

Режим: True Color

Разрешение: 300 dpi

Резкость: Low, можно применить пресет Photo

Яркость и контраст: Определяются по предварительному сканированию

Тип страницы: Цветная обложка или иллюстрация страничного формата

Режим: True Color

Разрешение: 300 dpi

Резкость: Low, можно применить пресет Photo

Яркость и контраст: Определяются по предварительному сканированию

Формат выходного файла: Uncompressed (Несжатый) TIFF(!)

Почему не JPEG?

Формат JPEG для сохранения сканов книжных страниц использовать можно, но не нужно.

Во-первых: потому, что этот формат даже при включенном сжатии без потерь (Quality = 100) оставляет артефакты в виде «квадратиков».

Во-вторых и самых главных: многократное пережатие при сохранении обработанного файла JPEG вновь в «свой» формат за 2-3 цикла обработки приводит изображение в негодность.

Отдельно коснемся использования сжатого (Compressed) TIFF: при сохранении сжатого изображения в TIFF можно использовать алгоритмы сжатия: ZIP. LZW (без потерь). JPEG (с потерями). Без хлопот программы распознавания вроде FineReader понимают только JPEG.

Со всеми остальными форматами проблемы могут возникать непредсказуемо (например, у меня FineReader 7.0 испытывает устойчивую «идиосинкразию» конкретно к формату сжатия LZW). Поэтому если нет особых проблем с наличием места на диске, лучше всегда использовать несжатый файл.

На этой странице находится подборка разнообразных "обрывочных" советов по сканированию книг для DjVu, которые не вошли в прочие мои статьи. Эта информация была собрана из форумов и трудно поддаётся упорядочиванию - но представляет определённую ценность.

Информации здесь пока совсем мало, но по мере появления она будет сюда добавляться.

1. Если хочется удалить из DjVu-файла слой "задний фон", то можно сделать следующее:

б. Или воспользоваться утилитой DjVu Layers Remove.

2. Если имя DjVu-файла содержит апостроф - то броузерный DjVu-плагин старых версий не сможет его открыть.

3. Если DjVu-файл не открывается под Windows ни одним из существующих DjVu-просмотрщиков - то отключите 2-е ядро у своего 2-ядерного микропроцессора.

4. В программе DjVu Solo 3.1, по-видимому, заблокирована проверка многих параметров из файла профилей documenttodjvu.conf - т.е. их изменения ни на что не влияют. Пока что замечен эффект лишь от установки параметра lossless=true.

5. Для того, чтобы перевести файлы из формата PNG в DjVu - воспользуйтесь виртуальным DjVu-принтером.

6. Для организации двусторонней печати из DjVu-файла можно использовать FinePrint.

7. У полутоновых рисунков-фотографий на Greyscale-сканах необходимо "размывать" растр - перед кодированием их в DjVu. Тогда при кодировании в DjVu этот рисунок попадёт в слой "задний план", а не в слой "маска" - что позволит значительно сократить размер получаемого DjVu-файла.

"Размытие" можно сделать при помощи операции Blur (или одной из её разновидностей - например, Adaptive Blur) - в любом "сложном" графическом редакторе - например, Abobe PhotoShop, PaintShop Pro, Corel PHOTO-PAINT и др.

8. Если при сканировании "просвечивается" текст с обратной стороны страницы книги - то от этого можно избавиться, если подложить за страницу лист чёрной бумаги (из фотолаборатории или рентген-кабинета).

Гарнитура - определенный тип рисунка символов у группы сходных шрифтов - например, гарнитура Times у шрифтов TimesBold, TimesNormal.

Засечки (серифы) - выступающие вверху/внизу буквы штрихи (как у буквы "н" шрифта Times New Roman).

Глиф - векторное изображение отдельного символа в шрифте, ее контур.

11. У DjVu-кодировщика есть особенность - удалять отдельные точки.

12. Если в книге есть много страниц с альбомной (не портретной) ориентацией, то перед распознаванием в FineReader'е их можно повернуть вручную на 90 градусов - чтобы текст на них распознался (или же включить опцию "Определять ориентацию страницы (при распознавании)").

При внедрении такого OCR-текста в готовую DjVu-книгу позиции изображений текста и соответствующих OCR-слов, естественно, не совпадут - однако этот OCR-текст будет восприниматься программами, осуществляющими поиск по OCR-тексту DjVu-файлов (dtSearch + DjVu IFilter, Google Desktop + его DjVu-плагин, Яндекс-Персональный поиск и т.д.)

13. TIF-файлы, создаваемые разными программами, нередко не воспринимаются DjVu-кодировщиком DEE 5.1. В этом случае их нужно пакетно "прогонять" через Irfan View - т.е. пакетное сохранение с не-изменением свойств этих TIF-файлов (а на самом деле при этом отсекаются "левые" теги TIF-файлов, на которых "спотыкается" DEE 5.1).

14. В старых LPT-сканерах типа Mustek ScanExpress 12000 P под Win2000 была такая проблема, как появление модального (т.е. не убирающегося с экрана) окошка в момент сканирования.

Есть 2 способа решения этой проблемы:

1) Самый простой. Большинство настроек работы сканера скрыто в файле "mtwm.ini". Таких файлов для каждого установленного сканера Mustek обычно 2. Один в каталоге "WINDOWS\TWAIN_32\xxx\mtwm.ini", но он ни на
что не влияет, другой в "Program Files", например, "Program Files\BearPaw 2448TA Plus\Driver" (для других моделей нечто подобное, найти проще по наличию в этом каталоге самого файла mtwm.ini или ui.exe).

Найдя файл "mtwm.ini", редактируем его. Ищем подраздел "[xxx_INFO]" или подобный (в этом подразделе обязательно есть параметр ScanSetting, но он нам не нужен, хотя если он стоит в SLWSPD, то меняем на NMLSPD). Ищем в этом подразделе параметр "SMShowStatusDlg", если есть ставим значение в "0" ("SMShowStatusDlg=0"), если нет то сами вписываем эту строчку. Теперь модальное окошко возникать не будет.

На некоторых моделях и драйверах после установки этого параметра может возникнуть глюк - при начале сканирования головка двигается на пару секунд и возвращается обратно. В этом случае изменяем параметр на
"1" ("SMShowStatusDlg=1") и используем способ 2.

2) Способ универсален. Может подойти и для других сканеров (других фирм). Как известно параметры многих окон, форм можно редактировать как ресурсы, н-р, с помощью Restorator'а. Наша задача изменить размеры
модального окошка показа статуса на 1x1 пиксел - такая небольшая серая точка мешать не будет. Или изменить сам статус окна с модального, на немодальный (это лучше).

Для моего сканера BearPaw 2400TA Plus (используется драйвер от 2448TA) параметры модального окошка содержаться в файле "Scanobj.dll".

Открываем его в Restorator'е. Нас интересует ветка "Dialogs". Тут стоит подумать, т.к. подобных искомому окну форм несколько. Методом пробок и ошибок определено, что нас интересует оккошко, где написано "Warming Up. ". Его и буде редактировать. Для этого перейдем в RC mode (Viewer\RC Mode).

Смотрим параметры окна:

------- Исходное --------
156 DIALOG 6, 15, 175, 76
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP
FONT 8, "MS Sans Serif"
-------------------------

------- Измененное ------
156 DIALOG 6, 15, 175, 76
STYLE DS_SETFONT | WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif"
-------------------------

Все теперь окошко появляться не будет, точнее оно будет не модальным и всплывающим (DS_MODALFRAME | WS_POPUP), а дочерним (WS_CHILD), и невидимым (WS_DISABLED).

Есть недостаток, т.к. окошко не видимо, то невозможно прервать процесс сканирования.

Можно также просто изменить размеры окошка, если не хочется менять тип окна (предыдущие изменения).

Можно также изменить тип кнопки "Scan", на нажимаемую по умолчанию (например, пробелом). Для этого редактируем файл "ui.exe". В ветке "Dialogs" ищем окошко с текстом

и изменяем тип на

Это решает проблему, когда в процессе сканирования переключаешься на
другое окно и возвращаешься обратно к TWAIN-окну - при нажатии пробела
не всегда "нажимается" кнопка "Scan".

Методики по работе с Corel PHOTO-PAINT от Arcand

По поводу сжатия. Я надолго застрял на отметке 9 кБ/стр (это о сжатии дежавю). Вроде бы сканы были хорошими и шрифт удобным, но никак не получалось увеличить сжатие. Теперь считаю, что дело в сглаживании. Неровности контуров, даже малозаметные, утяжеляют дежавю. Поэтому, с целью увеличения сжатия, сглаживание нужно делать обязательно.

Макросы - это программки, написанные на VBA. Некоторые отличия от VB имеются и связаны они в основном с тем, что макросы работают в среде программы (например, как у меня в Corel PHOTO-PAINT), а не автономно.

Применение Corel PHOTO-PAINT для обработки сканов

Говоря об обработке сканов в Корел нельзя обойти стороной СканКромсатор. При оптимальной организации работы Корела и СканКромсатора снижаются временные затраты на весь цикл кромсания-обработки, так и работы над ошибками.
Первым делом сканы поворачиваются. Для этого пишется отдельный скрипт Корел (Изображение->Повернуть->90 по или против часовой стрелки) и затем запускается пакетная обработка (о записи скрипта и его выполнении в пакетном режиме будет сказано ниже).
Далее сканы кромсаются в СканКромсаторе по полной программе с получением gray 300 дпи (предполагается, что исходные сканы также 300 дпи gray). Т.е. выполняется разрезка/обрезка, deskew и background cleaner. Despeckle выполняется отдельно, так как на серых сканах он не работает.
Одно замечание. Рекомендую установить порог в Low- или MiddleDark. Мне показалось, что СканКромсатор работает при этом пороге немного быстрее и качество deskew лучше. Во всяком случае одиночные номера страниц обрезаются реже, а если повысить соответствующую чувствительность, то у меня не обрезались даже номера, состоящие из одной цифры.
Потом запускается скрипт Корел для обработки сканов в пакетном режиме. Выходные сканы будут bw 600 дпи.
И в заключение, сканы снова загружаются в СканКромсатор (для чистки мусора). Отключаются все опции, устанавливается только Despeckle и его режим. После выполнения обработки, ручная чистка крупного мусора.

Описание обработок в Корел:

1. Адаптивное размытие. Эффекты->Размытость->Интеллектуальная размытость. В диалоге указать Количество 30-40. Если на сканах имеются бледные тонкие линии, то это число следует уменьшить.
2. Ресемплинг. Изображение->Изменить разрешение. В диалоге указать для Разрешения 600 дпи.
3. Цветокоррекция. Настройка->Увеличение контрастности. Движки сверху гистограммы установить соответственно на начало подъема (точка черного) и немного левее выхода на верхнюю полку (точка белого). Гамму можно не трогать. Результат лучше в этом и других диалогах наблюдать в сдвоенном окне просмотра (оригинал-результат). Навигация в окне (левом) такая: клик левой кнопкой мыши - увеличение, правой - уменьшение, для перемещения по скану - захватить левой кнопкой мыши и тащить.
4. Сглаживание. Эффекты->Размытость->Размывка края. В диалоге установить Процент 100, Радиус 1.
5. Контурная резкость. Эффекты->Повышение резкости->Понижение резкости по выделению. В диалоге установить Порог 0, Радиус 5, Процент 100-300. Меньшие значения процента для получения более гладких контуров букв, большие - для вытягивания их бледных перемычек.
6. Сглаживание. Эффекты->Размытость->Размывка края. В диалоге установить Процент 100, Радиус 1. Еще одно сглаживание. Чтобы при бинаризации получились более гладкие буквы.
7. Бинаризация. Изображение->Преобразовать в черно-белый (1 бит). В диалоге выбрать Метод преобразования Штриховой рисунок и Порог 140-170. Порог подбирается визуально до получения оптимального баланса гладкость-ужирнение.

Запись скрипта и его выполнение в пакетном режиме.

Загружаете в Корел какой-либо скан. Далее Окно->Окна настройки->Запись. Открывается окно докера Записи макроса (в дальнейшем докер лучше не закрывать, а сворачивать, тогда докер будет находится у правой стороны окна и для открытия достаточно щелкнуть по его заголовку). Нажать кнопку с красным кружком для начала записи (слева от нее кнопка Останова). Выполняете указанные выше обработки. По окончании нажать кнопку Остановить. Сохраняете скрипт (кнопка Сохранить), например, в папку с исходными сканами и закрываете без сохранения окно со сканом.
Выполняете пакетную обработку Файл->Пакетная обработка. В диалоге загружаете сканы для обработки и созданный для них скрипт. Если не включена, включаете флажок Закрыть файл после пакетной обработки. Если обрабатываемые сканы вам не нужны, в окне После выполнения выбираете Сохранять вместо оригинала. В противном случае, выбираете Сохранять в другом каталоге и указываете папку назначения. Нажатием кнопки Воспроизвести запускаете обработку сканов. На моей машине 300 страниц обрабатываются около часа, что весьма шустро.

Последние замечания. Все описанное относится к русской версии Corel PHOTO-PAINT X3 и к обработке черно-белых книг без серых рисунков. Для обработки книг с небольшим количеством серых рисунком данную методику требуется немного дополнить. Но об этом как-нибудь в другой раз. С обработками я еще полностью не определился, так как пока сделал немного больше одной книжки. Надо иметь ввиду, чем качественнее обработка, тем лучше сжатие. По достижении некоторого порога по качеству, сказать какая обработка лучше только по виду сканов уже невозможно. Определить это можно только по степени сжатия дежавю.

И еще, на Кореловский тиф (bw, LZW сжатие) DEE ругается. Так что все равно придется делать их (сканов) преобразование. Заодно можно и почистить :).

Краткий конспект обработок в Corel PHOTO-PAINT:

для line art (в скобках название фильтра в русской версии Корела) -
1. Адаптивное размытие (Интеллектуальная размытость);
2. Ресемплинг до 600 дпи (Изменить разрешение);
3. Тоновая коррекция (Увеличение контрастности):
4. Сглаживание;
5. Контурная резкость (Понижение резкости по выделению);
6. Сглаживание;
7. Бинаризация (преобразовать в черно-белый).

для foto (серых областей) -
1. Адаптивное размытие (Интеллектуальная размытость);
2. Ресемплинг до 600 дпи (Изменить разрешение);
3. Тоновая коррекция (Увеличение контрастности).

Об обработке обложек

Подробнее про обложки позже. Коротко. Создаете маску отдельно для текста и других не фоновых элементов (сохраняете в альфа-канале). Используете выделение по цвету, волшебную палочку и кисть выделения. Абрис выделения размываете - чтобы переходы выглядели естественно. Создаете образцы растровой заливки - выбираете их на скане, для однородной заливки задаете цвет. Ну и выполняете заливку. Для многих случаев этого ИМХО хватит.

Дополнительно:

Обработка цветного с использованием каналов

Ужирнение букв

Вариант с применением Корел. Преобразование в gray, Размывка края (ориентировочно Радиус=4) и в заключение бинаризация (Штриховой рисунок, порог подбирается по вкусу).

В прошлой статье мы рассматривали программы-вьюеры, с помощью которых можно просматривать файлы DjVu. Сейчас познакомимся с программами-редакторами, способными создавать полноценные электронные книги в этом же формате.

DjVu Solo

Сейчас мы попробуем создать книгу на основе сканированных изображений. Допустим, мы отсканировали книгу и решили конвертировать сканы в дежавю. Это делается просто, но если книга многостраничная, то работа будет монотонной и долгой, как на конвейере.

Зайдём в меню «Файл» и найдём там вкладку «Открыть». В диалоговом окне выставляем параметры «Все поддерживаемые файлы» и ищем нужное изображение. (Для того, чтобы не запутаться при добавлении шестисотой страницы, все файлы лучше всего поместить в одну папку и пронумеровать.) Добавили первую страницу. Для продолжения действа заходим в меню «Правка», нажимаем на вкладку «Добавить» и тем же самым путём получаем вторую страницу. В этом и заключается весь алгоритм работы — «Правка">"Добавить». Если вы вдруг забыли добавить какую-нибудь страницу, это не беда. В меню «Правка» есть такая функция «Вставить до» и «Вставить после». Только при этом надо выделить страницу, до или после которой требуется вставить изображение.

Кстати, если у вас все исходные файлы пронумерованы по порядку и вы уверены, что не надо их перепроверять, тогда можно воспользоваться вкладкой «Добавить», чтобы вставить все картинки оптом. Для этого в диалоговом окне их нужно выделить и затем как обычно нажать ОК. Таким же образом можно использовать вкладки «Вставить до» и «Вставить после». После того, как вы убедились, что макет книги готов, в меню файл выбираем «перекодировать в DjVu» и получаем результат.

Программа позволяет сканировать изображения и вставлять их тёпленькими, прямо со сканера. Также можно распечатывать готовые книги, если с бумаги вам удобнее читать.

Здесь можно расставлять активные гиперссылки и комментарии, и сейчас я покажу, как это делается. Программа имеет несколько режимов выделения.

«Highlight area» («Выделенный участок») пригодится только для того, чтобы отметить некоторые детали изображений или текста. Едва только мы выделим требуемую область, откроется окно, в котором можно написать комментарий к выделению, подобрать цвет и прозрачность, а так же глубину теней. После этого, при наведении курсора на выделенную область, появляется написанный нами комментарий. Весьма удобная опция для подписей на географических картах, например.

«Rectangular hyperlink» (прямоугольная гиперссылка). В открывшемся окне так же можно настроить вид вашей ссылки — написать название ссылки, подобрать цвет и прозрачность, глубину теней. После того, как мы вобьём адрес ссылки и нажмём кнопку ОК, ссылка готова.

Теми же самыми опциями обладают функции «Oval hyperlink» (овальная гиперссылка) и «Poligon hyperlink» (многогранная гиперссылка). Понятно, что они отличаются только формой.

Все эти «горячие области» и гиперссылки работают в других программах, но не в устаревших, как Djvureader.

К сожалению, закладок я в этой программе не обнаружил, а без них иногда никак. Закладки можно расставлять в программе WinDjView.

DjVu Pro

Первое, как я уже и сказал, — программа русифицирована. Именно поэтому мы и предпочтём именно её. Теперь рассмотрим функции, которых нет в DjVu Solo. В основном все новшества относятся к работе с уже готовым дежавю-форматом.

При помощи панели примечаний программа позволяет изменять файлы — рисовать на страницах почти так же, как в графических программах типа Corel Photoshop. Инструменты здесь простые — прямоугольник, эллипс, ломаная линия, многоугольник, произвольная линия. Можно также высветить выбранную область любым цветом, точно так же расставить по книге гиперссылки, как и в программе DjVu Solo.

Но самая интересная опция — на изображение можно накладывать текст, выбирая при этом тип шрифта, размер и форматирование, так же как и в MS Word. На панели примечаний находим кнопку «Текст» и, нажав её, выделяем ту область, на которой хотим сделать надпись. После этого открывается окно, в которое мы вписываем необходимое, а после этого, нажав на надпись в режиме «текст» правой кнопкой мыши, мы увидим открывшееся меню, в котором выбираем «свойства текста» и изменяем шрифт по своему желанию. Можно также добавить сюда гиперссылку, что иногда весьма полезно.

Одно небольшое «но» — текст воспринимается только программами современных с DjVu Pro версий, более ранние не видят изменений, а в некоторых случая перестают читать изменённые файлы. Пользуйтесь последними версиями вьюеров.

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

На этом пока закончим. Могу сказать только о ещё одном вьюере, Stduviewer. Эта программа сочетает в себе возможность просмотра нескольких форматов — DjVu, PDF, txt, и tiff. О ней мы поговорим как-нибудь потом, когда снова коснёмся программ-просмотрщиков электронных книг.

Библиотека распознавания текста tesseract является открытым, безопасным и полезным инструментом в аудите. К сожалению, она пасует при распознавании массивных таблиц на скан образах документов. Рассмотрим как обойти это ограничение.

В системах электронного документооборота до сих пор часто встречаются сканы документов, будь то анкеты, заявления и т.п. Они остаются важными объектами аудита, но являются менее удобными при обработке автоматизированными инструментами. Данная проблема решается оцифровкой документов. В 2010 году в библиотеку распознавания текста tesseract ввели русский язык. В связи с огромным объемом материала для обучения нейронных сетей LTSM (сети с долгой краткосрочной памятью), лежащих в ее основе, к 2020 качество распознавания русского текста стало достаточно высоким для использования в банковской сфере. Наша команда успешно использовала tesseract для оцифровки текстов, пока не столкнулась с документами, в которых содержатся таблицы. Опытом решения проблемы низкого качества распознавания таблиц мы сегодня и поделимся.

Актуальным решением проблемы обработки таблиц на данный момент является распознавание каждой ячейки по отдельности. Встроенный в tesseract метод image_to_data требует настройки для каждого шаблона документа, поэтому проще использовать внешние решения. Популярным решением является нейросеть An Efficient and Accurate Scene Text Detector (далее — EAST), которая у нас не прижилась из-за сложности развертки инфраструктуры. К тому же, функционал EAST избыточен для поиска машинно-распознаваемых полей в сканах документов – нейросеть решает проблемы зашумленности, нарушений перспективы, размытости изображений, бликов, текста на неплоских объектах, цветного и плохо освещенного текста – в общем того, чего в сканированных изображениях нет. В результате было принято решение вернуться к менее популярному, но более традиционному методу поиска ячеек таблиц при помощи простой и надежной эвристики в opencv.

Opencv –библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. В числе прочего, в библиотеке реализована функция поиска контуров объектов на картинке.

Описываемая часть задачи заключалась в извлечении информации из табличной части скан-образов документов и переводе ее в привычный для работы формат, такой как строки или даже таблицы, с целью использования в различных аудиторских проверках. Реализовано это было на языке python, привычном в ML-сообществе, благо интерфейсы opencv и tesseract присутствуют в нем в полной мере.

Первым делом документы нужно было извлечь из pdf. Для этого использовалась библиотека PyMuPDF(импортируется как fitz) с преобразованием в понятный opencv формат при помощи массивов numpy:

pages = [] doc = fitz.open(file) for n in range(doc.pageCount): page = doc.loadPage(n) pix = page.getPixmap() image = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.h, pix.w, pix.n) image = np.ascontiguousarray(image[. [2, 1, 0]]) pages.append(image)

Способ применения к полученному списку страниц метода распознавания это скорее вопрос инфраструктурный, поскольку самым ресурсоемким во всем процессе в любом случае останется само распознавание текста. Покажем выполняемые методом действия на примере скана страницы журнала «Моделист-конструктор» № 8’2007, в дальнейшем называя его «image»:

Для наглядности прогоним его через tesseract при помощи его python обертки:

recognized_text = pytesseract.image_to_string(image,lang="rus") print(recognized_text.replace("\n"," "))

‘офи [ом [ м | пятидверный Высота, мм 1766 Бы Угол въезда/съезда, град. 25,4/22,9 25,4/22,9 620 — 1750 620 — 1750 Снаряженная масса, кг 2125 2180 Бензиновый с распределенным Дизельный впрыском топлива с турбонаддувом 7. Объем багажника; л. — Двигатель Рабочий объем, см? 2996 4799 ни ош Привод Полный с многодисковой муфтой в приводе р передних колес Нередняя подвеска независимая пружинная двухрычажная Задняя подвеска независимая | многорычажная | пневматическая’

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

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

Первым делом преобразуем изображение в черно-белое по пороговому значению яркости (1), чтобы полутона не мешали алгоритму размытия. После этого размоем изображение так, чтобы буквы склеились между собой и образовали совокупный контур (2). Методом cv2.findContours обнаружим все контуры на обработанном изображении (3). Получим координаты и размеры прямоугольников вокруг каждого контура, и отфильтруем контуры похожие на ячейки таблицы (4). Для наглядности промежуточные результаты приведены ниже.

Читайте также: