К содержимому
MoranaLabs.
Research3 мин чтения1 просмотр

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

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

0xReality

Классический OCR мертв. В MoranaLabs мы ежедневно разворачиваем industrial ИИ и high-load инференс на edge-железе заказчиков, и видим это на каждой новой площадке. Вы пишете в консоли tesseract image.jpg stdout -l rus --psm 4, пытаясь настроить OCR распознавание документов, и ждете чуда. Чуда не происходит. Тема нашего разбора — OCR в реальных условиях: плохие сканы, рукописный текст и печати, на которых ломается распознавание, если использовать устаревшие подходы.

На входе — скан ТОРГ-12. Его прогнали через дешевый потоковый сканер, предварительно помяв в бардачке Газели. Поверх итоговой суммы стоит жирная синяя печать, а рядом кладовщик от руки набросал «принято с браком». Стандартный коробочный движок выдает вместо ИНН и суммы бессмысленный набор кириллицы и спецсимволов. Извлечение данных из сканов превращается в фарс. Конвейер встал.

Где классический OCR упирается в потолок

Любой классический движок базируется на гипотезе идеального контраста. Сначала отрабатывает алгоритм Отсу — ищет порог, чтобы разделить пиксели на черный текст и белый фон. На мятой бумаге неизбежно появляются градиентные тени от сгибов. Примитивная бинаризация заливает эти тени черным. Текст исчезает навсегда.

Дальше идет поиск строк. Эвристика ищет горизонтальные линии пикселей. Синяя печать или размашистая подпись гелевой ручкой, перечеркивающая строку, фатально ломает эту логику. Машина считает пересечение текстов одним невероятно кривым символом. Базовый OCR не умеет разделять слои — для него все это одна плоская картинка.

Нейросетевое извлечение: от букв к топологии документа

Пытаться распознать весь сложный документ одним проходом — дилетантство. Реальные документы требуют каскадного пайплайна и перехода от чтения пикселей к семантическому пониманию сцены. Мы больше не читаем текст слева направо. Сначала отрабатывает сегментатор (обычно легковесные вариации YOLO для edge-устройств). Его задача — найти не буквы, а семантические блоки: здесь таблица, здесь блок реквизитов, здесь печать. Печать в этой парадигме — не визуальный шум, который нужно отфильтровать любой ценой. Это независимый класс объекта. Если синий штамп накладывается на сумму, применяются генеративные сети или алгоритмы цветовой сегрегации. Синий канал отделяется от черного тонера лазерного принтера еще до того, как кроп с суммой попадет в модуль распознавания.

Рукописный текст требует специализированных архитектур типа CRNN (Convolutional Recurrent Neural Network), натренированных на небрежной кириллице. Тяжеловесный трансформер здесь зачастую избыточен: он сожрет всю память GPU на локальном сервере, а нам нужен throughput и жесткий реалтайм без отправки данных в облако. Таблицы — отдельная категория боли. Границы ячеек часто вообще не пропечатаны. Решение в лоб тут не работает. Парсинг таких структур сейчас делается через графовые нейросети или архитектуры семейства LayoutLM, где критически важен не только сам текст, но и пространственные координаты (bounding boxes) каждого слова относительно соседей. Топология документа становится важнее букв. Только так извлеченная каша символов собирается обратно в стройный JSON с парами ключ-значение.

Постобработка и контур ручной проверки

Вытащить сырой текст — только половина задачи. Данные обязаны быть консистентными. Если нейросеть выдала ИНН контрагента с уверенностью (confidence score) 98%, но этого номера нет в вашем справочнике ERP — алгоритм лжет. Защита от таких галлюцинаций строится на жестком пост-процессинге.

  • Сверка со справочниками: Валидация критичных полей (ИНН, БИК, названия) с базами 1С через нечеткий поиск на базе расстояния Левенштейна или триграмм.
  • Математическая логика: Простая проверка правил предметной области. Сумма по строкам таблицы обязана биться с итогом по документу с учетом НДС.
  • Маршрутизация операторам: Сброс спорных случаев на человека по динамическому порогу уверенности модели.

Человек в этом контуре остается, но его роль меняется. Он больше не оператор ввода данных, он — валидатор аномалий. Если движок сомневается в распознанной цифре (confidence ниже 0.90) или математическая сверка не сошлась, на экран бухгалтера выводится не весь скан, а только конкретный вырезанный фрагмент. Одно нажатие клавиши подтверждает или корректирует символ. Система выдерживает пиковую нагрузку закрытия месяца, коммерческая тайна не покидает периметр предприятия, а данные в ERP попадают чистыми.

  • #Computer Vision
  • #Edge AI
  • #LayoutLM
  • #OCR
ПоделитьсяTelegramX
рассылка

Новые статьи — на почту

Лонгриды про ML в проде, edge и компьютерное зрение — сразу после выхода.

Канал в Telegram: morana.log

Без спама. Нажимая «Подписаться», соглашаетесь с обработкой персональных данных

бесплатный pdf-гайд

Edge AI или облако: когда тащить нейросеть на железо

Признаки, фреймворк выбора и прикидка экономии — короткий PDF-гайд на почту.

PDF · 5 страниц · без спама. Нажимая «Получить», соглашаетесь с обработкой персональных данных

Читать дальше
— заявка

Опишите задачу  ответим как инженеры. 

Оставьте имя и Telegram — остальное обсудим. Без брифов на 40 слайдов и звонков по три раза.

Отвечаем за пару часовотвечает инженер, а не отдел продажNDA по запросу

Сюда напишем — это быстрее всего

Или сразу написать в Telegram

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