Выбрать OCR для русского языка можно только замером: взять 100–200 ваших реальных страниц, прогнать через два-три кандидата и сравнить по символам и по полям, которые нужны вам. В заявленную точность поставщика верить нельзя: она получена на чужих чистых документах, а у вас фотографии под углом, штампы и коды из букв и цифр.

Русский язык добавляет своё: кириллица и латиница с одинаковыми по виду буквами, потерянная буква «ё», переносы, числа с пробелами и запятой. Всё это решается не выбором «самого сильного» движка, а сочетанием обработки изображения, движка и проверок после него. Как мы строим такие системы, описано на странице «OCR-системы на заказ», здесь сам выбор.

Коротко. Сравнивайте движки на своих страницах, а не по рекламной точности. Считайте ошибки по символам и по нужным полям, после нормализации. Для русского отдельно проверяйте путаницу кириллицы с латиницей, «ё», коды из букв и цифр и числа. Если движок ошибается системно, чаще помогает обработка изображения и проверки, чем смена движка.

Что в русском тексте ломает распознавание

Часть проблем одинакова для всех языков: плохой скан, перекос, блики. Но у русских документов есть свои, и их стоит включить в тестовую выборку специально.

ПроблемаПримерПочему такЧто помогает
Одинаковые по виду буквы разных алфавитовЛатинская «C» вместо кириллической «С» в артикуле, «О» и нуль, «В» и «B»Начертание совпадает, движок выбирает по контексту, а в кодах контекста нетПравила для полей с известным алфавитом, проверка по справочнику, сравнение после приведения к одному алфавиту
Потерянная «ё»«Все» вместо «всё», «Королев» вместо «Королёв»В документах «ё» часто печатают как «е», а точки над ней легко теряются на сканеРешаем при сравнении: либо приводим обе стороны к «е», либо требуем «ё» только там, где важно, например в фамилиях
Переносы и разрывы строк«обору-дование» в двух строкахДвижок читает строки по отдельности и не склеивает словоСклейка на этапе после распознавания и словарь для проверки
Числа, суммы, даты250,50 и 250.50; 05.11.26 и 5 ноябряПробел как разделитель разрядов, запятая как десятичный знак, разные формы датыНормализация в одну форму и проверка арифметикой: сумма строк равна итогу
Дефис, тире, минусЗнак между числами принят за дефис, а минус стёртПохожие символы разной длиныСравнение с учётом того, что именно значит символ в поле
Склонения и фамилииФамилия в родительном падеже в договоре и в именительном в карточкеСловарь не знает редкую фамилию и «исправляет» на похожее словоДля имён собственных не применять исправление по словарю без проверки
Смешанные строкиНазвание на русском и артикул латиницей в одной строкеДвижок настроен на один набор языковВключить оба набора и проверять поля с кодами отдельно

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

Из каких движков выбирать

Движки делятся не по названию, а по тому, как работают, и отличаются по тому, где ломаются.

Тип движкаЧто делаетСильные стороныГде ломается
Универсальный движок для печатных страницЧитает строки текста по готовым данным языка, ждёт ровное чистое изображение; пример — TesseractПредсказуем, обычно работает на обычном сервере, хорошо читает чистую печатьФотографии, шумный фон, мелкий шрифт, сложные таблицы: нужна заметная обработка изображения
Движок с обнаружением текста на изображенииСначала находит, где на картинке текст, потом распознаёт найденное нейросетью; пример — PaddleOCRУстойчивее к шуму, наклону и разным шрифтам, лучше справляется с фотографиямиНужна модель под нужный алфавит, качество зависит от её обучения, на процессоре обычно медленнее
Движок с анализом разметкиКроме текста находит таблицы, колонки, заголовки и штампыВыдаёт структуру: где таблица, где полеСложнее настроить, на нестандартной вёрстке структура «плывёт»
Мультимодальная языковая модельЧитает страницу по картинке и сразу выдаёт поляГибкая на нестандартных формах, не требует шаблоновМожет выдумать значение, которого нет в документе; нужны мощные серверы и проверка результата

