![](/stc/img/evkova.png)
Разработка приложений для мобильных устройств (C#, Java) с использованием
Содержание:
Введение
В настоящее время мобильные приложения настолько распространены, что можно найти подходящее под любые задачи и цели. Люди мигрировали с компьютеров на мобильные устройства, и как результат, мобильные приложения стали важной частью нашей жизни. Соответственно все больше людей обращаются к мобильным приложениям не только для решения задач бизнеса, но также и для решения ежедневных вопросов. Поэтому актуальность темы разработки мобильных приложений высока.
На смартфон часто перекладываются вопросы получения информации о том, как сделать ремонт, как решить тот или иной бытовой вопрос, но также смартфон используют и для решения вопросов питания.
Данная работа направлена на разработку мобильного приложения, которое упростит такую повседневную обязанность, как составление списка покупок продуктов. Отличительной особенностью системы является интеграция с книгой рецептов и распознавание уже имеющихся продуктов различными способами.
Составление списка покупок таким образом поможет:
- Подбирать продукты для определённых рецептов;
- Удобно и интуитивно определять, какие продукты уже есть в наличии, используя функции приложения для распознавания продуктов
Предмет исследования – интеграция составления списка покупок с электронной книгой рецептов и интеллектуальным распознаванием имеющихся продуктов.
Целью данной работы является разработки мобильного приложения для операционной системы Android, которое составляет список покупок на основе выбранных рецептов и имеющихся продуктов.
Для достижения поставленной цели необходимо решить следующие задачи:
- Эмпирический анализ аналогичных приложений, связанных с составлением списка покупок
- Разработка архитектуры приложения и базы данных для хранения информации о рецептах и продуктах
- Разработка эффективной схемы взаимодействия пользователя с интерфейсом мобильного приложения
Глава 1 Изучение предметной области
1.1 Описание разрабатываемого приложения
Мобильное приложение, разрабатываемое в текущей работе, должно реализовывать следующий сценарий. Сначала пользователь выбирает из списка рецептов тот, которой он хочет приготовить. При этом пользователь может использовать поиск для нахождения определённого рецепта, а также для каждого рецепта пользователь может просмотреть изображение готового блюда, инструкцию по приготовлению и список ингредиентов для рецепта. После выбора одного или нескольких рецептов, пользователь заполняет список имеющихся продуктов. Для этого пользователь приложения может как заполнить его вручную, так и использовать функцию распознавания продуктов. При использовании последней клиент приложения наводит камеру телефона на определенные части продукта в холодильнике, в зависимости от выбранного метода распознавания, и с помощью машинного обучения программа распознаете наименования продуктов. Распознавание продуктов может осуществляться по нескольким критериям: по виду продукта, по тексту на продукте, по штрих-коду продукта. В итоге приложение на базе распознанных запасов и рецептов составляет вам список покупок недостающего.
Основной упор приложения должен осуществляться на разработку функций распознавания продуктов и интеграции со списком рецептов, что поможет пользователю сэкономить время на составление списка ингредиентов того или иного рецепта. Если проследить динамику использования покупателями электронных списков покупок, начиная с 2011 года (Felix Heinrichs, 2011) и заканчивая 2018 годом (Brand New World: Exploring the Critical Issues Facing Today's Brands, 2018), то получаем что процент покупателей, которые используют такие приложения увеличился с 3% до 37%, что приводит к мысли о необходимости разработки подобного приложения.
1.2 Моделирование разрабатываемого приложения
1.2.1 Моделирование приложения с использованием UML
Так как проектирования приложения является важной частью разработки, то есть необходимость в разработке понятной модели приложения. Для этого используется унифицированный язык моделирования UML (Unified Modeling Language), являющийся системой обозначений, которую можно применять для объектно-ориентированного анализа и проектирования. Его можно использовать для визуализации, спецификации, конструирования и документирования программных систем. С использованием моделей UML можно посмотреть на разрабатываемое приложение с различных углов, что позволяет легче понять суть поставленной задачи и способы её реализации. В Приложении (Рис.1) текущей работы представлена полная диаграмма классов приложения. На ней представлены классы объектов исходного кода и их взаимосвязи. Данная диаграмма была построена автоматически с помощью плагина SimpleUML среды разработки Android Studio.
Для наглядного отображения взаимодействия объектов приложения в динамике используется диаграмма последовательностей.
Рис. 1. Диаграмма последовательностей приложения
1.2.2 Модель сценариев использования
Для описания логики взаимодействия клиента с приложением была составлена схема сценариев использования.
Рис. 2. Модель сценариев использования приложения
1.2.3 Даталогическая модель
Даталогическая модель – создание схемы базы данных на основе конкретной модели данных. Она отображает набор схем отношений, однако следует иметь в виду, что в связи с выбранной СУБД, в модели отсутствуют индексы и ограничения на размер данных.
Основными информационными объектами рассматриваемой системы являются объекты: «Рецепт», «Ингредиент», «Измерение», «Ингредиент рецепта». Для реализации этих объектов создаются таблицы, описания таблиц приведены в таблице 1, таблице 2, таблице 3 и таблице 4.
Таблица 1. Рецепт
Имя поля |
Тип данных |
Код рецепта |
Строка |
Наименование |
Строка |
Инструкция |
Строка |
Автор |
Строка |
Изображение |
Строка |
Таблица 2. Ингредиент
Имя поля |
Тип данных |
Код ингредиента |
Строка |
Название ингредиента |
Строка |
Таблица 3. Измерение
Имя поля |
Тип данных |
Код измерения |
Строка |
Название измерения |
Строка |
Таблица 4. Ингредиент и рецепт
Имя поля |
Тип данных |
Код рецепта |
Строка |
Код ингредиента |
Строка |
Код измерения |
Строка |
1.3 Анализ существующих приложений для составления списка покупок
Возможность составления списка покупок реализовано во множестве мобильных приложений и веб-сервисов. Однако не все такие приложения выполняют функцию распознавания имеющихся продуктов, а также интеграцию со списком рецептов. Рассмотрим функционал наиболее популярных приложений, доступных в Google Play Market.
Приложение «Список покупок – Купи Батон!» имеет более 1 миллиона скачиваний и высокий рейтинг. Данное приложение предоставляет возможность добавить продукты, используя автозаполнение. Затем кликом на продукт можно вычеркнуть его из списка. Особенностями данного предложения является то, что в нем отсутствует все лишнее, что является как его плюсом, так и минусом, так как нет возможности ориентироваться на конкретные рецепты блюд и на наличие продуктов в холодильнике.
Рис. 3. Интерфейс программы «Купи Батон»
Достоинства:
- Простой интерфейс
- Автоматическое предложение продуктов
Недостатки:
- Отсутствие интеграции с кулинарной книгой
- Нельзя добавить список уже имеющихся продуктов
- Наличие встроенной рекламы
Приложение “Bring!” является ещё более популярным приложением (около 5 млн. скачиваний) с удобным интерфейсом и возможностью создавать несколько списков продуктов для разных целей. В этом приложении есть возможность выбрать ингредиенты для конкретного рецепта, однако данный функционал оформлен в виде «идей» для покупок и клик на рецепт сопровождается переходом на сайт с рецептом.
Рис. 4. Интерфейс программы «Купи Батон»
Достоинства:
- Удобное представление продуктов в виде иконок
- Возможность иметь несколько списков покупок
Недостатки:
- Отсутствие встроенной кулинарной книги
- Отсутствие трекинга имеющихся продуктов
- Перегруженный список покупок
Приложение Yummly является скорее всего самым ярким представителем приложений для составления списка покупок, так как при наличии современного интерфейса приложение предоставляет большой список рецептов на выбор, систему рекомендаций рецептов в зависимости от выбранных ранее и необходимости соблюдать диету. Минусом данного приложения является отсутствие конкретной специализации программы на составлении списка покупок и неудобный интерфейс. Кроме того, данная программа не доступна на русском языке.
Рис. 5. Интерфейс программы Yummly
Достоинства:
- Около 2 млн. рецептов;
- Рекомендации рецептов
- Распознавание имеющихся продуктов по внешнему виду с помощью камеры смартфона
- Составление списка покупок
Недостатки:
- Отсутствие русского языка;
- Ограничения бесплатной версии
- Перегруженный интерфейс программы
- Требуется регистрация через Google или Facebook для доступа ко всем функциям
Таким образом несмотря на большое количество вариантов приложений для составления списка покупок в большинстве из них отсутствует интеграция со списком рецептов, либо приложение неудобно для русского пользователя. Проанализировав полученные данные, перейдем к следующему этапу, а именно выбору инструментария для разработки программы.
1.4 Обзор и обоснование выбора инструментария для разработки приложения
Для реализации приложения можно выделить два типа решений: кроссплатформенные, позволяющие осуществлять разработку приложения под множество различным платформ, и нативные, предоставляемые разработчиком платформы.
Такие кроссплатформенные средства разработки, как Unity и Qt, хотя и представляют необходимый инструментарий для создания мобильных приложений, поддержку языка С++ или С# и более простые методы разработки, тем не менее в них отсутствует множество функций специфичных для операционной системы Android. Кроме того, полученное приложение будет занимать гораздо больше места в памяти телефона, чем аналогичное приложение, сделанное нативными средствами разработки.
Из доступных интегрированных сред разработки была выбрана Android Studio по следующим причинам:
- Предоставляет гибкую систему сборки, основанную на Gradle
- Удобный редактор макетов элементов приложения
- Интеграция с системой контроля версий Git
- Средства мониторинга производительности
- Наличие большого количество документации и видеоматериалов
В целом, большинство популярных сред разработки предоставляют схожую функциональность, поэтому наличие детальной документации по различным аспектам разработки для ОС Android сыграло ключевую роль в выборе инструментария.
В качестве инструмента для управления версиями приложения будет использоваться GitHub, как самое популярное, бесплатное и доступное решение из существующих. Разработка велась для мобильный устройств с версией ОС Android 7.0 Nougat и выше.
1.5 Обоснование необходимости разработки приложения
Чтобы понимать актуальность разрабатываемого приложение, необходимо оценить актуальность его основной цели – составления списка покупок. Согласно статье (Berndt, 2015) списки покупок выполняют важную роль в процесс покупок в магазине, предоставляют возможность людям не забывать купить продукты, контролировать процесс шоппинга, контролировать расход средств и выявлять продукты, которые нужны лишь дополнительно к списку.
Во-первых, использование списков продуктов сокращает количество «импульсивных» покупок, которые могут быть описаны как неожиданное и сильное желание купить что-то незамедлительно (Kollat, 1967).
Во-вторых, фокусируясь на покупке продуктов из заранее приготовленного списка, покупатель проводит меньше времени в магазине, таким образом повышая свою эффективность (Inman, 2009).
В-третьих, согласно исследованию (Thomas, 2004) покупатель тратит гораздо меньше денег, когда покупает продукты следуя списку продуктов. Это может быть вызвано тем, что составленный список покупок репрезентативен и показывает какие позиций необязательны. Кроме того, при составлении списка покупок тратится больше времени, потому как учитывается человек анализирует информацию о возможных способах экономии средств.
Таким образом составление списка покупок является несомненным преимущество для покупателя, поэтому разрабатываемое приложение актуально.
Однако кроме обычного списка покупок, основное внимание при разработке приложения уделяется тому, чтобы пользователь получал список покупок для приготовления конкретных блюд из книги рецептов, доступной в приложении. Из этого следует, что пользователю приложения не придется сверять свой список со списками ингредиентов всех блюд, которые он хочет приготовить, что значительно сэкономит его время.
Данная глава посвящена исследованию предметной области. В главе приведено описание разрабатываемого приложения для составления списка покупкой с функцией распознавания имеющихся продуктов, смоделированы основные элементы взаимодействия мобильного приложения и его компонентов.
В ходе анализа существующих решений в магазине приложений Google Play были выявлены основные функции, которыми должна обладать разрабатываемая система. В соответствии с поставленными целями был выбран подходящий инструментарий для разработки и поддержки мобильного приложения. Кроме того, была проанализирована актуальность приложения в условиях современного рынка и сделаны выводы, какие особенности должны быть реализованы должны быть реализованы для максимально эффективного решения проблем пользователей приложения.
Глава 2. Реализация мобильного приложения
Разрабатываемая система базируется на архитектуре MVP (Model-View-Presenter). В этом случае элементы Activity и Fragment в структуре приложения выполняют роль View, отображающий различные данные на интерфейсе программы. Взаимодействие View с Model приложения, которое представлено в структуре как пакеты Models м ModelManagers, происходит только через пакеты Adapters, которые выполняют роль Presenter в приложении. Благодаря такой архитектуре реализуется разделение ответственности между компонентами, что позволяет легче понимать и поддерживать код приложения. Кроме того, достигается модульность системы, при которой появляется возможность менять View или Model, без влияния на другие компоненты приложения.
2.1 Сбор данных для создания базы данных
Одним из основных компонентов разрабатываемой системы является база данных рецептов, к которым все пользователи должны иметь одинаковый доступ. Для выбора подходящего варианта, рассмотрим достоинства и недостатки популярных баз данных.
MySQL – это реляционная система управления базой данных. Данная СУБД (Система управления базами данных) может быть установлена на любом сервере, также существуют облачные сервисы, в которых данная MySQL уже встроена. При наличии большого активного сообщества, использующего MySQL, достигается большое количество документации и высокая надежность системы. Кроме того, MySQL является СУБД с открытым кодом, находящимся в свободном доступе.
SQLite это встраиваемая кроссплатформенная база данных, которая поддерживает команды SQL. Данное решение является очень надежным, так как при выпуске версии проходит через большое количество автоматических тестов. При отсутствии сервера само мобильное приложение будет являться сервером. SQLite находится в свободном доступе и поставляется бесплатно для любых целей.
Firebase это облачный сервис компании Google, доступный на Google Cloud Platform, предоставляющий доступ к NoSQL базе данных. Данное решение подходит для приложений, данные которой изменяются в реальном времени. Основным преимуществами сервиса являются бесплатное облачное хранилище, высокая скорость работы с базой данных и автоматическое обновления данных в приложении.
На основе изложенных выше фактов было решено использовать Firebase для хранения информации о рецептах. Таким образом, если пользователь добавляет рецепт в базу данных, то он становится доступным для всех пользователей. SQLite является надежным решение для хранения локальных данных, поэтому информация о выбранных пользователем рецептах, добавленных продуктах и списке покупок будет находится в SQLite базах данных. Также преимуществом сервиса компании Google перед MySQL является бесплатное место на сервере и более высокая скорость работ за счет использования NoSQL базы данных. Так как для целей разрабатываемого приложения достаточно функциональности базы данных Firebase, в которую включена поддержка просто поисковых запросов, то было решено применить именно такое решение.
2.2 UI и UX приложения
Интерфейс мобильного приложения является очень важной его частью. Согласно книге (Norman, 2013), элементы дизайна должны разрабатываться с учетом того, чтобы незнакомый с приложением пользователь понимал, как это работает. Поэтому основными критериями при разработке приложения являются удобство и элегантность полученного дизайна приложения.
При разработке используется элементы стиля графического дизайны Material Design, разработанного компанией Google. В частности, основным элементом навигации между разделами приложения является элемент TabLayout, представляющий из себя меню в виде вкладок, между которыми можно перемещаться как с помощью горизонтального скроллинга, так и путем нажатия на вкладку. Изменения в одной вкладку естественным образом будет влиять на содержание остальных вкладок. Например, отменив выбор определенного рецепта, список покупок должен автоматически обновиться и показать соответствующее сообщение об обновлении.
2.3 Основные функции программы
Рассмотрим подробнее функционал разрабатываемого мобильного приложения. Основными функциональными требованиями к системе являются:
- Приложение должно отображать список рецептов
- Приложение должно отображать детали рецепта при клике на рецепт из списка
- Приложение должно позволять выбрать определенный рецепт для учета его ингредиентов во время составления списка покупок
- Приложение должно позволять добавить имеющийся у пользователя продукт, как с помощью распознавания продукта, так и с помощью ручного ввода его наименования
- Приложение должно составлять список покупок на основе выбранных рецептов и имеющихся продуктов
Далее представлено детальное описание реализации каждого требования.
2.3.1. Предоставление списка рецептов и выбор рецепта для составления списка покупок
Так как особенностью разрабатываемого приложения является интеграция с книгой рецептов, пользователю должны быть доступны следующие возможности:
1. Просмотр списка рецептов.
На вкладке приложения «Рецепты» пользователю отображается список рецептов, который включается в себя изображение рецепта, его автор и наименование. Данная функция реализована с помощью элемента RecyclerView и отображает данные о рецептах, находящиеся в облачной базе данных Firebase в таблице Recipes.
2. Просмотр деталей рецепта
При клике на определенный рецепт пользователь переходит на окно с информацией о данном рецепте. Кроме информации о названии, авторе и изображении готового блюда пользователю доступна информация о необходимых ингредиентах и инструкция по приготовлению блюда. Информация об ингредиентах берется из таблиц Ingredient (таблица с названиями ингредиентов), Uom (таблица с единицами измерения количества ингредиентов) и IngredientsUom (таблица с соответствием комбинации ингредиента и единицы измерения определенному рецепту).
3. Выбор рецепта
В окне деталей рецепта пользователь может выбрать рецепт для его последующего учета в генерации списка покупок. Выбранные рецепты отображаются на вкладке «Выбранные» и могут быть оттуда нажатием на кнопку удаления рядом с соответствующим рецептом. Список этих рецептов хранится в телефоне пользователя с помощью SQLite.
4. Поиск рецепта
Так как список рецептов может быть очень объемным, пользователю доступна функция поиска нужного рецепта по полному или частичному названию. Данная функция была реализована путем фильтрации рецептов по названию в RecyclerView.
5. Добавление нового рецепта
Пользователи приложения могут добавить свой рецепт, указав название рецепта, его автора, инструкцию по приготовлению, а также загрузив изображения блюда и добавив ингредиенты рецепта. Информация о добавленном рецепте отправляется в базу данных Firebase и автоматически становится доступна для всех пользователей. Таким образом база рецептов будет пополняться новыми рецептами. Кроме того, перед загрузкой изображения, пользователь должен дать разрешение приложению на использование данной функции.
Рис. 6. Интерфейс списка рецептов, деталей рецепта и добавления нового рецепта
2.3.2. Добавление имеющихся продуктов
Следующей функцией разрабатываемого приложения является добавление продуктов в список уже имеющихся у пользователя продуктов. Такие продукты не будут учитываться при составлении списка продуктов. Для удобства пользованием приложением в приложении доступна возможность для добавления продуктов, как вручную, так и используя современных средств распознавания изображения с камеры телефона, а именно по внешнему виду продукта, по тексту, находящемся на продукте, и по штрих-коду.
Рис. 7. Интерфейс добавления продуктов
2.3.3. Составление списка покупок
В статье (Harsha Jayawilal, 2017) авторы попробовали сделать приложение, которое будет максимально точно угадывать какой продукт нужен пользователю, когда он начинает вводить название продукта. Таким образом пользователь приложения будет получать список покупок наиболее быстро. Однако в разрабатываемом нами приложении основная задача – это создание списка покупок непосредственно для приготовления блюд из выбранных рецептов. В этом случае пользователю не нужно вводить продукты, которые он хочет купить, самому - за него всю работы сделает наше приложение. Таким образом основными критериями при разработке данной функции являются:
- Удобство чтения текста в списке покупок
- Возможность использовать сгенерированный список с большим удобством, чем рукописный
- Простота удаления продукта из списка
Рис. 8. Вид списка покупок
При нажатии на кнопку генерации списка покупок, берется информации об ингредиентах выбранных рецептов и из данных ингредиентов удаляются уже имеющиеся у пользователя продукты. Полученный список продуктов можно использовать во время совершения покупок и позиции в нем удалятся кликом, свайпом или кнопкой очистка списка.
Основным отличием от большинства аналогичных мобильных приложений является возможность распознать название продукта простым наведением камеры на продукт или его часть. На вкладке «Продукты» при нажатии на кнопку добавление продукта, пользователю предоставляется возможность выбирать метод из списка. Рассмотрим каждый метод детально.
2.4.1. Распознавание по виду продуктов
Рассмотрим возможность распознавания продуктов по их внешности. Предположим, что на столе пользователя приложения лежит продукт. Пользователь наводит камеру на продукт, чтобы обученная модель нейронной сети проанализировала фотографию и вывела название продукта. В этом случае пользователю не нужно вводить название продукта вручную, что очень удобно. Для реализации такой возможности есть несколько решений:
- Библиотека TensorFlow
- Фреймворк ML Kit для Firebase
- Imagga
ML Kit для Firebase и Imagga содержат множество продвинутых функций для распознавания объектов, однако большинство их них требуют платную подписку на сервис. TensorFlow в целом похож на ML Kit, поэтому и соперничает с ним, однако выбор отдается TensorFlow, как инструменту с более хорошей документацией и большим сообществом поддерживающим данную библиотеку.
Следующим важным пунктом является создание набора данных для обучения модели. Для данной задачи такими данными будут являться изображения продуктов и аннотации к ним в формате PascalVOC.
Для создания коллекции изображений продуктов питания были проанализированы различные существующие базы изображений с продуктами питаний. UECFood‐100 и Food‐101 (Bossard, 2014) содержат 100 категории продуктов с 1000 изображений в каждой. Данные изображения имеют хорошее качество, однако представляют собой завершенные блюда, а не отдельные ингредиенты, потому было решено найти изображения конкретных продуктов питания. Так, например, база изображений Fruits 360 содержит изображения около 130 фруктов и овощей, что подходит под требования нашего приложения. В базе изображений Open Image Dataset V6 компании Google также находятся изображения некоторых продуктов вместе с аннотациями в определенном формате. В качестве источника изображения также удобно использовать поисковую систему Google, скачивая изображения, по ключевым словам, соответствующим разным продуктам. Кроме того, для всех изображений необходимо изменить размеры разрешения до 800 на 600 пикселей, что в последствии поможет в тренировке моделей нейронной сети.
Формат PascalVOC содержит информацию о границах распознаваемого изображения внутри исходного, а также данные о файле изображения. Во время работы над проектом было использован как ручной метод маркировки изображений с помощью программы LabelImg, так и автоматическое конвертирование данных путем обработки аннотаций к изображениям Open Image Dataset V6.
Для тренировки нейронной сети было решено использовать следующие модели: COCO SSD MobileNet v1 и Faster R-CNN Inception v2. Данные модели были представлены как наиболее подходящие для мобильных устройств, поэтому было решено использовать именно их. Сверточная часть MobileNet состоит из одного обычного сверточного слоя с 3х3 свёрткой в начале и тринадцати блоков, изображенных справа на рисунке, с постепенно увеличивающимся числом фильтров и понижающейся пространственной размерностью тензора. Особенностью данной архитектуры является отсутствие max pooling-слоёв. Описанная выше модель была тренирована на данных MS-COCO и выпущена в 2019 году. R-CNN использует выборочный поиск (J.R.R. Uijlings, 2012) для поиска регионов интереса, после чего алгоритм передает их в сверточную нейронную сеть. Затем полученные карты признаков классифицируются по методу SVM (методу опорных векторов). В Faster версии модели выборочный поиск заменен на небольшую нейронную сеть, которая использует имеющуюся карту признаков для предположения о местонахождении регионов интереса.
Среди двух описанных моделей наиболее хороший результат при параметрах по умолчанию получился у COCO SSD MobileNet не только по точности (loss=1.16 у MobileNet против loss=1.24 у Inception), но и по скорости получения прогноза результата (быстрее в 21 раз). После тренировки обеих моделей, их работа была протестирована на фотографиях, сделанных в домашних условиях. Результатом тестом стало то, что Faster R-CNN справлялось с задачей в 85% случаев против 80%. Обе модели хорошо справляется с распознаванием средних и больших объектов, однако хуже справляется с маленькими объектами, так как большинство изображений в тренировочном наборе данных имеет большой размер.
В итоге, полученная модель была сконвертирована в формата .tflite для использования в мобильном приложении. При наведении на продукт появляется рамка, показывающая местоположение найденного продукта, а внизу экрана появляется его наименование. При этом учитываются только те распознавания, коэффициент доверия к котором больше порогового значения. При нажатии на кнопку «Добавить» найденный продукт добавляется в список продуктов пользователя.
Рис. 9. Распознавание продукта по внешнему виду
2.4.2. Распознавание по тексту на продукте
Рассмотрим возможность распознавания продуктов по их тексту. В этом случае пользователю для распознавания продукта, будет необходимо навести камеру на текст, находящийся на поверхности продукта, например, на название продукта на этикетке. С помощью машинного обучения текст продукта будет распознан, и пользователь получит возможность добавить его название в список. Для реализации такой возможности есть несколько решений:
- ML Kit от Firebase
- TensorFlow
- Tesseract OCR
Mobile Vision Text API от компании Google, входящий в пакет ML Kit сервиса Firebase, позволяет распознавать текст, при этом текст делится на блоки, строки и отдельные элементы, что удобно при анализе и обработке различных объемов текста. Tesseract OCR это библиотека с исходным кодом, которая осуществляет оптическое распознавание символов (англ. optical character recognition, OCR) на изображениях, и имеющая около 200 обученных языковых моделей. Основным моментом при выборе инструмента являлось качество распознавания русских символов, поэтому предпочтение было отдано сервису компании Google.
Когда пользователь нажимает на кнопку «Распознать» приложение получает изображение с камеры телефона и отправляет его на сервер, после чего получает get- запрос с распознанным текстом. Таким образом для работы данной функции необходимо подключение к интернету, которое есть у большинства владельцев смартфонов.
Так как на упаковке продукта присутствует большое количество текстовой информации, показывающей информацию о производителе, названии товара и его описании было решено:
- Использовать центральную часть экрана для распознавания только той информации, на которую указывает пользователь
- Предоставить возможность пользователь составить итоговое название продукта, путем выбора частей распознанного текста, которые должны в нем быть
Рис. 10. Распознавание продуктов по тексту
2.4.3. Распознавание по штрих-коду
Кроме приведённых ранее способов продукт можно распознать по штрих-коду. Самым популярным штрих-кодом у российских продуктов является линейный штрих-код с символикой EAN-13, представляющий из себя последовательность полосок разной ширины и кодирующих небольшой объем информации. Получив код EAN-13, можно узнать наименование, а иногда изображение, бренд и производителя продукта.
Для реализации, данной возможность необходим сканер штрих-кода. В интернете существует множество готовых решений, основная функциональность которых очень похожа. Примерами таких решений являются Barcode Recognition SDK от компании Dynamsoft и библиотека ZXing, находящаяся в свободном доступе на сервисе онлайн-хостинга репозиториев GitHub. Так как продукт компании Dynamsoft является платным, то было решено использовать библиотеку ZXing. Её особенностью является простота встраивания в приложение и поддержка различных форматов штрих-кодов, в том числе и EAN-13. Кроме того при работе камеры должен работать автофокус, так как это упрощает распознавание изображения штрих-кода, и данная функция поддерживается в библиотеке ZXing.
После распознавания кода продукта приложение получает информацию о его названии. Данная функция была реализована, путем разработки базы данных, в которой находятся EAN коды продуктов питания и соответствующие им названия продуктов. Для этого использовалась информация из справочника штрихкодов, расположенного в репозитории GitHub (UhttBarcodeReference, 2020). Из полученных данных была отобрана информация о продуктах питания, а также удалены все английские наименования товаров. Кроме того, из названий продуктов были убраны сокращения, числа и знаки препинания. Так как наиболее быстрым способом работы с таким объемом данных, является работа с базой данных, то из полученных данных была сформирована SQLite база данных с штрих-кодами продуктов. Данный файл загружается на телефон пользователя и используется для быстрого получения информации. Так как в названии полученного таким способом продукта может находиться бренд, тип или другая информация о продукте, было решено использовать такой же метод формирования названия продукта, как и для распознавания продукта по тексту.
Рис. 11. Пример распознавания штрих-кода
Достоинства такого подхода:
- Высокая точность полученной информации, так как название продукта берется из базы данных
Недостатки:
- Пользователю требуется время, чтобы найти штрих-код на упаковке товара
- Не все продукты имеют штрих-код
2.5. Ручной ввод наименования продукта
И наконец последним методом для добавления продукта является ручной ввод названия продукта. Несмотря на кажущуюся простоту такого подхода по сравнению с предыдущими, пользователю будет необходимо самому вводить название продукта с использованием клавиатуры телефона, что является менее удобным решением по сравнению с вручную написанными списками покупок.
В приложении была добавлена функция автоматического предложения наименования продукта по набранной пользователем части, реализованная через использование компонента AutoCompleteTextView и базы продуктов, полученной из интернета. Это ускоряет процесс ручного ввода названия продукта.
Достоинства такого подхода:
- Позволяет пользователю назвать продукт по своему усмотрению
Недостатки:
- Пользователю нужно набирать текст
Рис. 12. Ручной ввод наименования продукта
2.5. Тестирование работы приложения
Для тестирования разрабатываемого приложение было решено использовать функциональное тестирование, которое включает в себя проверку реализуемости функциональных требований. При тестировании было решено использовать как встроенные в Android Studio эмулятор мобильного устройства с версией Android API 27, так и на реальном мобильном устройстве с версией Android API 26. В таблице 5 представлена информация о результате прохождение системой тестов.
Таблица 5. Список тестов
№ |
Название теста |
Ожидаемый результат |
Полученный результат |
1. |
Просмотр списка рецептов на вкладке «Рецепты» и деталей отдельного рецепта |
Рецепты в списке содержат корректное изображение, автора и название текста. При клике на рецепт открывает страница рецепта. Ингредиенты соответствуют рецепту. Инструкция по приготовлению раскрывается при нажатии на кнопку «Увидеть больше». |
Тест пройден |
2. |
Добавление и удаление рецепта их списка выбранных |
При нажатии на кнопку «Добавить в выбранные» рецепт появляется на вкладке «Выбранные». Удаление рецепта из выбранного рецепта работает корректно |
Тест пройден |
3. |
Добавление продукта с помощью распознавания по виду |
При нажатии на кнопку «По виду» включается камера телефона. При наведении на продукт внизу экрана появляется его название. После нажатия на кнопку «Добавить» это название добавляется в список продуктов |
Тест пройден |
4. |
Добавление продукта с помощью распознавания по тексту |
При нажатии на кнопку «По тексту» включается камера телефона. После наведении камеры на текст и нажатия на кнопку «Распознать» открывается окно с выбором названия продукта. После нажатия на кнопку «Принять» составленное из выбранных слов название добавляется в список продуктов |
Тест пройден |
5. |
Добавление продукта с помощью распознавания по штрих-коду |
При нажатии на кнопку «По штрих-коду» включается камера телефона. При наведении на штрих-код продукта, открывается окно с выбором названия продукта. После нажатия на кнопку «Принять» составленное из выбранных слов название добавляется в список продуктов |
Тест пройден |
6. |
Добавление продукта вручную |
При нажатии на кнопку «Вручную» появляется окно ввода. При введении части названия появляется выпадающий список с корректными названиями продуктов, начинающихся с введенного слова. После нажатия на кнопку «Принять» это название добавляется в список продуктов |
Тест пройден |
7. |
Составление списка покупок |
При нажатии на кнопку «Сгенерировать список» появляется список ингредиентов выбранных рецептов без учета продуктов из вкладки «Продукты». Удаление продукта из списка выполняется успешно. |
Тест пройден |
2.6. Основные трудности разработки приложения
В ходе работы были замечены различные трудности, которые препятствовали разработке и которые нужно упомянуть для анализа возможностей по улучшению работы приложения и его последующей разработке.
Одной из таких трудностей является отсутствие достаточно большой базы данных с маркированными изображениями для тренировки моделей нейронной сети. Так как составление таких баз данных на данный момент имеет ручной характер, то такая возможность существует только у некоторых компанию. Данная трудность была преодолена вводом дополнительных способов распознавания товаров, а также составлением алгоритма тренировки базы данных на основе относительно небольшого количества маркированных вручную фотографий.
Следующим препятствие в разработке описываемого приложения является отсутствие бесплатного API для получения информации о продукте по EAN-13 коду, так как не многие компании, у которых в распоряжении находятся базы данных товаров, готовы предоставить такую возможность.
Также существуют некоторые трудности по имплементации машинного обучения в Android приложение, написанное на языке программирования Java, так как большинство наиболее удобных решений использует язык Python.
2.7. Варианты модернизации приложения
Так как большинство современных приложений сопровождаются поддержкой и постоянным введением нового функционала, то стоит отметить функции, которые могут быть добавлены в разрабатываемое приложение в будущем.
В эпоху Интернета очевидным развитием любого приложения является использование функций предоставляющим различные возможности по взаимодействию с другими людьми, поэтому в приложение для составления списка покупок можно добавить возможность совместной работы некоторых пользователей над составлением списка покупок. Данная функция не только повысит эффективность приложения, но и повысит его актуальность текущим трендами.
Кроме того, добавление удобной кастомизации приложения позволит подстроить функционал приложения под нужды конкретного пользователя, не нагружая при этом его излишним интерфейсом.
И наконец, скорость и точность распознавания продуктов будет постоянно расти в зависимости от количества информации в тренировочном наборе данных нейронных сетей и развитием машинного обучения в мире, что положительно скажется на работе мобильного приложения.
В результате работы над проектом было разработано мобильное приложение для составления списка покупок, соответствующее поставленным требованиям. В приложении были реализована работа с базой данных рецептов, а также добавление продуктов через различные методы распознавания продуктов.
Так как распознавание продуктов по виду работает в основном на продуктах без штрих-кода, например с овощами и фруктами, а распознавание по тексту и штрих-коду получает информацию непосредственно с упаковки или базы данных, то представляется некоторая сложность сравнения точности распознавания данных методов. Однако можно с уверенностью сравнить количество продуктов, для которых могут быть применены данные методы. Метод распознавания продукта по штрих-коду может распознать наибольшее количество продуктов, так как штрих-код имеют практически все товары на прилавках магазинов. Чуть меньше охват продуктов имеет метод распознавания по тексту, однако данное количество будет все равно больше, чем количество продуктов, которое сможет распознать приложение по внешнему виду товара, что связано с количеством изображений и требуемым временем тренировки модели нейронной сети для сопоставимых результатов.
Обратная ситуация получается при сравнении скорости методов. Время засекалось от момента того, как тестовый пользователь нажал на соответствующую кнопку в меню добавления продукта до появления этого продукта в списке. По скорости работы алгоритма наибольшие показатели принадлежат методу распознавания по внешнему виду продукта с помощью машинного обучения (среднее время распознавания – 6 секунд), что связано со скоростью обработки информации моделью нейронной сети. Результат работы метода распознавания продукта по тексту и штрих-коду оказался ниже – в среднем 14 и 15 секунд соответственно.
Данная глава посвящена реализации мобильного приложение на базе операционной системы Android. В главе описана реализация таких методов распознавания продуктов, как:
- Распознавание по виду продуктов с использованием машинного обучения
- Распознавание по тексту на продукте с использованием машинного обучения
- Распознавание продукта по информации полученной с штрих-кода продукта
Наиболее быстрым методом распознавания продукта оказался метод распознавания продукта по внешнему виду, для которого среднее время распознавания составило 6 секунд. Однако данный метод уступает распознаванию по тексту и штрих-коду количеством продуктов, поддающимся распознаванию. Несмотря на это, очевиден потенциал в использовании машинного обучения, при наличии достаточного количество изображений, используемых для тренировки нейронных сети.
Кроме того, в второй главе описана реализация таких компонентов приложения как, список рецептов с поиском нужно рецепта, страница детальной информации о рецепте, а также составление списка покупок на основании всей информации, полученной от пользователя.
Заключение
В данной работе была рассмотрена и проанализирована разработка мобильного приложения, которое поможет составить список продуктов для определенных рецептов на основе информации об имеющихся продуктах, которые могут быть распознаны с помощью возможностей машинного обучения.
В теоретической части была рассмотрена и проанализирована актуальность разрабатываемого приложения, смоделирован основной функционал приложения, а также были исследованы различные аналоги разрабатываемого проекта.
В практической части работы была описан разработка приложения для составления списка имеющихся продуктов. Были реализованы и проанализированы различные методы распознавания продуктов.
Использование приложения для составления списка покупок принесет следующие преимущества:
- Снижение затрат на покупку товаров
- Экономия времени на составление списка покупок
- Учет имеющихся продуктов
Результаты работы показали эффективность использования машинного обучения для распознавания продуктов и потенциале интеграции машинного обучения в мобильные приложения.
Список литературы
- Berndt, A. (2015). Generation Y: the development and use of shopping lists.
- Bossard, L. G. (2014). Food‐101‐Mining discriminative components with random forests. В Computer Vision – ECCV 2014 (стр. 446-461).
- (2018). Brand New World: Exploring the Critical Issues Facing Today's Brands. Field Agent. Получено из https://blog.fieldagent.net/the-science-of-shopping-lists-10-insights-from-a-survey-of-2500
- Felix Heinrichs, D. S. (2011). The hybrid shopping list: Bridging the gap between physical and digital shopping lists.
- Harsha Jayawilal, S. P. (2017). The smart shopping list: An effective mobile solution for grocery list-creation process.
- Inman, J. (2009). The interplay among category characteristics,customer characteristics and customer activities.
- J.R.R. Uijlings, K. v. (2012). Selective Search for Object Recognition. University of Amsterdam, the Netherlands.
- Kollat, W. (1967). Customer Impulse Purchasing Behavior.
- Nancy M. Childs, P. D. (2015). The Digital Grocery Commerce: Insights for Enhancing Consumer Connection with Grocery Shopping Apps.
- Norman, D. (2013). The Design of Everyday Things: Revised and Expanded Edition. Basic Books; Revised edition.
- Thomas, A. G. (2004). Groceryshopping: list and non-list usage. Marketing, Intelligence & Planning.
- UhttBarcodeReference. (20 Май 2020 г.). Получено из GitHub: https://github.com/papyrussolution/UhttBarcodeReference
Диаграмма классов приложения
Рис. 1. Диаграмма классов разрабатываемого приложения
- Внешний и внутренний контроль в организациях (Сущность и смысл контроля)
- Внешний и внутренний контроль в организациях (Контроль: основные понятия, цели, функции)
- Современная система мотивации персонала в организациях (Сущность мотивация персонала организации)
- Методы анализа внешней среды фирмы по К. Фляйшеру и Б. Бенсуссану
- Внешний и внутренний контроль в организациях
- Традиционные организационные структуры (Понятие организационной структуры и ее сущность)
- Современная система мотивации персонала в организациях (Теоретические аспекты исследования мотивации и стимулирования основных концепций труда персонала)
- Корпоративная культура организации: характеристики и особенности формирования в современных условиях.( Теоретические основы формирования и развития корпоративной культуры)
- Теоретические аспекты правовых основ и организации на предприятии
- Разработка Интернет-магазина (Обзор и Анализ предметной области)
- Коммуникационные сети и их разновидности
- Проектирование организационных структур (требования к организационным структурам)