Одной vision-модели недостаточно для надёжного разбора чеков
Симптом
Распознавание чеков через vision-модель работало нестабильно. Модель путала цены, искажала названия товаров, ошибалась в итоговой сумме и особенно часто - в количестве или весе.
Контекст
Чек передавался модели с ожиданием, что она сразу вернёт структурированные поля. Несколько дней использования на чеках из магазинов и кафе показали, что правдоподобный ответ не равен корректно извлечённым данным.
Корневая причина
Одного шага vision-извлечения недостаточно для задачи, где итоговые значения должны быть согласованы между собой. Цена, количество, вес, сумма строки и итоговый total требуют проверки, а не только чтения текста с изображения.
Ошибочное предположение
Я предполагал, что достаточно отправить изображение чека в vision-модель и получить готовый структурированный объект. Это смешивает распознавание текста, интерпретацию полей и проверку арифметических инвариантов в один вероятностный шаг.
Обнаружение
Проблема проявилась после нескольких дней работы: ошибки повторялись на ценах, названиях и суммах, а строки с количеством или весом были отдельным классом сбоев.
Исправление
Вместо прямого преобразования изображения в итоговый объект был определён многоэтапный pipeline:
- извлечение текста и координат с изображения;
- нормализация строк и чисел;
- выделение цены, количества и веса;
- пересчёт сумм и проверка согласованности;
- сохранение исходного фрагмента для ручной проверки сомнительных полей.
В исходной заметке завершённая реализация такого pipeline не зафиксирована, поэтому этот раздел фиксирует направление работы, а не утверждает, что pipeline уже завершён.
Проверка
Нужно собрать набор чеков с разными форматами, количеством, весом, скидками и переносами строк. Для каждого результата следует проверять не только текстовые поля, но и арифметику: сумма строк должна согласовываться с итогом, а ошибки должны попадать в ручную проверку.
Автоматический тестовый набор в исходной заметке не зафиксирован.
Общий вывод
Vision-модель - это компонент извлечения, а не готовая система учёта. Если данные должны быть точными, вероятностный результат нужно окружить нормализацией, детерминированными проверками и понятным путём ручного исправления.