Универсально лучшего нет. Для чистых печатных страниц часто хватает универсального движка с хорошей обработкой изображения. Для фотографий и шумных сканов обычно выигрывает движок с обнаружением текста. Мультимодальную модель берут на сложные формы, помня про выдуманные значения, как в статье «OCR или LLM для распознавания документов». Результат сравнивают на ваших страницах.

Какие требования записать до выбора

Часть критериев не имеет отношения к точности, но решает, подойдёт ли движок вам вообще. Запишите их до сравнения, иначе победит тот, кто красивее показал демонстрацию.

  • Где работает. Если документы содержат данные ограниченного доступа, облачный распознаватель чаще не подходит по требованиям заказчика. Нужен движок, который ставится на ваш сервер.
  • Что отдаёт. Просто текст, текст с координатами слов, поисковый PDF или структуру с таблицами. Если нужно подсвечивать найденное значение на странице, без координат не обойтись.
  • Уверенность по словам или символам. Без неё нельзя отправлять сомнительное на проверку человеку.
  • Языки. Русский плюс латиница, а если встречаются другие алфавиты, они перечислены заранее.
  • Обработка изображения. Поворот, выравнивание, удаление шума. Встроена она в движок или делается отдельно, это ваша работа или чужая.
  • Возможность дообучить. Если у вас свой шрифт или выцветшая печать, понадобится обучение на ваших образцах. Не каждый движок и не каждая лицензия это позволяют.
  • Лицензия. Открытая, коммерческая, ограничения по использованию в продукте для клиентов. Условия читает юрист заказчика, мы показываем технические последствия.
  • Нагрузка. Сколько страниц в сутки, есть ли пики, нужна ли отдача в реальном времени. Для разового архива и для потока из почты решения разные.

Как собрать выборку для сравнения

Выборка важнее, чем выбор метрик. Если в ней только хорошие сканы, все движки покажут хороший результат, а на потоке проиграют по-разному.

  • Берите страницы так, как они приходят. Фотографии с телефона, сканы из разных устройств, документы за разные годы, а не отобранные образцы.
  • Делите на группы. Чистая печать, фото, мелкий шрифт, таблицы, штампы поверх текста, рукописные вставки. Среднее по всем скрывает слабое место.
  • Для каждой группы — несколько десятков страниц. Точное число зависит от разброса, правила выбора описаны в статье «Как измерить точность распознавания документов».
  • Эталон делает человек, который знает правильный ответ. Это может быть бухгалтер, кладовщик, юрист. Эталон по нескольким страницам сверяют двое.
  • Данные ограниченного доступа обезличиваются. Фамилии и реквизиты заменяются до передачи, если выборка уходит за пределы контура.

Как сравнивать: нормализация и метрики

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

Сначала нормализация. Приводим эталон и результат к одной форме: пробелы, регистр, кавычки, тире. Решаем про «ё»: заменяем на «е» с обеих сторон либо считаем разной буквой. Решаем про кириллицу и латиницу: в полях, где алфавит известен, приводим к нему. Без этого два движка с одинаковым качеством получат разные оценки только потому, что один ставит неразрывный пробел, а другой обычный.

Потом две метрики. Первая — доля неверных символов (в англоязычных источниках CER): считается по расстоянию между текстами и подходит для оценки качества чтения и для поиска по тексту. Вторая — доля полей, прочитанных точно: номер договора, сумма, дата, артикул. Для бизнеса важна вторая: одна неверная цифра в сумме перечёркивает сотни верных букв.

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

Как читать результаты и принимать решение

Вопрос после замера — не «какой лучше», а «что исправлять». Типовые картины и ответы:

