Как и в любой области человеческой деятельности, в мире ПО нередко встречаются продукты, которые после яркого дебюта постепенно умирают. Читатель сам легко найдет примеры, когда все новые усовершенствования лишь загромождают некогда простую и изящную программку, ничего не добавляя к основной ее функциональности. Наученный подобным горьким опытом на примере некоторых известных продуктов (не будем тыкать пальцем), я много лет не обращал внимания на регулярно появляющиеся новые версии самого, возможно, распространенного в мире творения отечественных разработчиков — программы оптического распознавания символов (OCR, Optical Character Recognition) ABBYY FineReader. Распознает печатные тексты, если их засунуть в сканер, — и ладно, а что еще можно от нее ждать? Вот когда «оно» научится распознавать рукописи Пушкина…
Так рассуждал я примерно десятилетие: возможности FineReader мне пришлось изучить подробно еще в начале 2000-х, кажется, в 7-й ее версии. Тогда мне потребовалось оцифровать целую книжку, и я даже приобрел официальную Pro-копию программы. Но был ею разочарован: этот процесс потребовал такого количества ручной работы, что собственно скорость и качество распознавания почти не играли никакой роли.
Пару лет назад мне опять пришлось вплотную заняться распознаванием, и я познакомился с последними версиями FineReader. Работа, проделанная за пршедшее время компанией ABBYY, вызвала у меня искреннее восхищение. Мало того, что программа с лету «кушала» PDF и DJVU, если в них ленивые оцифровщики разместили лишь слой изображения, — теперь она еще научилась распознавать таблицы, помечать номера страниц как колонтитулы, не мешая их с основным текстом, и даже (не поверите!) распознавать сноски именно как сноски. В результате подготовка новой электронной версии той же самой 350-страничной книги с доведением копии до возможного идеала заняла всего четыре дня (вместо почти трех недель, требовавшихся десятилетие назад!). Сейчас я бы справился еще быстрее — много времени ушло на изучение новых приемов работы с распознанным текстом.
В прошлом году программа FineReader отметила свое двадцатилетие — ее 1-я версия вышла еще в 1993 г., когда сканеры были медленными, примитивными и безумно дорогими, а бытовые цифровые фотоаппараты существовали разве что в воображении генерального директора корпорации Apple Джона Скалли. С тех пор FineReader прошла необычайно большой путь — ей было куда совершенствоваться.
В первой половине февраля вышла очередная, 12-я версия, программы. Рассказывая о ней, я не буду подробно останавливаться на ее отличиях от предыдущей, 11-й версии, — хотя улучшения заметны и невооруженным взглядом, различия все-таки не слишком велики. Здесь стоит просто остановиться на возможностях современных версий. Нынешняя программа Fine Reader отличается от самой себя десятилетней давности, пожалуй, даже больше, чем выпускник технического вуза от члена кружка «Юных техников».
Не требуя от данного продукта невозможного, тем не менее следует отметить его недостатки и упущения, питая небезосновательную надежду, что разработчики обратят внимание на эту публикацию, — во время написания статьи я докладывал о выявленных недостатках в компанию, и мне было обещано, что «все учтут».
Что мы делаем
Программа ABBYY FineReader предоставляет очень много возможностей, для того чтобы получить результаты оцифровки в самых разных форматах и для различных целей. Разобрать их все досконально мы здесь не будем даже пытаться — для этого не хватит и целой книги, не то что журнальной статьи. И потому сосредоточимся на одной, но весьма востребованной сейчас задаче: подготовке электронных версий бумажных книг и брошюр. Эта задача охватывает достаточно много функций программы, чтобы познакомится с ней подробнее.
Сначала о том, что хочется получить в результате. Несмотря на распространение мобильных «читалок» (в последнее время, к сожалению, стремительно теряющих рынок в пользу универсальных планшетов), производители которых выдумали множество форматов электронных книг, базовым форматом для них все же остается старый добрый PDF. Он позволяет получить аутеничную копию бумажной книги, добавив к ней традиционные «электронные» удобства, такие как полнотекстовый поиск или гиперссылки (в том числе интерактивное оглавление). Конкуренцию PDF может составить более компактный формат DJVU, но он менее распространен, и традиционно электронные книги в этом формате содержат лишь слой изображения. Программа FineReader, как уже было отмечено, способна воспринимать DJVU как исходник для последующего распознавания (причисляя его к изображениям).
Но поскольку собственно «читалки» плохо воспринимают формат PDF (страницы в этом формате практически невозможно корректно масштабировать под разные размеры шрифта и экрана), то представляет интерес возможность также сохранить распознанный документ в популярных форматах электронных ридеров: в FineReader они представлены EPUB и FB2. Последовательно рассмотрим, какие действия нужно совершить и какие подводные камни могут встретиться на этом пути.
Сканирование
В принципе, FineReader позволяет переснимать оригиналы фотокамерой, но для объемных документов я этот способ применять не посоветую: ручной работы по доводке, которой и без того достаточно, неизбежно окажется еще больше, чем в случае использования обычного сканера. Оригиналы могут быть цветными или монохромными, это неважно, — по умолчанию FineReader 12 все изображения переводит в оттенки серого. Если требуется воспроизводить цветные иллюстрации, то при сканировании из самого FineReader следует заранее проверить, включен ли цветной режим, иначе информация о цвете будет потеряна. В 12-й версии кнопка включения цветного режима находится прямо на панели инструментов.
Совершенно не возбраняется заранее сделать набор сканов страниц в виде последовательно нумерованных файлов изображений в каком-нибудь распространенном формате. Разница в том, что при сканировании из FineReader программа сама настроит оптимальный режим, а при сканирования из другой программы об этом придется позаботиться уже пользователю. В принципе, условие только одно: для обычных книжных страниц должно быть установлено разрешение сканирования не ниже 300 dpi (разрешение выше этого значения тоже не требуется — файлы лишь станут неподъемными по размеру). Однако бывают случаи, когда предварительная ручная обработка сканов предпочтительнее, чем непосредственное сканирование из программы. Для примера рассмотрим ситуацию, когда нужно оцифровать документ, в оригинале представляющий собой пятую-шестую машинописную копию на пожелтевшей бумаге.
Пример фрагмента такого текста представлен на рис. 1, слева. В течение многих лет этот листочек служит у меня тестом для программ распознавания. Если посмотреть на увеличенное слово «секретные» внизу, становится понятно, почему программа FineReader вообще его пропустила: качество печати таково, что фактически перед нами вариант теста CAPTCHA, недоступный для распознавания. Надо отметить, что из попадавшихся мне OCR-программ только FineReader представила хоть какой-нибудь результат для этого текста, и то только ее последние версии — десятилетие назад она тоже выдавала сплошной набор нераспознанных штрихов и загогулин.
Иная картина предстает перед нами на фрагментах справа. Здесь сканированный текст во внешней графической программе был пропущен через фильтр увеличения резкости Unsharp Mask, затем через фильтр снижения шума Median Cut, а потом через повышение контрастности. Результаты распознавания стали куда более осмысленными, причем в случае применения 12-й версии FineReader они еще лучше, чем при использовании предыдущих. Попеняю, к слову, разработчикам программы: в принципе, в FineReader есть все нужные инструменты для доводки изображения, но на практике они оказываются почти бесполезными. Во встроенном редакторе изображений ощутимый эффект дают лишь инструменты изменения яркости/контрастности и обрезки картинки, остальные в таких сложных случаях видимого действия не оказывают. Поэтому доводку подобных оригиналов и приходится делать во внешней программе.
Шестая машинописная копия, конечно, экстремальный случай — надеюсь, вам не придется в жизни с таким сталкиваться. А обычную книжную страницу FineReader в современных версиях распознает без каких-либо проблем — повозиться придется лишь с опечатками из-за дефектов оригинала и, главное, с форматированием.
Перед сканированием стоит просмотреть оригинал на предмет наличия в нем фрагментов на различных языках. В моем случае много времени ушло на обработку списка литературы в конце книги, где нашлось несколько позиций, в которых были смешаны русский и украинский язык. Если заранее ввести украинский язык в список автоматического распознавания, то не придется терять время на ручную правку таких отрывков, как «з історії Українській PCP» (среднестатистический россиянин едва ли сможет здесь грамотно расставить все нужные варианты буквы «и»).
Отметим, что в «Справке» этот момент отражен довольно невнятно — при ее изучении вообще создается впечатление, что авторы выполняли домашнее задание для галочки. Правильная последовательность действий следующая: на панели инструментов рядом с большой кнопкой «Распознать» есть пункт «Язык документа» с ниспадающим списком, в котором следует выбрать самый нижний пункт «Выбор языков». Появится панель (рис. 2), на которой должен быть отмечен верхний пункт «Автоматически выбирать язык распознавания». Через кнопку «Указать…» следует добавить в перечень языков нужный (в нашем случае — «украинский»). Вероятность, что автоматика перепутает язык, невелика: по крайней мере для европейских языков мне ни разу не пришлось воспользоваться пунктом «Указать языки распознавания вручную» (см. рис. 2), который рекомендуется употреблять в сложных случаях.
Рис. 2. Панель выбора языков распознавания |
Редактирование
Если распознаваемый документ имеет сложную структуру, то в «Справке» рекомендуется еще до сканирования отключить автоматическое распознавание («Сервис»•«Настройки…», на вкладке «Сканировать/Открыть» снять отметку с пункта «Автоматически обрабатывать добавленные страницы»). Тогда вы можете вручную указать расположение, тип и назначение областей для каждой страницы в отдельности. Для нашей задачи — распознавание целой книги — такой прием использовать практически нереально: проще постфактум править отдельные неверно распознанные страницы. Чтобы в окне результатов распознавания видеть текст, более-менее приближенный к тому, что потом окажется в результирующем файле, следует выбрать нужную опцию из ниспадающего списка «Оформление документа» (в нашем случае это будет «Точная копия»).
Как минимум вам придется вручную отредактировать все страницы с иллюстрациями, особенно если они представляют собой схемы или чертежи с надписями. FineReader неизбежно будет пытаться разбить их на области различного типа, и тут без ручной правки не обойтись. Такие фрагменты текста, как математические формулы, проще выделить отдельно и объявить изображениями (особенно это касается рукописных вставок с формулами, характерных для оригиналов эпохи докомпьютерной верстки). Иногда целесообразно наложить текстовые области поверх картинки — они будут распознаны, но при соответствующем выборе конечного результата (см. далее) будут в нем выглядеть, как в оригинале. Иногда в этом случае стоит выделить изображение в область типа «Фоновая картинка» и проследить, чтобы текст был распознан корректно.
В книгах довольно часто встречаются страницы с крупными иллюстрациями, развернутыми относительно всех остальных страниц книги. При всей своей «интеллектуальности», FineReader самостоятельно не умеет распознавать текст, если он развернут так, как показано на рис. 3. Для того чтобы распознавание было верным, выделите область текста и внизу на панели свойств выберите из ниспадающего списка «Ориентация» нужную позицию (на рис. 3 на нее указывает стрелка курсора).
Рис. 3. Страница с иллюстрацией и подписью, развернутыми относительно остальных страниц книги |
После любого такого действия — изменения типа области, границ рисунка, редактирования изображения страницы целиком (в 12-й версии это делается через главное меню «Страница»•«Редактор изображений»), изменения языка и тому подобных операций — обязательно надо запустить распознавание страницы заново (пункт «Распознать страницу наверху окна изображения страницы или контекстное меню отдельных областей»). При этом не ошибитесь и не запустите распознавание всего документа заново через кнопку «Распознать» на панели инструментов — вы можете потерять все результаты кропотливой ручной правки.
Заметим, что FineReader имеет множество опций для частных случаев редактирования сложных документов, но останавливаться на них мы здесь не будем. Обратим внимание только на один существенный момент именно в случае сканирования книг: неприятно, если номера страниц в PDF-файле и в самой книге не будут совпадать. Если невозможно привести их в соответствие перенумерацией (см. пункт «Перенумеровать страницы контекстного меню» окна «Страницы»), то можно сделать так, чтобы оригинальные номера страниц в результирующем файле не отображались вовсе. Для этого следует убедиться, что все номера страниц распознаны как колонтитулы (и при необходимости выделить их в отдельную текстовую область, которой в панели свойств области придать назначение «Колонтитул» — не забудьте потом запустить распознавание страницы или соответствующих областей заново!), а затем в меню «Сервис»•«Настройки»•«Сохранить»•PDF снять отметку с пункта «Сохранять колонтитулы».
Оглавление в электронной книге
По умолчанию на странице свойств («Сервис»•«Настройки»•«Сохранить»•PDF) стоит отметка в пункте «Создать оглавление» (рис. 5, в тексте). Вот только без дополнительных действий создать его корректно не удастся: программа FineReader научилась очень многому, но правильно распознать уровни заголовков ей не под силу. И не только уровни: иногда она принимает за заголовки просто выделенный или крупный текст. В результате в автоматическом режиме распознавания вместо оглавления неизбежно получается совершенная каша. Приходится либо снимать эту отметку и обходится без оглавления, либо доводить полученный файл во внешних программах, причем найти удобный и недорогой инструмент для редактирования PDF — задача не из тех, что решаются с полпинка. Заметим, что проблема для других форматов электронных книг (aka FB2 и EPUB) еще острее, потому что там оглавление формируется всегда, без всяких дополнительных указаний, и доводить его потом придется так или иначе. Хотя и делается это проще, чем в случае PDF, — FB2 устроен не сложнее, чем HTML, и легко поддается редактированию вручную.
Итак, предполагаем, что у нас уже имеется автоматически распознанный текст. Прежде чем приступать к операции, обратитесь к редактору стилей (кнопка «Стили» наверху окна текста, слева от ниспадающего списка с указанием шрифта — см. рис. 4) и сформируйте стили нескольких уровней заголовков: установите шрифт, размер и начертание так, чтобы соблюдалось единообразие по всей книге. Целесообразно заодно и подсократить количество стилей, объединив похожие: FineReader всегда отличалась большим количеством создаваемых стилей, и разработчики пока не могут с этим справиться (хотя и уверяют, что в последней версии их число уменьшилось).
Дело осложняется тем, что просто выделить текст и объявить его стилем заголовка нужного уровня не получается — стиль установится, но в результирующем файле все равно все будет по-старому. После некоторых обсуждений с представителями ABBYY, которые честно признались, что эта функция пока осталась не доведенной до ума, был установлен следующий работающий алгоритм действий:
— переформатировать на нужной странице выделение текстовых областей так, чтобы заголовок оказался в отдельной текстовой области (см. окно изображения на рис. 4, слева);
— распознать заново сначала текстовые области (через контекстное меню выделенной области, пункт «Распознать», а не через распознавание всей страницы!), а затем, в последнюю очередь, отдельно — область заголовка;
— поставить курсор в область текста заголовка (не выделяя текст!) и установить стиль заголовка нужного уровня через один из ниспадающих списков стилей наверху или внизу окна с текстом (см. рис. 4). Если надо, наоборот, убрать лишний заголовок, то следует точно так же поставить курсор в эту область (опять же, не выделяя текст!) и установить для него один из стилей основного текста.
Рис. 4. Установка стиля заголовка для определенной области текста |
Таким образом следует пройти весь текст книги: нельзя остановиться лишь на каких-то важных моментах, потому что иначе в результирующем оглавлении окажется много мусора.
Сохранение результатов
Перед тем как сохранять результаты в PDF-файле, необходимо в том же меню «Сервис»•«Настройки»•«Сохранить»•PDF установить желаемый конечный результат. Для аутеничной копии бумажного оригинала подходят варианты «Текст поверх изображения страницы» или «Текст под изображением страницы» (см. рис. 4). Если оригинал совсем плох и аутеничную копию делать не имеет смысла, то можно выбрать вариант «Только текст и картинки». Чтобы в последнем случае приблизить копию к оригиналу (в режиме «Точная копия»), важно установить размер бумаги. Для книг иногда можно ограничиться стандартным форматом А5, а для более точной подгонки необходимо из ниспадающего списка выбрать либо «Использовать размер оригинала», либо через самый нижний пункт «Пользовательский размер бумаги…» установить точные размеры в миллиметрах.
Рис. 5. Настройка конечного результата распознавания в окне свойств PDF-файла |
Кроме того, обязательно следует правильно заполнить поля свойств документа на вкладке «Документ» — как минимум «Название и Авторы». Это существенно для всех разновидностей документов, но особенно критично для таких конечных форматов, как FB2 и EPUB: в противном случае книга просто не будет правильно отображаться в перечне книг в «читалке».
Кстати, о формате FB2, ставшем стандартом де-факто для отечественных электронных библиотек, включая и легальные книжные магазины. Формат этот плохо приспособлен для деловой, научной и учебной литературы с большим количеством иллюстраций и таблиц, но удобен для беллетристики. FineReader позволяет получать на удивление адекватные результаты в этом формате — например, может включать изображения обложек, и, в отличие от многих конвертеров, правильно распознает сноски. Однако результат в FB2, полученный через FineReader, даже если он с корректным оглавлением, все-таки придется доводить до ума вручную или в одной из программ типа FB2Editor: в формате много полезных и информативных полей, помимо автора и названия (серия, аннотация и т.д.), которые FineReader почему-то не предусматривает.
Автор выражает благодарность компании ABBYY за помощь в подготовке этой статьи.