Назад
1888

Введение в OCR. Часть 1

1888

Введение

📌 OCR (Optical Character Recognition) — задача распознавания текста на изображении.

OCR — одна из первых задач компьютерного зрения, критически важная во многих технологических и бизнес-процессах: от анализа сканов документов до автономного вождения. С помощью классических методов Computer Vision её научились решать уже довольно давно. Но сегодня мы поговорим главным образом о современных подходах, основанных на нейронных сетях.

Глобально можно выделить три основных этапа решения задачи: детекция текста, его распознавание, а также извлечение ключевой информации. На каждом из них мы остановимся подробнее. И, конечно, рассмотрим современные End-to-End подходы, когда все три задачи решает одна модель.

История развития OCR

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

1950-е: появление первого устройства для OCR

В начале 1950-х Дэвид Шепард и Харви Кук-младший изобрели устройство, способное преобразовывать печатные тексты в машинный язык или код. Это положило начало революции в автоматизированных методах сбора данных. В 1952 году Дэвид вместе с коллегами основали компанию Intelligent Machines Research Co. (IMR) для коммерциализации продукта.

Затем компания IBM получила лицензию на все патенты IMR. В 1959 году она представила совершенно новую систему для извлечения данных из документов и назвала её «‎машинным оптическим распознаванием символов»‎ (OCR) — это стало стандартной терминологией в отрасли.

1960-е и 1970-е годы: появление технологий ICR и MICR

В 1960-х исследовательская группа Массачусетского технологического института усовершенствовала возможности OCR для расшифровки рукописных символов. Это способствовало появлению технологии ICR (Intelligent Character Recognition).

📌ICR (Intelligent Character Recognition) — OCR сегодня: сопоставление (рукописного) текста его цифровому формату.

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

В банковской отрасли потребность в эффективной обработке чеков привела к развитию MICR (Magnetic Ink Character Recognition).

📌MICR (Magnetic Ink Character Recognition) — внедрение в чеки символов, нанесённых магнитными чернилами, для их быстрого распознавания и обработки автоматизированными системами.

Это нововведение упростило финансовые операции и продемонстрировало практическое применение OCR, выходящее за рамки распознавания обычного текста.

1990-е годы: распространение коммерческого программного обеспечения для OCR

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

2005 год: выход Tesseract OCR в качестве open-source

История этой программы начинается в середине 80-х годов, когда её начали разрабатывать инженеры Hewlett-Packard. К 1994 году основное ядро было готово, а к 1998 году Tesseract был портирован на Windows и переписан на C++. Спустя 10 лет, в 2005 году, после незначительных доработок программу выпустили в open-source; её версии выходят до сих пор.

Tesseract существенно превосходил свои open-source аналоги по качеству распознавания текстов на момент выхода. Даже сейчас, в 2024 году, можно встретить применение его обновлённых версий в индустрии.

2010-е годы: применение подходов deep learning

Модели на базе CNN и RNN произвели революцию в мире OCR в середине 2010-х годов. Они вытеснили классические методы и успешно справились с их недостатками.

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

OCR в России

Первые программные продукты на базе OCR появились в России в 1993 году. Их развитие было обусловлено противостоянием разработчиков: с одной стороны, группой выпускников МФТИ, а с другой — командой советских ученых. Здесь можно прочитать, чем же закончилось это противостояние.

Можно выделить две наиболее популярные российские компании, поставщиков лучших OCR-движков — Smart Engine и DBrain.

Виды задач

Итак, OCR применяют для решения следующих задач:

  • распознавание рукописного текста;
  • распознавание печатного текста на сканах документов, книг, чеков и др.;
  • распознавание текстов в естественной среде (например, дорожных знаков).

Распознавание рукописного текста

Одна из самых известных задач по распознаванию рукописных символов — это MNIST (распознавание рукописных цифр), но на текущий момент это скорее учебная задача по классификации и с точки зрения OCR интересна только в историческом контексте.

Помимо распознавания рукописных цифр есть множество нетривиальных задач, связанных с распознаванием рукописных текстов, в том числе и рукописей на древних языках. Популярны и такие соревнования по машинному обучению. Например, в рамках международной конференции по OCR, ICDAR, на площадке kaggle или во время AI Journey 2020 проходили турниры по распознаванию рукописей Петра 1 — «Digital Петр».

Рисунок 1. Пример датасета на соревновании «Digital Петр» в рамках AI Journey 2020 [источник]

