...

среда, 15 октября 2014 г.

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

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

Иногда все технологические модули (невидимые пользователю части программы) вместе называют «движком распознавания» («движок» — от английского «Engine»), что не совсем верно – они выполняют не только распознавание символов, но и кучу других действий, подробнее о которых ниже.



Чем занимается программа FineReader?




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

Пара скриншотов







А чем занимается пользователь?






Обычно почти ничем — сперва заказывает работу, а потом её принимает. Иногда пользователя что-то не устраивает в результате автоматической обработки, но в таких случаях типичный пользователь смиренно думает «Не повезло...»

К сожалению, далеко не все знают, что помимо окна «Задача», которое показывается и при запуске, есть другие способы управлять работой программы. Они помогают с помощью человеческого интеллекта преодолеть недостатки и ограничения (иногда принципиальные) искусственного интеллекта программы.


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



  • почитать «Краткое руководство», «Полное руководство пользователя», online-Справку к программе – там конечно же много букв, но почти все они написаны по делу.

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

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


С чего начать?




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


Нет ничего практичнее хорошей теории, или из чего состоит «распознавание»




Глядя на лаконичные названия задач, например, «Сканировать в PDF», трудно вообразить, сколько всего происходит в промежутке между «Сканировать» и «PDF» (то есть на месте одной буквы «в»). Давайте посмотрим, сколько.

Задача «преобразования документов из растрового представления в редактируемое» (не просто «распознавания») включает следующие основные этапы:

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

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

  3. Сегментация, или «анализ макета страниц», когда решается, где и что нужно и не нужно распознавать, выполняется подсистемой Анализ.

  4. Распознавание (наконец-то) – выполняет подсистема Распознаватель (сюрприз!), она порождает строки, состоящие из фрагментов (будущих слов), состоящие из символов без форматирования (пока нет даже деления на параграфы, есть только строки). Некоторое количество информации о деталях работы распознавателя уже было написано на Хабре моим коллегой. А если вам действительно интересны технические подробности, то не лишним будет и упоминание, что распознаватель в своей работе использует кроме прочего и подсистему морфологии. В этом посте можно поучиться правильно использовать упомянутую подсистему морфологии и механизм Распознавание с обучением, позволяющий лучше распознавать декоративные шрифты или символы, о которых FineReader ничего не знает (бывает и такое).

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

  6. Просмотр и редактирование изображений страниц, структуры областей, результатов распознавания – выполняет Оболочка программы и подсистема Редактор в её составе (исполняемый файл FineReader.exe – это есть оболочка). В оболочке можно увидеть и отредактировать значительную часть порождаемой при обработке информации (начиная со структуры блоков). Конечно же, для пользовательского редактирования доступна не вся информация, которой оперируют разные подсистемы – в первую очередь потому, что показ всех находимых автоматикой сущностей, их свойств и взаимосвязей вызвал бы безумное усложнение пользовательского интерфейса.

  7. Сохранение готового документа в многочисленные внешние форматы – выполняется подсистемой Экспорт (разработкой которой занимаюсь как раз я с коллегами).

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


Зачем так много модулей (подсистем)?




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

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


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


Какой результат и зачем нужен пользователю?




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

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



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

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


Создание документа в формате любого из популярных текстовых редакторов (Microsoft Word или OpenOffice/LibreOffice Writer), более-менее похожего на оригинал — для последующего редактирования и/или переиспользования значительных фрагментов в новых документах.



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



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

И зачем я это теперь знаю?




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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий