Задача
Бэк-офис банка обрабатывает поток бумажных сканов вручную: договоры, платёжки, анкеты. Качество разнородное — перекосы, тени от сгибов, печати поверх текста, рукописные пометки на полях. Шаблонов десятки, единого формата нет. Цена ошибки в реквизитах высокая: неверный счёт или сумма уходят дальше по конвейеру и всплывают уже как инцидент.
Требование заказчика — обработка on-prem: персональные данные не покидают контур, облачные OCR-сервисы исключены по закону и политике ИБ.
Подход
Собрали пайплайн в четыре ступени: восстановление геометрии скана (детекция краёв листа, исправление перспективы и поворота), детекция структуры и таблиц, OCR, извлечение полей. Печати и рукописный шум давили отдельной маской до распознавания, чтобы они не загрязняли текстовый слой.
Ключевое — валидация по справочникам: БИК, контрольные разряды счёта, формат даты, словарь контрагентов. Поле с низким confidence не отбрасывается молча, а уходит в ручную доводку оператору. Так мы сместили ошибки в сторону предсказуемого ревью вместо тихого брака в реквизитах. Дисбаланс шаблонов закрыли дообучением на редких формах, по которым модель путалась.
Стек
OpenCV · ONNX Runtime · PaddleOCR · table detection (DETR) · rule-based валидация
Результат
- 97.3% — точность извлечения ключевых полей: реквизиты, суммы, даты.
- 71% документов проходят полностью без ручной доводки оператором.
- 34 страницы/мин на одном узле в контуре заказчика, без выноса данных в облако.
- Ошибки смещены в ревью полей с низким confidence, а не в тихий брак реквизитов.