Распознавание печатного текста на сканах

Это, наверное, одна из самых востребованных в области OCR задач. Здесь есть множество кейсов: оцифровка книг, различных документов, чеков, билетов и др. Мы, скорее всего, не увидели бы тот невероятный прогресс современных больших языковых моделей (LLM), если бы люди не научились качественно оцифровывать книги, научные статьи, литературные эссе. Любой языковой модели при столкновении с текстом на изображении необходим этап OCR, который сейчас заложен в современные LLM — ChatGPT, Gemini и др.

Рисунок 2. Пример работы модели по распознаванию чеков

Распознавание текстов в естественной среде

Такой вид задач в англоязычной литературе называется Scene Text Recognition (STR). Одно из наиболее очевидных применений STR моделей — автономное вождение. Автопилоту важно не только классифицировать вид дорожного знака или указателя, но и распознавать текстовую информацию на нём. В зависимости от страны на дорожном знаке могут присутствовать слова на различных языках — все их нужно понимать.

Рисунок 3. Примеры дорожных указателей и знаков в арабских странах [источник]

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

Рисунок 4. Пример датасета STR из COCO-text dataset

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

Ключевые датасеты

Как и в любой другой задаче Computer Vision, в OCR есть свои датасеты. Давайте поговорим о них подробнее.

  • ICDAR — один из самых популярных датасетов для различных видов OCR задач (например, ICRDAR 2015, ICDAR 2021). ICDAR — конференция, посвящённая проблемам анализа документов и их распознавания. Каждый год перед исследователями ставится ряд передовых задач, например, распознавание мультиязычных документов или поиск ответов на вопросы по изображению документа (Question Answering).
Рисунок 5. Пример данных из ICDAR 2013 Robust Reading Competition
  • TextOCR — датасет с изображениями из естественной среды высокого качества, где есть текст произвольной формы. Довольно большой по размерам, поэтому активно используется в обучении моделей.
Рисунок 6. Пример данных с разметкой из TextOCR. Стоит отметить: форма текста очень разнообразная
  • SynthText — датасет с синтетическими данными, где текст помещается на различных объектах реального мира. Довольно большой по размерам, поэтому также часто используется для обучения моделей.
Рисунок 7. Пример изображения с разметкой из SynthText
  • CORD (Consolidated Receipt Dataset) — датасет с чеками. Помимо боксов или текста содержит семантическую информацию о чеке.
Рисунок 8. Пример изображения из CORD с форматом json-разметки
  • MNIST — датасет с рукописными цифрами, одна из первых задач с применением ML. Сегодня актуальна только в образовательных целях.
Рисунок 9. Пример данных из MNIST
  • IAM (IAM Handwriting) — датасет с рукописным текстом на английском.
Рисунок 10. Пример рукописной формы из IAM Handwriting
  • FUNSD (Form Understanding in Noisy Scanned Documents) — датасет со сканами документов в плохом качестве. Помимо информации для OCR он содержит семантические сведения о сущностях в документе и их взаимной связи.
Рисунок 11. Пример документа с разметкой из FUNSD
  • RusTitW (Russian Language Visual Text Recognition) — огромный (135 GB!) датасет для распознавания текста на русском языке. Содержит как реальные, так и синтетические (по типу SynthText) данные.
Рисунок 12. Пример данных с разметкой из RusTitW

В таблице представлена основная статистика по датасетам, которые мы обсудили выше:

Название датасетаТип датасетаЯзыкКоличество изображенийКоличество словОписание
ICDAR 2015БенчмаркАнглийский1 000 (train)4 500 (train)Один из основных бенчмарков для задач детекции и распознавания
TextOCRДатасет для обученияАнглийский28 134903 069Реальные сцены, текст произвольной формы
SynthTextДатасет для обученияАнглийский858 7507 266 866Различные изображения из реального мира с наложенным на них синтетическим текстом
CORDДатасет для обученияАнглийский11 000unknownИндонезийские чеки
IAMДатасет для обученияАнглийский13 353115 320Рукописные формы
FUNSDБенчмаркАнглийский19931 485Документы / заполненные формы
RusTitWДатасет для обученияРусскийunknownunknownРеальные данные + синтетика, как в SynthText

Ограничения, или проблемы в домене

Распознавание рукописных текстов:

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

Распознавание сканов:

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

Распознавание текстов в реальном мире:

  • искривлённый текст на неровных поверхностях;
  • текст с различной ориентацией (может быть повёрнут в разные углы);
  • текст с перспективными искажениями;
  • частично скрытый текст;
  • текст без фокуса;
  • шумы, блики, удалённость текста.
Рисунок 13. Примеры трудных случаев распознавания текста

Основные подзадачи OCR

Как мы отмечали ранее, OCR состоит из нескольких подзадач. То есть сначала мы находим текст на изображении (text detection), затем его распознаём (text recognition), а иногда из этого даже извлекаем информацию, например, находим сумму в чеке, серию или номер в документе.

Text Detection

📌Text Detection — поиск текста на изображении.

Проблематика подзадачи:

  • Текст какой формы (прямоугольной, произвольной) мы хотим распознавать? Текст прямоугольной формы проще находить с помощью детекции, а произвольной — через сегментацию.
  • Как объединять полученные слова в предложения, если документ наклонён?

Text Recognition

📌Text Recognition — распознавание текста на кропах после Text Detection.

Проблематика подзадачи:

  • Какой текст мы хотим распознавать: рукописный или печатный? От этого зависит выбор датасетов, формат синтетики для обучения и аугментаций.

Извлечение ключевой информации

📌Извлечение ключевой информации — пост-обработка получившегося текста. Это может быть как поиск целевых сущностей, так и работа со всем текстом (ответы на вопросы по тексту с помощью LLM).

Проблематика подзадачи:

  • именованные сущности — нам нужен конкретный текст на изображении, например, при поиске серии или номера в таком структурированном документе, как паспорт;
  • работа с текстом — мы хотим автоматически получать ответы на определённые вопросы по документам, например, ответ на вопрос: «Как выглядит структура управленческих органов в компании?» по уставу ООН.

Популярные модели OCR

Text Detection

  • CRAFT — популярная модель детекции текста на основе регрессии. Хорошо работает на текстах регулярной формы и имеет простой препроцессинг, но испытывает проблемы с текстами нестандартной формы.
  • DB — модель детекции текста на основе сегментации. Отлично справляется с текстами любой формы по сравнению с CRAFT, но имеет сложный постпроцессинг.

Text Recognition

  • CRNN — модель для распознавания текста, в которой CNN-модель формирует по изображению карту признаков, а RNN-модель по ней предсказывает символы.
  • Seq2seq — модель для распознавания текста, использующая seq2seq подход вместо RNN после CNN части.

Извлечение ключевой информации

  • LayoutLM [2019 год] — языковая модель, которая извлекает контекст текста (layout) для повышения качества распознавания. Модель была получена путём добавления к BERT визуальной информации о контексте и последующего предобучения на специальных задачах, связанных с пониманием документов.
  • Donut, или DOCumenUnderstanding Transformer [2022 год, от авторов CRAFT] — visual transformer, который умеет делать end-to-end распознавание документов.

Фреймворки OCR

Под фреймворками OCR обычно понимают open-source репозиторий, позволяющий решать все основные задачи OCR: детекцию, распознавание, структурирование текста.

Tesseract

Его современные версии (версия 4 и далее) используют LSTM (работа с последовательностью символов), что значительно улучшает качество распознавания текста, особенно для сложных и размытых изображений. Поддерживается и версия 3, где применяется посимвольное распознавание.

Фреймворк имеет более 100 языков и позволяет обучать модели для распознавания новых языков и шрифтов.

Tesseract умеет работать со многими форматами как изображений, так и документов. Например, со сложно структурированным документом, где он выделяет и распознаёт определённые области на документе. Также есть свой API для интеграции в собственные приложения.

К недостаткам можно отнести следующее:

  • чувствительность к качеству изображения;
  • ограниченная поддержка сложно структурированных документов;
  • медленная работа с большими объёмами данных или очень детализированными изображениями.

EasyOCR

Ещё один популярный и простой для запуска фреймворк — EasyOCR от Jaided AI. Исходный код написан на Python, поэтому мы можем быстро в нём разобраться, интегрировать в своё приложение или запустить обучение на кастомном датасете.

EasyOCR поддерживает более 80 языков, включая такие сложные и редкие, как китайский, японский, корейский, арабский и другие. Также позволяет распознавать текст на изображениях различных форматов. А ещё поддерживает работу с изображениями, где есть текст на нескольких языках.

Фреймворк в качестве детектора текста использует DBNet или CRAFT, а в качестве модели распознавания текста — CRNN. Есть возможность обучения CRNN на собственных данных с конфигурацией как CNN энкодера, так и LSTM части модели. Также EsayOCR предоставляет множество предобученных моделей на разных языках, которые неплохо справляются с типовыми задачами OCR.

Хотя EasyOCR более гибкий инструмент по сравнению с Tesseract, с помощью которого можно получить качество распознавания получше, у него есть свои ограничения, связанные в первую очередь с моделями. CRNN, DB, CRAFT хороши, но по современным меркам уже устарели: проигрывают по качеству моделям на базе трансформеров.

DocTR

DocTr был создан командой Mindee — французская компания, специализирующаяся на решениях для обработки документов. Фреймворк написан на Python. Одна из его особенностей — все модели реализованы как в TensorFlow версии, так и на PyTorch.

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

В качестве детекторов у DoctTr имеются DBNet и LinkNet, но есть и более современный FAST, который немного выше в лидерборде на популярных бенчмарках (Total-Text) по сравнению с теми же CRAFT и DBNet (но не всегда).

В то же время у этого фреймворка богаче выбор моделей распознавания текста, чем у EasyOCR. Помимо классического CRNN он предлагает три трансформерные модели: MASTER, VitSTR и PARSeq. О них мы также расскажем позже, но сейчас хотелось бы отметить: трансформерные модели относятся к так называемым контекстно-зависимым моделям, которые более устойчивы к пропущенным или частично не пропечатанным символам, а значит, на основных бенчмарках существенно превосходят CRNN.

Недостатки DocTr:

  • ограниченная поддержка языков;
  • трудности распознавания рукописного текста (но это характерно для всех фреймворков, нужно собственное решение);
  • требование производительности трансформерных моделей (следовательно, без GPU не обойтись);
  • перегруженный код, в котором иногда сложно разбираться, а разбираться приходится, ведь необходимо адаптировать его под своё приложение и задачи.

Все перечисленные выше фреймворки используют множество ML-моделей для поэтапного решения задач OCR: детекции, распознавания, структурирования текста. С появлением современных мультимодальных трансформерных моделей появилась возможность решать их одной моделью, то есть End-to-End. Давайте о ней сейчас и поговорим подробнее.

Donut

Donut (Document Understanding Transformer) был разработан исследовательской группой при NAVER AI Lab, крупной корейской технологической компании.

Фреймворк способен не только выполнять задачи распознавания текста и понимания структуры документа, но и решать более гибкие задачи, свойственные большим языковым моделям: например, суммаризация текста, ответы на вопросы по документу.

Donut интегрирует распознавание текста и его понимание в один процесс, то есть делает это End-to-End. В основе лежит мультимодальная архитектура полноценного энкодер-декодер трансформера. Обучается он, как и все большие языковые модели, в два этапа. Первый этап — предобучение, когда модель использует пары «картинка — текст» и учится продолжать текст на выходе. Второй этап — инструктивное обучение, где модель по определённому запросу учится решать конкретные задачи: простой парсинг документа, извлечение ключевой информации, ответы на вопросы.

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

Рисунок 14. Пример работы Donut

Возможно, на этом месте у вас возник вопрос: «А почему же в таком случае не использовать ChatGPT или подобные большие языковые модели с опцией мультимодальности для распознавания текста?». Действительно, сейчас достаточно сфотографировать какой-либо документ и отправить его Gemini или ChatGPT с просьбой распознать или ответить на вопрос, тогда модели справятся с поставленной задачей. Это будет хорошим решением, если информация не является чувствительной или конфиденциальной. В противном случае необходимы оффлайн-решения, которые будут запускаться на внутренних серверах и дообучаться на закрытой информации. Поэтому open-source, рассмотренные выше, будут всегда актуальны!

Заключение

В этом посте мы кратко познакомились с OCR: его историей возникновения, основными задачами и подзадачами, методами их решения и фреймворками.

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

В следующих сериях мы планируем создать цикл статей и раскрыть все ключевые темы OCR, чтобы не упустить тренды и с помощью такого гайда погрузиться в мир оптического распознавания текста. Stay tuned! 😉

Старт 13 мая
Computer Vision Rocket

Приходите на наш курс CV Rocket, чтобы погрузиться в продвинутый Computer Vision: от сложностей и корнер-кейсов в «обычных» задачах до мультимодальных моделей и дизайна CV-систем!

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!