Как разделить чек по фото с помощью ИИ

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

    Разделить чек по позициям честнее, чем поровну. Но только если кто-то готов вбить двадцать три строки в телефон – а у нас за вечер в ресторане чеки с 20+ позициями были нормой. Обычно не готов никто, поэтому счет делят поровну и кто-то переплачивает.

    Мы уперлись в это в поездке и в итоге сделали ИИ-сканер чеков сами. Ниже – как он устроен, что распознает уверенно, где стабильно ошибается и как проверить результат за полминуты.

    Как чек превращается в список позиций

    Классический OCR – распознавание текста на изображении – сам по себе для чека недостаточен. Он вернет простыню символов, в которой все еще надо руками понять, где название блюда, где количество, где цена строки, а где итог.

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

    Снимок сначала разворачивается по EXIF – иначе чек, сфотографированный боком, боком и уедет. Дальше работает модель. Итог мы не берем с чека напечатанным, а пересчитываем по распознанным позициям и сверяем с напечатанным – если сошлось, распознано верно целиком.

    Экран Пополамы с распознанным чеком из кафе в Барселоне: 17 позиций на 220,40 евро, слева исходные названия по-испански, справа переведенные на русский
    Слева — как позиции напечатаны в чеке, справа — после перевода. Валюта подтянулась с фото сама.

    Что распознается уверенно

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

    Отдельно про поездки: распознается еще и валюта, а названия позиций на незнакомом языке переводятся прямо при сканировании. В Японии это оказалось важнее, чем мы думали – читать чек из магазина иероглифами так себе развлечение.

    Где ошибается – и это нормально

    Ни одна нейросеть не дает стопроцентной точности, и обещания обратного стоит читать как маркетинг. Относитесь к результату как к черновику, который почти всегда верен.

    Чаще всего виновата не модель, а фотография: чек на темном столе, снятый под углом, с бликом поперек колонки цен. Лента из супермаркета на полметра либо не влезает в кадр, либо превращается в серую полосу – такой чек лучше снять частями.

    Из содержимого сложнее всего даются весовой товар вида «0,412 кг × 899,00» и отдельные строки скидок. Рукописные счета распознаются заметно хуже печатных – их придется поправить руками.

    Проверка за полминуты

    Не надо перечитывать все позиции. Достаточно сравнить итог в приложении с итогом на чеке.

    Сошлось – можно раскладывать по людям. Разошлось – ищите точечно, почти всегда виновата одна строка. Поправить одну быстрее, чем вбивать двадцать три.

    Сверяйте итог, а не позиции. Итог – это контрольная сумма всего чека.

    Как снимать, чтобы распозналось с первого раза

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

    Какие форматы подходят

    То, что реально лежит в галерее телефона: JPEG, PNG, WebP, HEIC и HEIF с айфонов, а также PDF – если чек пришел из доставки или почтой. Конвертировать заранее ничего не нужно.

    Что дальше

    Распознанный чек – еще не ответ на вопрос, ради которого все затевалось. Нужно не «сколько стоил ужин», а «кто кому сколько переводит».

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

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

    Частые вопросы

    Может ли нейросеть распознать чек по фото?
    Да. Современные мультимодальные модели читают чек целиком: не просто вытаскивают текст, а понимают, где название блюда, где количество, где цена строки, а где итог. Именно поэтому на выходе получается готовый список позиций, а не сплошная простыня символов, как у классического OCR.
    Какие чеки распознаются по фото?
    Печатные кассовые чеки из ресторанов, кафе и магазинов распознаются уверенно: названия позиций, количество, цены, итог и валюта. Рукописные счета распознаются заметно хуже – их придется поправить руками.
    Что делать, если чек распознался с ошибкой?
    Сверьте итог в приложении с итогом на чеке – это контрольная сумма всего документа. Если суммы разошлись, почти всегда виновата одна строка: весовой товар, скидка или позиция, засвеченная бликом. Поправьте ее вручную.
    Можно ли загрузить чек в PDF?
    Да. Пополама принимает JPEG, PNG, WebP, HEIC и HEIF с айфонов, а также PDF – если чек пришел из доставки или по почте. Конвертировать заранее ничего не нужно.
    Сколько стоит распознавание чека нейросетью в Пополаме?
    Ноль. Сканирование чека, деление по позициям, мультивалютность и расчет через СБП доступны бесплатно, без платного тарифа и без лимита на количество чеков в месяц.

    Читайте также