На пути к профессиональному использованию современных OCR. Understanding FineReader

1cf9982ff768462aad02b2c367afba4b.jpgЯ занимаюсь разработкой технологий, используемых в продуктах распознавания текста компании ABBYY. Самым известным продуктом (а точнее — семейством продуктов), использующим эти технологии, является FineReader.Что я понимаю под «технологиями» Иногда все технологические модули (невидимые пользователю части программы) вместе называют «движком распознавания» («движок» — от английского «Engine»), что не совсем верно — они выполняют не только распознавание символов, но и кучу других действий, подробнее о которых ниже.

Чем занимается программа FineReader? Сейчас любой из настольных вариантов FineReader может проделать все самостоятельно от получения изображения со сканера, камеры или из готового файла до выдачи результата обработки в файл или в указанное приложение, так, что человек остается «за кадром». Программа сама «распознаёт» всё что нужно (в кавычках, так как при этом программа определяет места расположения текста, таблиц, картинок, OCRит обнаруженные участки с изображённым текстом, формирует документ, который сохраняет в желаемом формате с указанными настройками)Пара скриншотов 77c9e795072a4de3b933837672fb640c.pnge7a6cec9439241ce9335efe72a71214d.png

А чем занимается пользователь? b31c7177afd5469ebace9aa85bb12bb1.jpgОбычно почти ничем — сперва заказывает работу, а потом её принимает. Иногда пользователя что-то не устраивает в результате автоматической обработки, но в таких случаях типичный пользователь смиренно думает «Не повезло…«К сожалению, далеко не все знают, что помимо окна «Задача», которое показывается и при запуске, есть другие способы управлять работой программы. Они помогают с помощью человеческого интеллекта преодолеть недостатки и ограничения (иногда принципиальные) искусственного интеллекта программы.

Как научиться это делать? Есть несколько способов, при необходимости сочетаемых:

почитать «Краткое руководство», «Полное руководство пользователя», online-Справку к программе — там конечно же много букв, но почти все они написаны по делу. прочитать до конца эту статью. В ней гораздо меньше букв, к тому же, автор обещает избавить читателя от страха перед программой и пробудить у него интерес к экспериментам, экспериментировать с программой (единственный пункт, без которого не обойтись) — даже демо-версия позволяет попробовать всё, что нужно при реальной эксплуатации. С чего начать? Начать нужно с привычки сохранять результат работы не только в виде документа в целевом формате, но и как документ FineReader, содержащий результаты проделанной работы. Это позволяет работать с большим документом не несколько часов подряд в один подход, а когда удобно и сколько угодно раз, возвращаться к распознанному и вычитанному документу для экспериментов с настройками сохранения и так далее. Все действия с документом FineReader собраны в Меню «Файл».Картинки d160a2b95bfe4be0a427e4ec6929124f.png Нет ничего практичнее хорошей теории, или из чего состоит «распознавание» d049434e82cf48d2ad1b2d796163c050.jpgГлядя на лаконичные названия задач, например, «Сканировать в PDF», трудно вообразить, сколько всего происходит в промежутке между «Сканировать» и «PDF» (то есть на месте одной буквы «в»). Давайте посмотрим, сколько.Задача «преобразования документов из растрового представления в редактируемое» (не просто «распознавания») включает следующие основные этапы: Получение исходного одно- или многостраничного изображения (со сканера, фотоаппарата или в виде файла), преобразование его в специальное внутреннее представление (для упрощения и ускорения дальнейших операций). В любом случае используется подсистема обработки изображений, понимающая множество внешних форматов как на чтение, так и на запись. Подготовка изображения (исправление искажений разных типов, разделение книжных разворотов на отдельные страницы — всё это включаемо/отключаемо в настройках) — выполняет также подсистема обработки изображений. Узнать про некоторые элементы этого процесса чуть больше можно в этом посте. Сегментация, или «анализ макета страниц», когда решается, где и что нужно и не нужно распознавать, выполняется подсистемой Анализ. Распознавание (наконец-то) — выполняет подсистема Распознаватель (сюрприз!), она порождает строки, состоящие из фрагментов (будущих слов), состоящие из символов без форматирования (пока нет даже деления на параграфы, есть только строки). Некоторое количество информации о деталях работы распознавателя уже было написано на Хабре моим коллегой. А если вам действительно интересны технические подробности, то не лишним будет и упоминание, что распознаватель в своей работе использует кроме прочего и подсистему морфологии. В этом посте можно поучиться правильно использовать упомянутую подсистему морфологии и механизм Распознавание с обучением, позволяющий лучше распознавать декоративные шрифты или символы, о которых FineReader ничего не знает (бывает и такое). Синтез документа (он имеет два этапа — страничный, вызываемый сразу по завершении распознавания отдельной страницы и документный, работающий по окончании обработки всех страниц) — именно здесь определяется структура и все характеристики распознанного текста, кроме кодов символов, порождая целостный документ — выполняет подсистема Синтез. В этом посте можно попытаться осознать тяжёлую судьбу тех, кто пишет те сотни сотен эвристик, которые позволяют делать распознанный документ максимально похожим на оригинал. Просмотр и редактирование изображений страниц, структуры областей, результатов распознавания — выполняет Оболочка программы и подсистема Редактор в её составе (исполняемый файл FineReader.exe — это есть оболочка). В оболочке можно увидеть и отредактировать значительную часть порождаемой при обработке информации (начиная со структуры блоков). Конечно же, для пользовательского редактирования доступна не вся информация, которой оперируют разные подсистемы — в первую очередь потому, что показ всех находимых автоматикой сущностей, их свойств и взаимосвязей вызвал бы безумное усложнение пользовательского интерфейса. Сохранение готового документа в многочисленные внешние форматы — выполняется подсистемой Экспорт (разработкой которой занимаюсь как раз я с коллегами).Подсистемы, работающие до экспорта, не знают выходного формата/варианта сохранения. Поэтому при синтезе документа создаются сразу несколько его представлений, которые могут потребоваться всем форматам/вариантам экспорта, а оболочка умеет их показывать аналогично тому, как результаты экспорта будут отображены в целевых приложениях. Это порождает немало трудностей при разработке, потому что слишком тесная взаимосвязь обозначенных подсистем приводит к усложнению разделения ответственности на «пограничных территориях», когда бага/фича лежит где-то между подсистемами. Но мы пока справляемся :) Зачем так много модулей (подсистем)? Для начала необходимо заметить, что перечислены только основные, а не все. Подсистема сканирования, например, не день и не два писалась, а многие месяцы и даже, возможно, годы. Впрочем, вернёмся к вопросу, обозначенному выше.Во-первых, проект «Технологии распознавания» и много сложных продуктов на его основе разрабатываются уже не первое десятилетие большими коллективами людей — их работу просто необходимо делить организационно и технологически на части, чтобы разрабатывать каждую более-менее независимо — конечно же, детально описав интерфейсы и правила взаимодействия модулей, чтобы выход предыдущего модуля в цепочке стыковался со входом следующего.

Во-вторых, некоторые продукты могут использовать не все из перечисленных стадий обработки (и реализующих их подсистем), а только некоторые. Например, модуль «Распознаватель» имеет собственные подмодули для обработки печатного и рукописного текста, а его «печатный» под-модуль — ещё и свои под-под-модули для обработки языков со сложной письменностью. Похожая ситуация с модулем разпознавания штрихкодов и кодеками некоторых форматов изображений — некоторые продукты обходятся без них.

Какой результат и зачем нужен пользователю? fad5faab259d470ab59af9640ccb7197.jpgНе озадачившись вовремя этим вопросом, можно остаться недовольным даже полностью правильным результатом OCR в узком смысле — когда вроде все буквы найдены и правильно распознаны, но в целом что-то в результате печалит.Перечислю некоторые из популярных сценариев использования FineReader с особенностями каждого сценария.Преобразование архива документов-изображений в электронный вид, с максимальным сохранением внешнего вида страниц, но добавлением возможности поиска и копирования небольших фрагментов текста. Этот сценарий обычно использует сохранение обработанного документа в PDF с видимым изображением страницы (не всегда в полностью оригинальном виде, но по возможности максимально похожим на него) и добавлением «невидимого» распознанного текста, который в PDF-просмотрщиках можно искать, выделять и копировать. На нашем жаргоне этот режим сохранения в PDF называется «Текст под изображением», он наиболее популярен, но это лишь один из 4 режимов сохранения в PDF (на остальных остановлюсь подробнее в статье про сохранение). Ценители формата DjVu также могут использовать аналогичный режим сохранения.Важное достоинство режима «Текст под изображением» в том, что он требует минимальных знаний о структуре сохраняемого текста, привязывая символы к нужным местам результирующей страницы просто по координатам на исходном изображении. Поэтому неважно, если таблицы не были правильно автоматически детектированы в оригинале (развалившись на кучу текстовых областей), или текст немного нелогично выделился в текстовые области — в результирующем PDF найдётся всё или почти всё, лишь бы символы правильно распознались и собрались в слова.

Создание документа в формате любого из популярных текстовых редакторов (Microsoft Word или OpenOffice/LibreOffice Writer), более-менее похожего на оригинал — для последующего редактирования и/или переиспользования значительных фрагментов в новых документах. При сохранении в форматы RTF и DOCX (для Word) и ODT (для Writer) поддержаны 4 режима сохранения, отличающихся балансом «точное сохранение вида простота редактирования и копирования содержимого». Я ещё напишу подробнее об их различиях, но общим требованием для разумного вида результата обработки является разумность разметки всех элементов документа в FR — областей и их свойств.Создание электронной книги на базе сканированной бумажной книги. Во многом похож на предыдущий, но в силу упрощённой модели документа в форматах электронных книг, ограничений средств их редактирования и показа после FineReader, иногда требует больше внимания к некоторым мелочам.И зачем я это теперь знаю? Как вы, наверняка, уже догадались, понимание этих логичных, но всё-таки не очевидных моментов позволило бы пользователям доводить результат деятельности FineReader до идеального (с точки зрения пользователя) состояния с минимальными трудозатратами. В следующей части поста я дам конкретные рекомендации по решению типичных пользовательских проблем, а пока давайте вернёмся к работе:)

© Habrahabr.ru