Приложение для сохранения чеков. Как сканировать чеки из магазинов и управлять расходами с iPhone. Мобильное приложение «Qrooto»

В северном полушарии нынче зима, а это значит что пора на лыжи! Мы с друзьями поддались этому течению и приступили к подготовке нашего совместного зимнего отдыха. Детали всего процесса планирования раскрывать не буду, скажу лишь только, что мне выпала ответственная роль сбора магазинных чеков наших совместных трат.

Так как песочницей для наших планов выступили Google Docs, а конкретнее Таблицы, то мне захотелось разместить фото всех чеков на отдельном листе. Первая попытка вставить картинку в таблицу через привычный пункт меню «Вставка → Изображение» привела к тому что чек оказался поверх ячеек таблицы и моим друзьям IT-шникам такое оформление точно бы не приглянулось:

«Должен же быть способ вставить картинку в ячейку...», - подумал я. Google нашел этот способ с первого запроса: функция IMAGE(URL), как значение ячейки. Ну что ж, дело сделано:

Google моментально среагировал на мой запрос «Online FineReader API» и выдал несколько статей с хабра о ABBYY Cloud OCR SDK. Быстрый просмотр доступных методов платформы подтвердил мои надежды и желанный ocrsdk.com/documentation/apireference/processReceipt был найден. Для осуществления задуманного недоставало понимания как вставить в ячейку таблицы пользовательскую функцию, которая будет вызывать методы обработки чека. Но и тут поиск меня не подвел и был найден Редактор скриптов Google.

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

Function processReceipt(imageUrl) { // Загружаем картинку чека var image = UrlFetchApp.fetch(imageUrl); // Формируем заголовок авторизации, который состоит из имени приложения и пароля var pass = "GoogleDriveTest" + ":" + "********************" // Формируем POST запрос на обработку чека var url = "http://cloud.ocrsdk.com/processReceipt"; var headers = { "Content-Type":"image/png", "Authorization" : "Basic " + Utilities.base64Encode(pass) }; var options = { "method":"POST", "headers": headers, "payload" : image.getContent() }; var response = UrlFetchApp.fetch(url, options); // Парсим XML ответа и находим в нем ID задачи по обработке нашего чека (больше деталей тут http://ocrsdk.com/documentation/apireference/processReceipt/) var document = XmlService.parse(response.getContentText()) var id = document.getRootElement().getChildren().getAttribute("id").getValue() var resultUrl // Ждем успешного завершения задачи и получаем url по которому можно получить результат обработки чека do { Utilities.sleep(3000) url = "http://cloud.ocrsdk.com/getTaskStatus" + "?taskId=" + id; headers = { "Authorization" : "Basic " + Utilities.base64Encode(pass) }; options = { "method":"GET", "headers": headers, }; response = UrlFetchApp.fetch(url, options); document = XmlService.parse(response.getContentText()); if (document.getRootElement().getChildren().getAttribute("status").getValue() == "Completed") { resultUrl = document.getRootElement().getChildren().getAttribute("resultUrl").getValue() break } } while(true) // Получаем результат обработки чека options = { "method":"GET", }; response = UrlFetchApp.fetch(resultUrl, options); document = XmlService.parse(response.getContentText()); // document содаржит XML нашего чека. Из-за моральных принципов реализацию функции findTotalPriceInReceiptXML я скрыл:) result = findTotalPriceInReceiptXML(document) return result }
Всё сохраняем и идем обратно в таблицу. Чтоб сие чудо заработало, пришлось вынести в отдельную ячейку таблицы URL картинки чека. Наша функция теперь доступна как =processReceipt(ячейка с URL).

Всем хорошей зимней погоды и удачи на лыжных склонах!

Знаете ли вы, что можно возвращать кэшбэк за чеки за повседневные покупки в магазинах? Речь идет не о онлайн покупках через интернет. Где кэшбэк начисляет специальные сервисы (типа Летишопс или Epn).

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

Интересно? Тогда поехали.

Как это работает?

Как вернуть кэшбэк с чека за покупки или принцип получения денежного бонуса.

Качаем специальные приложения на телефон. Покупаем товар в магазине. Сканируем чек или QR код из приложения. Принцип сканирования зависит от приложения. Обычно варианта два. Просто навести камеру телефона на QR код в чеке. И приложение само зафиксирует все данные. Либо нужно просто сфотографировать чек и загрузить его в программу.

QR код на чеке

Сервис некоторое время (обычно от 1 до 3 дней) проверяет чек. И если все правильно — начисляет вам деньги.

Деньги поступают в личный кабинет. При накоплении определенного порога — их можно вывести на телефон, электронные кошельки (обычно это Яндекс.Деньги или WebMoney) или на банковскую карту.

Минимальная сумма к выводу от 5-10 рублей до 100-300 рублей. Зависит от приложения и способа вывода.

За что платят или за чей счет банкет

В каждом приложении есть свой список товаров или условий, за которые можно получить возврат денег по чеку.

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

Отдельные бренды (соки определенной марки, детское питание, подгузники, пиво, пельмени).

Или бонус идет за покупки в конкретной торговой сети (Пятерочка, Магнит, Перекресток, Ашан). Вознаграждение начисляется просто за чек из этого магазина.

Резонно возникает вопрос — а кто начисляет деньги? И для чего это нужно?

Производителю или продавцу товаров (если речь идет о торговых сетях), для стимулирования продаж и продвижения своего продукта.

Здесь мобильные приложения выступают в роли посредников между покупателями и компаниями-производителями. Мы получаем бонус за покупки «акционного» товара. Продавцы — прибыль с роста продаж. Приложения — небольшой процентик за посредничество.

Но здесь есть один нюанс. Который позволяет нам с вами получать хороший кэшбэк за самые ходовые товары.

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

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

С нуля выгодных богатых клиентов (производителей) не привлечешь.

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

Сколько можно заработать?

Буду немного занудным. Все упирается в 4 фактора:

  1. Ваши ежемесячные расходы.
  2. Проводимые акции — список товаров, за которые можно получить возврат.
  3. Доступность этих товаров в вашем городе.
  4. Полезность этих предложений для вас. Есть кэшбэк за подгузники, но дети у вас выросли из этого возраста. Платят за покупку пива и другой алкогольной продукции, но вы не пьете. Дают возврат за корм для животных, а у вас нет ни кошки, ни собаки.

По моему опыту использования сервисов — удается получать в месяц от 50-100 до 300-500 рублей.

Для примера сколько и чего дают (или давали) за покупки:

  • любой хлеб — 1 рубль;
  • яйца — 2 рубля (любая упаковка);
  • минералка — 1 рубль (бутылка);
  • яблоки — 2 рубля за кг.
  • кефир или молоко — 1 рубля за упаковку.

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

На момент написания статьи просто для примера наливают бонусы:

  • кетчуп Heinz — за каждый 5-й товар полный возврат его стоимости;
  • кетчуп Моя Семья — от 20 до 25% от стоимости покупки;
  • за чай (разных марок) — кэшбэк 5-15%;
  • кофе — от 70 до 350 рублей за упаковку (естественно кофе дорогих марок);
  • шоколад (плитки, батончики) — 15-25%;
  • соки, воды, минералка и другие напитки — 15-50%;
  • лезвия Gillette — 150-200 рублей за упаковку.

Приложения для получения кэшбэк

Ниже описаны сервисы, которые я протестировал и пользуюсь. Одними реже, другими часто. Но самое главное — они надежные. И по ним была получена выплата. Без обмана.

Принцип действия не буду описывать. Все они практически однотипны. И с функционалом разберется даже ребенок.

Едадил

Лидер рынка в сфере получения кэшбэка за чеки. Как по количеству пользователей. Так и по представленным товарам. Сам сервис принадлежит Яндексу.

Акции по товарам и магазинам удобно отслеживать на сайте — Едадила . А чеки сканировать в приложении.

Накопленные средства доступны для вывода на кошелек Яндекс.Деньги или мобильный телефон. Как таковых ограничений на вывод минимальной суммы нет. Кэшбэк можно выводить сразу после зачисления. Деньги поступают на указанный счет (или телефон) практически мгновенно.

Qrooto

Качаем приложение «Круто» по ссылке http://qrooto.ru/app и получаем cash back за покупки в Пятерочке, Ашане, Перекрестке, Магните, Дикси, Метро, Spar и многих других магазинах.

Бонусы за чеки начисляются в баллах. Курс — 10 баллов = 1 рубль.

При регистрации можете ввести мой пригласительный код: 297461 . Получите бонус — 99 баллов.

Деньги выводим на банковскую карту (от 50 рублей или 500 баллов), телефон или Яндекс.Деньги (от 300 рублей).

Заказанные на вывод 400 рублей (они же 4 000 баллов) пришли на кошелек Яндекс в течении 2-х дней.

Cash4Brands

Один их крупнейших сервисов по возврату за онлайн-покупки. Конкуренция заставляет, помимо стандартных предложений давать своим пользователям дополнительные выгодные «плюшки».

И как раз возврат с чеков в их числе.

В отличии от других подобных проектов, Cash4Brans в рамках лояльности начисляет не только за отдельные товары, но и за покупки в конкретных магазинах.

И самое интересное, что действует процент возврата от суммы покупки. А не как обычно: купи в Магните, Пятерочке или ….. и получи 1-2 рубля за чек.

Для примера возвращают процент от общей суммы с чека:

  • Магнит — 0,84%;
  • Ашан — 0.56%;
  • Лента — 0,98%.

Поехал на выходные в Гипермаркет. Затарился на на неделю-две на несколько тысяч. Дополнительно получил с чека несколько десятков рублей.

Мы с вами как рядовые пользователи просто обязаны извлекать выгоду из такой халявы.


Вывод осуществляется на все … телефон, эл. кошелки, банковская карта. Как таковой минималки на вывод нет.

inShopper

Минималка на вывод — 300 рублей. Доступны Яндекс.деньги или пополнение мобильника.

Пробовал еще другие подобные приложения. Но, как говорится, «что-то пошло не так»!

Просто перечислю их, чтобы вы не наступали на мои грабли и не тратили зря время (чеки и недополученные деньги).

Возможно я ошибаюсь на их счет. И мое мнение сугубо субъективное. Но лучше, постою в стороне

Дисконто

Пациент скорее жив, чем мертв. Лучшие времена давно прошли. Оно еще кое-как существует, предлагая покупать откровенный неликвид. Но самое неприятное, что нигде не описаны способы вывода. И минимальная сумма к выплате. Даже кнопки такой я не нашел.

Из минусов — чеки иногда почему-то не загружаются в приложение. Вернее через раз. Потестил пару дней и попрощался с ним навсегда.

Вместе дешевле

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

Топ-3 замечаний и негодований пользователей.

  1. практически полное отсутствие акционного товара;
  2. деньги за чеки часто не зачисляет по непонятным причинам;
  3. Заявка на вывод обрабатывается несколько недель. У некоторых уже несколько месяцев. И все это ради несчастных 10-20 рублей.

Ради интереса скачал приложение. Посмотрел пару минут, что да как и …..удалил его.

Кэшбэк: экономия с покупок

Здесь даже не стал качать приложение. Хватило отзывов. Проблемы все те же — сайт не платит. Находятся какие-то отмазки, чтобы не засчитать чеки или найти другие веские причины. Люди с трудом накопили по несколько сотен, а получить их не могут.

Совет 1. Используем сразу несколько разных приложений. Таким образом мы расширяем список доступных товаров для получения кэшбэка. Бывает (но не постоянно), за один и тот же товар можно получить бонус в нескольких приложениях одновременно. Просто сканируем один чек в разных программах и получаем двойную-тройную выгоду.

Совет 2. Установить одно и то же приложение на разные телефоны. Бывает попадаются достаточно «вкусные акции». Например, 20 рублей за покупку бананов, 30 рублей за любые яблоки или возврат 10 рублей за хлеб. Вдруг появится хороший кэшбэк за товар, который вы постоянно покупаете.

Проблема в том, что практически всегда стоят лимиты на получение бонуса. Не более 1-3 раза в месяц. Или ограничение по количество получаемого кэшбэка по этому товару (не более 3-5 бонусов в одни руки).

Несколько аккаунтов дадут кратное увеличение доступных кэшбэков за нужные чеки.

Совет 3. Бонусы за приглашения. Приглашая друзей и знакомых получаем халявные деньги. Банально устанавливая приложения на собственные телефоны используем промокоды приглашения. И сами же получаем деньги.

Совет 4. Иногда бывает лень сканировать чек, сразу после покупки в магазине. Особенно если вознаграждение небольшое. Просто собираем все нужные чеки и вечером загружаем все «оптом» в приложения. Это занимает 1 минуту. Если неохота заморачиваться с «мелочью» можно использовать другой вариант под названием….

Совет 5. «Детский труд.» Поручить все чеки сканировать детям. Естественно с полным возвратом им начисленного кэшбэка. Таким образом они зарабатывают себе на карманные расходы. И не одна копеечка не пройдет мимо.))))

Удачных покупок!

Иван Ожиганов Апрель 7, 2016

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

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

Цель проекта – разработать приложение с клиент-серверной архитектурой для распознавания кассовых чеков и извлечения необходимой семантической составляющей из них.

Обзор проекта

Задача распознавания чеков состоит из нескольких этапов:

1. Препроцесссинг
Поиск чека на изображении
Бинаризация
2. Выделение текста
3. Распознавание
4. Извлечение необходимой семантической составляющей чека

Реализация

1. Препроцессинг

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

1.1. Поворот изображения и поиск чека на нём

Задачу поиска чека мы выполняли при помощи следующих методов:

  • Адаптивная бинаризация с высоким порогом
  • Свёрточная нейронная сеть
  • Классификатор с признаками Хаара
Поиск чека при помощи адаптивной бинаризации
с высоким порогом

Рис. 1. Изначальный вид чека

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

Для упрощения задачи поиска картинка сначала поворачивается так, чтобы строки располагались максимально близко к горизонтальному положению (Рис. 2). Алгоритм поворота необходим, чтобы максимизировать дисперсию суммы яркости по строкам. Максимум достигается, когда строки расположены горизонтально.

Рис. 2. Поворот чека

Для поиска чека мы использовали функцию adaptive_threshold из библиотеки scikit-image. Это адаптивная бинаризация с большим порогом, которая оставляет пиксели белыми в областях с высоким градиентом, а более однородные области становятся черными. Таким образом, при достаточно однородном фоне остаётся небольшое количество белых пикселей, для которых мы ищем описанный прямоугольник. В результате полученный прямоугольник (Рис. 3) включает в себя область с чеком и минимальное количество фона.

Рис. 3. Найденная область с чеком

Поиск чека свёрточной нейронной сетью

Мы решили искать ключевые точки чека при помощи свёрточной нейронной сети, как мы делали это ранее в . В качестве ключевых точек были выбраны углы чека. Такой метод оказался неплохим, но по качеству он проигрывал методу адаптивной бинаризации с высоким порогом.

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

Представляем вам результаты работы сети:

Рис. 4. Примеры работы свёрточной нейронной сети на поиск углов чека

Поиск чека каскадным классификатором с признаками Хаара

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

Примеры работы каскадного классификатора с признаками Хаара:

Рис. 5. Положительные результаты работы каскадного классификатора с признаками Хаара

Рис. 6. Ложноотрицательное и ложное срабатывания классификатора с признаками Хаара

1.2. Бинаризация

Для бинаризации используется тот же adaptive_threshold, окно достаточно большое, чтобы оно содержало и текст, и фон (Рис. 7).

Рис. 7. Бинаризация чека

2. Выделение текста

2.1. Выделение текста методом связных компонент

Первый этап выделения текста – это поиск связных компонент. Мы реализовали его с помощью функции findContours из OpenCV. Большинство связных компонент в самом деле являются символами, но некоторые – остатки шума после бинаризации. Мы отсеяли их при помощи фильтров по максимальной/минимальной площади. Для составных символов применили алгоритм объединения связных компонент (:, Й, =). После этого символы объединяются в слова при помощи поиска ближайших соседей. Принцип поиска ближайших соседей: для каждого символа ищутся несколько ближайших соседей, затем из них выбирается наиболее подходящий кандидат на присоединение справа и слева. Алгоритм повторяется, пока не останется символов, не принадлежащих словам (Рис. 8).

Рис. 8. Поиск связных компонент и формирование слов (слова выделены одним цветом)

Рис. 9. Формирование строк (строки выделены одним цветом)

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

2.2. Выделение текста при помощи сетки

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


Рис. 10. Пример сетки

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

Для поиска такой сетки мы попробовали следующий алгоритм. Сначала находятся связные компоненты на бинаризованном изображении:

Рис. 11. Пример поиска связных компонент

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

График этой формулы выглядит следующим образом:

Рис. 12. График функции в формуле

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

Геометрическое искажение было параметрезированно с помощью функции RectBivariateSpline из модуля scipy в python. Оптимизация осуществлялась с помощью функции minimize из модуля scipy.

Рис. 13. Пример правильно найденной сетки

Рис. 14. Пример неправильно найденной сетки

Мы отказались от данного метода, потому что он имеет ряд существенных недостатков – работает нестабильно и медленно.

3. Распознавание текста

3.1. Распознавание текста, найденного методом связных компонент

Распознавание текста производится при помощи сверточной нейросети, обученной на шрифтах, вырезанных с чеков. На выходе из сети мы имеем вероятности для каждой буквы и берем несколько первых вариантов, которые в сумме дают близкую к 1 вероятность (99%). Далее рассматриваем все возможные варианты составления слов из полученных букв и проверяем их по словарю. Это позволяет улучшить точность распознавания, исключая ошибки среди похожих символов (З и Э).

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

3.2. Распознавание слова целиком

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

  • при помощи рекуррентной нейронной сети вида LSTM;
  • при помощи равномерной сегментации.
LSTM

Для сложных случаев мы решили использовать нейронную сеть вида LSTM, чтобы распознавать все слово целиком, опираясь на опыт исследований в статьях “Reading Scene Text in Deep Convolutional Sequences ” и “Can we build language-independent OCRusing LSTM networks? ”. Для этой цели мы взяли библиотеку OCRopus .

Использовав моноширинные шрифты, мы подготовили искусственную выборку для обучения (рис. 15).


Рис. 15. Примеры искусственной выборки

Обучив сеть, мы протестировали её на валидационной выборке. Результаты тестирования показали, что сеть обучилась хорошо. Тогда мы проверили её на реальных чеках. Ниже представлены результаты:

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

Мы решили добавить различные искажения в обучающую выборку, для того чтобы приблизить её к словам, получаемым с чеков (Рис. 16).


Рис. 16. Примеры искусственной выборки

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

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

Мы предполагаем, что при одном шрифте и с малыми искажениями такая сеть работала бы намного лучше.

Равномерная сегментация

У нас возникла идея разбить слово на символы равномерно, поскольку шрифт на чеках моноширинный. Для этого необходимо знать ширину символа в слове. Для каждого чека оценивается мода ширины символа. Если распределение ширин символов бимодальное (Рис. 17), то выбираются две моды и для каждой строки определяется своя ширина.


Рис. 17. Пример бимодального распределения ширин символов в чеке

После того как мы получаем примерную ширину символа в данной строке, мы делим длину слова на ширину символа и получаем примерное количество букв. Затем делим длину слова на полученное примерное количество букв плюс-минус один:

Рис. 18. Процесс поиска оптимальной сегментации

И выбираем наилучший вариант разбиения:

Рис. 19. Оптимальная сегментация

Точность такой сегментации весьма высока.

Рис. 20. Пример корректной работы алгоритма

Но иногда мы наблюдали, что алгоритм работает не совсем корректно:

Рис. 21. Пример некорректной работы алгоритма

После сегментации каждый фрагмент отправляется в свёрточную нейронную сеть и распознаётся.

4. Извлечение необходимой семантической составляющей чека

Поиск покупок в чеке совершается при помощи регулярных выражений. Для всех чеков есть одна общая особенность: цена покупок записана в формате XX.XX, где Х – цифра. Таким образом можно извлечь строки с покупками. ИНН ищется по 10 цифрам и проверяется по контрольной сумме. Имя держателя карты ищется в формате NAME/SURNAME.

Рис. 22. Результаты извлечения необходимой семантической составляющей чека

Заключение

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

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

Сейчас в App Store можно найти большое количество приложений для выполнения самых разных задач - от измерения пульса и покупки одежды в Сети до вызова такси и учета финансов. Последние, как правило, похожи друг на друга и отличаются разве что интерфейсом, но сегодняшнее наше приложение Alzex Finance выделятся на фоне остальных одной интересной функциональностью, из-за чего многие в редакции начали пользоваться программой для учета финансов.

Приложение идеально подходит для ведения личного и семейного бюджета — интерфейс настолько логичный и продуманный, что можно легко отследить любое движение денежных средств, вплоть до суммы, потраченной на буханку хлеба в соседнем магазине. Идея разделения расходов и доходов на категории позволяет видеть, куда и в каких количествах тратятся деньги, кто добавил новую транзакцию (есть возможность добавить члена семьи или контрагента).


Добавить транзакцию можно в пару нажатий — ввели описание, счет списания, сумму и категорию. Она сразу отразится в списке расходов (или доходов, если речь, например, о заработной плате), будет видна в аналитике и отразится на балансе выбранного счета во вкладке «Счета».


Пока что описание похоже на многие другие приложения для учета расходов, поэтому сразу перейдем к отличиям Alzex Finance. В первую очередь это синхронизация между разными устройствами (тем же iPhone) и компьютером (версия для ). Это позволяет нескольким людям вести одну базу данных с расходами и доходами и синхронизировать изменения. При этом, в отличие от остальных подобных сервисов, в данном случае база хранится локально, и программа работает без интернета. Особенно актуально это за границей, где каждый потраченный мегабайт в роуминге может быть «золотым».

Но одна из главных функций в приложении появилась относительно недавно с обновлением. В Alzex Finance реализована функция импорта чеков, то есть разработчики избавили от необходимости вручную вводить транзакции. Отсканировали чек — и расход добавлен!

Как это работает?

С 1 июля 2017 года все магазины обязали печатать на чеках QR-код, чтобы его можно было просканировать и получить электронный чек. Сканирование осуществляется программой «Проверка кассового чека» от ФНС России. После первого же запуска приложение предложит распознать чек, и через несколько секунд его электронная копия будет уже на вашем iPhone.


Чтобы экспортировать чек в приложение для учета финансов, нужно выбрать раздел «Получение выписки», выбрать интервал времени и формат данных json. После загрузки чека вы увидите непонятные символы, но пугаться не стоит — нажимаете кнопку «Экспорт», выбираете из списка программу Alzex Finance, и чек добавлен!


Программа автоматически отправляет импортируемые чеки в раздел «Неподтвержденные транзакции», сама подбирает категорию для товара на основе ранее введенных операций. Так, например, все транзакции со словом «бензин» будут учитываться в категории с расходами на топливо, а все транзакции, в которых встречается слово «Молоко», будут отнесены в категорию «Продукты».




Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: