Одной vision-модели недостаточно для надёжного разбора чеков

Симптом

Распознавание чеков через vision-модель работало нестабильно. Модель путала цены, искажала названия товаров, ошибалась в итоговой сумме и особенно часто - в количестве или весе.

Контекст

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

Корневая причина

Одного шага vision-извлечения недостаточно для задачи, где итоговые значения должны быть согласованы между собой. Цена, количество, вес, сумма строки и итоговый total требуют проверки, а не только чтения текста с изображения.

Ошибочное предположение

Я предполагал, что достаточно отправить изображение чека в vision-модель и получить готовый структурированный объект. Это смешивает распознавание текста, интерпретацию полей и проверку арифметических инвариантов в один вероятностный шаг.

Обнаружение

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

Исправление

Вместо прямого преобразования изображения в итоговый объект был определён многоэтапный pipeline:

В исходной заметке завершённая реализация такого pipeline не зафиксирована, поэтому этот раздел фиксирует направление работы, а не утверждает, что pipeline уже завершён.

Проверка

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

Автоматический тестовый набор в исходной заметке не зафиксирован.

Общий вывод

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