Выбрать 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 ₽. Точную цену называем после обследования.