Как стать автором
Обновить

Оптическое распознавание символов и разбор чеков Rimi

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.5K
Всего голосов 13: ↑13 и ↓0+13
Комментарии20

Комментарии 20

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

Для РФ не нужно ничего распознавать, у нас все чеки электронные. Достаточно отсканировать QR код на чеке, в нем есть все, что нужно для загрузки данных чека с сайта ФНС. Есть даже официальное приложение для этого, "Проверка чеков".

Как только Rimi ввели эту систему, я сразу им писал в саппорт жалобы о качестве чеков, и что для OCR буквы там разные и непонятные. На что получил ответ - провериться у глазного. Прошло 3 года, и никаких улучшений, пользователям приходиться придумывать крутые процессы оцифровки :)

А ещё, попробовал скормить чек Google Bard. Он справился без танцев с бубном, но явно для работы использовал мощности большого дата-центра:

У меня как-то так получилось, но я только кусок вашего чека взял, который в высоком разрешении (т.е. без финальных сумм и деталей):

Да. Я им тоже писал, чтобы чеки текстом присылали (Максима, например, присылает текстом). Но мне даже не ответили.

С Гугловским Бардом - удобно, да. Интересно, они сами чеки проверяют или как распознали, так и хорошо.

спросил их в Twitter: почему .PDF с картинкой, а не с текстом, ответили: для безопасности...

Я тут сервисом занимаюсь с доступом к нейросеткам, и мне стало интересно, может ли эту задачу решить gpt-4-vision.

Результат вот, на скрине (взял ваш первый чек в статье в качестве источника):

Имхо, качество хорошее, учитывая, что надо только промт подобрать. Но, например, у меня так и не получилось убрать 3 позицию (всего в чеке реально 6, сетка возвращает 7, 3-я лишняя). Возможно, если еще поколдовать над промтом или вручную фильтровать элементы с именем (Gala/galda cena), то можно получить вполне себе высокую точность :)

UPD: Если кому нужно, тут всё можно вызывать по API, т.е. нормально автоматизировать процесс.

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

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

  • Выбираем из полученных средних значения больше порога. Подбирается на глаз в зависимости от качества картинок и шрифтов;

  • Находим путь между левой и правой границами изображения для каждой группы белых пикселей, если в группе их больше порога (подбивается в зависимости от картинок и их качества);

  • Добавляем пустое пространство по всем полученным путям.

Пример на картинке из статьи

Здесь каждая синяя линия - один шаг алгоритма. Пути нарисованы от руки.

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

Интересный подход! Спасибо. А как Ваш алгоритм поведёт себя, если диакритический знак будет находиться ровно посередине между двух строк (т.е. расстояние до буквы сверху будет равно расстоянию до буквы снизу)? Я в чеках такую ситуацию наблюдал и во многом поэтому я решил не копать дальше в этом направлении.

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

Я бы поставил эксперимент на нескольких картинках, возможно будет нормально работать и без дополнительных штрафов.

Извините за оффтоп: это Литва или Латвия? А куда приходят эти чеки?

Латвия. Чеки на емелю приходят.

В эстонском Рими они приходят в личный кабинет на сайте

в ЛК электронными чеками не пользуетесь?

а чем они принципиально отличаются от того, что на почту приходит? тот же самый PDF.

Есть так называемая электронная кассовая лента, по требованиям MK noteikumi каких-то там.

Поясните пожалуйста, что вы имеете ввиду? Она доступна покупателю?

Это формат строгой отчетности для VID, внутри касс грубо говоря

Что-то на питоне делают по моему, в духе распознания изображений...

Тоже tesseract.
Smalklapu spinati, 1.8k. 100g 1 gab X 1,09 EUR Tomati Latvijas 1.3kira kg 0,310 kg X 2,09 EUR/kg Atl. -0,16 Gala cena 0,49 Bumbieri Conference 70+ mm 1. Skira kg 0,760 kg X 1,69 EUR/kg Liellopu aknu pastéte Lido svétku 120g 1 gab X 1,05 EUR Atl. -0,10 Gala cena 0,95 Piparmétras téja 30g 1 gab X 1,90 EUR Nidéles Santa Maria Ramen 200g 1 gab X 2,79 EUR Atl. -0,50 Gala cena 2,29 1,09 0,65

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории