Введение в OCR. Часть 1
- Введение
- История развития OCR
- 1950-е: появление первого устройства для OCR
- 1960-е и 1970-е годы: появление технологий ICR и MICR
- 1990-е годы: распространение коммерческого программного обеспечения для OCR
- 2005 год: выход Tesseract OCR в качестве open-source
- 2010-е годы: применение подходов deep learning
- OCR в России
- Виды задач
- Распознавание рукописного текста
- Распознавание печатного текста на сканах
- Распознавание текстов в естественной среде
- Ключевые датасеты
- Ограничения, или проблемы в домене
- Основные подзадачи OCR
- Популярные модели OCR
- Фреймворки OCR
- Заключение
Введение
📌 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 Петр».
Распознавание печатного текста на сканах
Это, наверное, одна из самых востребованных в области OCR задач. Здесь есть множество кейсов: оцифровка книг, различных документов, чеков, билетов и др. Мы, скорее всего, не увидели бы тот невероятный прогресс современных больших языковых моделей (LLM), если бы люди не научились качественно оцифровывать книги, научные статьи, литературные эссе. Любой языковой модели при столкновении с текстом на изображении необходим этап OCR, который сейчас заложен в современные LLM — ChatGPT, Gemini и др.
Распознавание текстов в естественной среде
Такой вид задач в англоязычной литературе называется Scene Text Recognition (STR). Одно из наиболее очевидных применений STR моделей — автономное вождение. Автопилоту важно не только классифицировать вид дорожного знака или указателя, но и распознавать текстовую информацию на нём. В зависимости от страны на дорожном знаке могут присутствовать слова на различных языках — все их нужно понимать.
Помимо автономного вождения есть много кейсов (например, распознавание номерных знаков, ценников в магазинах, уличных баннеров, капчи), когда вам нужно распознавать текст на реальной фотографии — это тоже относится к задачам STR.
Мы видим, что OCR применятся в самых различных направлениях. И вы, возможно, уже обратили внимание на те сложности, с которыми могут столкнуться разработчики её системы при работе с данными. Более подробно о них мы и поговорим в разделе ниже.
Ключевые датасеты
Как и в любой другой задаче Computer Vision, в OCR есть свои датасеты. Давайте поговорим о них подробнее.
- ICDAR — один из самых популярных датасетов для различных видов OCR задач (например, ICRDAR 2015, ICDAR 2021). ICDAR — конференция, посвящённая проблемам анализа документов и их распознавания. Каждый год перед исследователями ставится ряд передовых задач, например, распознавание мультиязычных документов или поиск ответов на вопросы по изображению документа (Question Answering).
- TextOCR — датасет с изображениями из естественной среды высокого качества, где есть текст произвольной формы. Довольно большой по размерам, поэтому активно используется в обучении моделей.
- SynthText — датасет с синтетическими данными, где текст помещается на различных объектах реального мира. Довольно большой по размерам, поэтому также часто используется для обучения моделей.
- CORD (Consolidated Receipt Dataset) — датасет с чеками. Помимо боксов или текста содержит семантическую информацию о чеке.
- MNIST — датасет с рукописными цифрами, одна из первых задач с применением ML. Сегодня актуальна только в образовательных целях.
- IAM (IAM Handwriting) — датасет с рукописным текстом на английском.
- FUNSD (Form Understanding in Noisy Scanned Documents) — датасет со сканами документов в плохом качестве. Помимо информации для OCR он содержит семантические сведения о сущностях в документе и их взаимной связи.
- RusTitW (Russian Language Visual Text Recognition) — огромный (135 GB!) датасет для распознавания текста на русском языке. Содержит как реальные, так и синтетические (по типу SynthText) данные.
В таблице представлена основная статистика по датасетам, которые мы обсудили выше:
Название датасета | Тип датасета | Язык | Количество изображений | Количество слов | Описание |
---|---|---|---|---|---|
ICDAR 2015 | Бенчмарк | Английский | 1 000 (train) | 4 500 (train) | Один из основных бенчмарков для задач детекции и распознавания |
TextOCR | Датасет для обучения | Английский | 28 134 | 903 069 | Реальные сцены, текст произвольной формы |
SynthText | Датасет для обучения | Английский | 858 750 | 7 266 866 | Различные изображения из реального мира с наложенным на них синтетическим текстом |
CORD | Датасет для обучения | Английский | 11 000 | unknown | Индонезийские чеки |
IAM | Датасет для обучения | Английский | 13 353 | 115 320 | Рукописные формы |
FUNSD | Бенчмарк | Английский | 199 | 31 485 | Документы / заполненные формы |
RusTitW | Датасет для обучения | Русский | unknown | unknown | Реальные данные + синтетика, как в SynthText |
Ограничения, или проблемы в домене
Распознавание рукописных текстов:
- индивидуальность почерка, сколько людей — столько видов;
- трудность отделения конца одной буквы от начала следующей в одном слове;
- работа с курсивом — задача, с которой не справляется модель посимвольного распознавания, здесь важно учитывать контекст;
- генерация синтетики — более сложная задача в сравнении с печатным текстом, необходимо использовать генеративные нейронные сети.
Распознавание сканов:
- позиция текста: он не всегда занимает всё изображение, может находиться в случайном месте, а ещё быть повернутым и искажённым;
- разнообразие шрифтов, среди которых есть и редкие шрифты;
- разнообразие алфавитов разных языков, а также цифр, специальных символов;
- искажение текста при сканировании: засвет, плохо напечатанный или частично стёртый текст.
Распознавание текстов в реальном мире:
- искривлённый текст на неровных поверхностях;
- текст с различной ориентацией (может быть повёрнут в разные углы);
- текст с перспективными искажениями;
- частично скрытый текст;
- текст без фокуса;
- шумы, блики, удалённость текста.
Основные подзадачи 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, или DOCument Understanding 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 и решение всех задач, связанных с распознаванием документов одной моделью, стоят этих ресурсов.
Возможно, на этом месте у вас возник вопрос: «А почему же в таком случае не использовать ChatGPT или подобные большие языковые модели с опцией мультимодальности для распознавания текста?». Действительно, сейчас достаточно сфотографировать какой-либо документ и отправить его Gemini или ChatGPT с просьбой распознать или ответить на вопрос, тогда модели справятся с поставленной задачей. Это будет хорошим решением, если информация не является чувствительной или конфиденциальной. В противном случае необходимы оффлайн-решения, которые будут запускаться на внутренних серверах и дообучаться на закрытой информации. Поэтому open-source, рассмотренные выше, будут всегда актуальны!
Заключение
В этом посте мы кратко познакомились с OCR: его историей возникновения, основными задачами и подзадачами, методами их решения и фреймворками.
Сегодня OCR переживает существенные изменения — появляется всё больше решений на базе глубоких нейронных сетей, которые либо улучшают классический пайплайн OCR (детекция, распознавание, извлечение информации), либо полностью заменяют все этапы распознавания изображения одним (OCR-free сетью, предназначенной для более глубокого понимания документов, текстов и изображений в целом).
В следующих сериях мы планируем создать цикл статей и раскрыть все ключевые темы OCR, чтобы не упустить тренды и с помощью такого гайда погрузиться в мир оптического распознавания текста. Stay tuned! 😉