Что видим в результатахВероятная причинаЧто делаем
Ошибки сосредоточены на фотографияхПерекос, тени, мелкое разрешениеДобавляем выравнивание и очистку изображения; смена движка вторична
Путаница букв только в артикулах и номерахНет контекста для алфавитаПравила для поля, проверка по справочнику, а не смена движка
Хорошо читается текст, но таблицы разваливаютсяДвижок не определяет структуруДвижок с анализом разметки или отдельный разбор таблиц
Ошибки по всем группам, в том числе на чистой печатиНе подходит модель или шрифтПробуем другой тип движка или дообучение на ваших образцах
Хорошая точность символов, плохая по полямПоле находится неверно, а не читается неверноНастраиваем поиск поля, а не распознавание
Результат хорош, но уверенность не отражает ошибкиПорог настроен вслепуюСтроим кривую «доля автоматизации против ошибок» и выбираем порог по цене ошибки

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

Вопросы поставщику и признаки слабого предложения

Если OCR предлагает подрядчик, а не ставится как готовая программа, эти вопросы показывают, насколько он понимает вашу задачу:

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

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

Что делаем мы и с чего начать

Начинаем с обследования: 200 000 ₽ и 2–3 недели за один-два процесса, 350 000 ₽ и 3–4 недели, если документы приходят из нескольких источников и уходят в несколько систем. Собираем выборку, прогоняем кандидатов, считаем по группам и по полям и называем набор, который подходит вашим документам. Стоимость вычитается из первого этапа, если продолжаете с нами; документом можно пользоваться и без нас.

Дальше лёгкий пилот на вашей выборке (150 000–400 000 ₽, 2–8 недель), тяжёлый пилот с интеграцией и очередью проверки и вывод в эксплуатацию. Остановиться можно после любой ступени. Мы не делаем программ для работы на одном рабочем месте и не обещаем стопроцентной точности: человек остаётся в контуре. Исходники лежат в вашем репозитории с первого коммита. Все цены — на странице «Тарифы», описание услуги — на странице «OCR-системы на заказ».

Частые вопросы

Какой OCR лучше всего читает русский язык?

Универсально лучшего нет: результат зависит от качества страниц, шрифта и полей, которые нужны. Для чистой печати часто хватает универсального движка, для фотографий лучше движок с обнаружением текста. Выбор делают замером на 100–200 ваших страницах.

Сколько страниц нужно для сравнения движков?

Для первого сравнения достаточно 100–200 страниц, распределённых по группам: чистая печать, фото, мелкий шрифт, таблицы, штампы. Для приёмки системы выборка больше и считается по группам, правила описаны в отдельной статье.

Почему OCR путает русские и латинские буквы?

Некоторые буквы двух алфавитов выглядят одинаково, а контекста в кодах и артикулах нет. Помогают правила для полей с известным алфавитом, проверка по справочнику и сравнение после приведения к одному алфавиту.

Можно ли использовать облачный сервис распознавания?

Для документов без ограничений доступа можно. Для данных ограниченного доступа облачные сервисы чаще не подходят по требованиям заказчика, и тогда движок ставят на ваш сервер. Решение зависит от ваших требований, а не от качества движка.

Нужен ли мощный сервер или видеокарта?

Универсальные движки печатных страниц обычно работают на процессоре. Движки с нейросетями на процессоре медленнее, а при большом потоке удобнее видеокарта. Требования считаем на обследовании по вашему потоку страниц, цифр заранее не называем.

Можно ли распознавать рукописный текст?

Печатные страницы и рукописные вставки — разные задачи. Рукопись читается заметно хуже и требует проверки человеком в любом случае. Её выделяют в отдельную группу выборки и оценивают отдельно.

Чем OCR отличается от обработки документов?

OCR превращает картинку в текст. Обработка документов (IDP) вдобавок делит пачки, определяет тип, извлекает поля и проверяет их. Если нужен только текст или поиск, хватит OCR; если нужны поля в учёте, нужен конвейер.

Сколько стоит подбор и внедрение OCR?

Обследование стоит 200 000 ₽ (350 000 ₽ при нескольких системах), лёгкий пилот — 150 000–400 000 ₽, тяжёлый — 400 000–1 200 000 ₽. Точную цену называем после обследования.