6. Отображение результата сканирования, включая состав продуктов с сообщением о том, можно данный продукт пользователю или нет.
7. Хранение истории поиска.
8. Предложение разрешенных продуктов из категории, к которой принадлежит выбранный продукт.
1.2 Штрих-код как идентификация продукта
В 1949 году Бернард Силвер и Норман Джозеф Вудланд подали заявку в Патентное ведомство США на признание системы идентификации товаров с использованием штрих-кодов изобретением. В 1952 году патент был получен.
Наиболее распространенным стандартом штрихового кодирования продукции и товаров является в настоящее время система EAN (European Article Number - Европейский Номер Товара), разработанная на основе американской системы UPC (Universal Product Code - Универсальный Код Товаров) [2].
Существует три разновидности кода EAN:
1. EAN-13 - полный код, содержащий 13 цифр.
2. EAN-8 - сокращенный код, содержащий 8 цифр.
3. EAN-128 - расширенный код, содержащий любое количество цифр и букв, объединенных в регламентируемые группы.
Коды EAN-8 и EAN-13 содержат исключительно цифры и никаких букв или других символов. Например, 46028500032632.
Штриховые коды EAN-8 используются для нанесения на изделия малых габаритов, на которых стандартные коды EAN-13 не умещаются, а также при проведении логистических и сортировочных операций с использованием быстродвижущихся конвейеров - сокращенный размер кода на этикетке снижает вероятность его ошибочного считывания.
Формат EAN-128 предназначен для передачи информации о товаре не потребителям, а другим промышленными предприятиями. Число 128 в названии кода означает не его длину, как в кодах EAN-8 и EAN-13, а то, что в нем используется словарь Code-128 и группы кодов, а сама длина не регламентирована. Код может содержать разнообразную информацию, например, код товара, сроки годности, размеры, объём, код партии производителя и т.д.
Далее подробно будет рассмотрен код EAN-13, так как именно он массово используется для маркировки продукции легкой промышленности.
Код EAN-13 состоит из 13 комбинаций штрихов различной ширины, размещенных на различном расстоянии друг от друга. Каждая комбинация шифрует одну из арабских цифр от ноля до девяти (рис.9).
Рисунок 9. Расшифровка линейного штрих-кода
Номер товара по системе EAN-13 имеет следующую структуру:
· первые 2-3 цифры региональный код (префикс) страны, где зарегистрирован данный номер;
· следующие 4-5 цифр - регистрационный номер предприятия в данной стране;
· следующие 3-5 цифр - порядковый номер продукции внутри предприятия;
· последняя 13-я цифра - контрольное число, которое вычисляется из предыдущих двенадцати.
Следует отметить, что коды, начинающиеся с цифры "2" не входят в систему EAN, а предназначены для внутреннего использования отдельными предприятиями. Так, магазин или склад может использовать их для внутреннего пользования при маркировке товаров, не имеющих кода EAN-13. Разумеется, такие коды могут быть не уникальными.
Национальные представительства GS1 имеют право корректировать количество цифр, отводимое на номер предприятие и номер продукции. Главное, чтобы общее количество цифр было равно двенадцати, а полученный штрих-код был уникальным в глобальном масштабе.
Таким образом, штрих-код разумно выбрать в качестве способа идентификации продуктов.
1.3 Доля рынка системы Android
Android используется на самых разных устройствах. Это и смартфоны, и планшеты, и телевизоры, и смарт-часы, и ряд других гаджетов. Операционной системой Android пользуется около 85% владельцев смартфонов по подсчетам за 2017 год, а общее количество пользователей смартфонов на операционной системе Android оценивается в 1,5 млрд. человек по всему миру.
ОС Андроид была создана разработчиком Энди Рубином (Andy Rubin) в качестве операционной системы для мобильных телефонов и поначалу развивалась в рамках компании Android Inc. Но в 2005 году Google купил Android Inc. и начал развивать операционную систему с новой силой. На данный момент последней версией является Android 8.0 Oreo, которая вышла в августе 2017 года [3].
В табл.3 представлена доля рынка, занимаемая версиями android по данным на 2017 год.
Таблица 3
Доля рынка версий Android
|
Версия |
Кодовое имя |
Дата выпуска |
Уровень API |
Доля рынка |
|
|
8.0 |
Oreo |
21 августа 2017 |
26 |
0,3% |
|
|
7.1 |
Nougat |
4 октября 2016 |
25 |
3% |
|
|
7.0 |
Nougat |
22 августа 2016 |
24 |
17,6% |
|
|
6.0 |
Marshmallow |
5 октября 2015 |
23 |
30,9% |
|
|
5.1 |
Lollipop |
9 марта 2015 |
22 |
20,8% |
|
|
5.0 |
Lollipop |
3 ноября 2014 |
21 |
6,4% |
|
|
4.4 |
KitKat |
31 октября 2013 |
19 |
13,8% |
|
|
4.3 |
Jelly Bean |
24 июля 2013 |
18 |
0,9% |
|
|
4.2 |
Jelly Bean |
13 ноября 2012 |
17 |
3,1% |
|
|
4.1 |
Jelly Bean |
9 июля 2012 |
16 |
2,2% |
|
|
4.0 |
Ice Cream Sandwich |
16 декабря 2011 |
15 |
0.5% |
|
|
2.3 |
Gingerbread |
9 февраля 2012 |
10 |
0.5% |
Таким образом, актуальными версиями являются Android Oreo, Nougat, Marshmallow и Android Lollipop, на которые следует ориентироваться.
Архитектура Android
В данном разделе рассматриваются уровни архитектуры, входящие в операционную систему Android с подробным описанием входящих в них компонентов (рис.10) [4].
Рисунок 10. Архитектура Android
1. Applications. На верхнем уровне находится набор базовых приложений, который включает такие приложения как календарь, карты, браузер, менеджер контактов и другие.
2. Application Framework. Выступает в роли каркаса приложений. Через него разработчики имеют возможность получить доступ к API компонентов системы, которые лежат на уровне ниже.
3. Libraries. На этом уровне находится набор C/C++ библиотек, которые используются различными компонентами системы. Доступ к этим возможностям разработчики могут получить в контексте применения Android Aplication Framework.
4. Android Runtime - среда выполнения. Основными составляющими которой являются набор библиотек ядра и виртуальная машина.
5. Linux Kernel. Ядро Android основано на Linux версии 2.6.
В данной работе используются первые два слоя.
Структура Android-приложения
Независимо от сложности приложения, структура всегда будет одинаковой. Существуют обязательные и опциональные элементы приложения. Табл.4 описывает составляющие Android-приложения [4].
Таблица 4
Составляющие структуры Android-приложений
|
Название |
Описание |
Необходимость |
|
|
gen |
Файлы, сгенерированные самой Java. |
Да |
|
|
AndroidManifest.xml |
Файл манифеста AndroidManifest.xml предоставляет системе основную информацию о программе. У каждого приложения свой файл манифеста |
Да |
|
|
src |
Каталог содержащий исходны код приложения |
Да |
|
|
assets |
Произвольное собрание каталогов и файлов |
Нет |
|
|
res |
Каталог, который содержит ресурсы приложения. В данном каталоге могут находиться подпапки drawable, anim, layout, menu, values, xml и raw |
Да |
1.4 Компоненты Android-приложения
Компоненты Android-приложения можно отнести к одному из четырех типов: Activity, Service, Content Provider, Broadcast Receiver.
Activity - представляет собой один экран с которым пользователи могут взаимодействовать для выполнения каких-либо действий. Для реализации пользовательского интерфейса операции используется иерархия представлений -- объектов, полученных из класса View. Каждое представление отвечает за определенную прямоугольную область окна операции и может реагировать на действия пользователей.
Service - представляет собой компонент, работающий в фоновом режиме, который выполняет длительные операции, связанные с работой удаленных процессов.
Content provider - управляет доступом к структурированному набору данных. Он инкапсулируют данные и предоставляют механизмы обеспечения их безопасности. Поставщики контента представляют собой стандартный интерфейс для объединения данных в одном процессе с кодом, который выполняется в другом процессе.
Broadcast Receiver - представляет собой компонент, который реагирует на сообщения распространяемые по всей системе.
Компоненты трех из четырех возможных типов - Activity, Service, Content provider - активируются асинхронным сообщением, которое называется Intent (намерение). Intent создается с помощью объекта Intent, который описывает запрос на активацию либо конкретного компонента, либо компонента конкретного типа - соответственно, намерение Intent может быть явным или неявным [5].
Жизненные циклы
Объекты Activity, fragment, service обладают определенным жизненным циклом внутри Android. На рис.11 ниже можно увидеть пути, которые Activity может пройти между состояниями. Прямоугольниками обозначены методы обратного вызова, которые можно реализовать для выполнения действий между переходами операции из одного состояния в другое.
Рисунок 11. Жизненный цикл Activity [5]
При разработке приложения необходимо учитывать эти этапы для корректной работы приложения.
1.5 Подходы к распознаванию штрих-кодов с использованием средств Android
Так как в качестве средства идентификации товаров будет использоваться штрих-код далее необходимо рассмотреть способы его распознавания на платформе Android.
Существует три популярных библиотеки сканирования штрих-кода для разработки Android приложений. Выбор библиотеки для проекта требует знания относительных сильных и слабых сторон этих библиотек (ZXing, ZBar и Mobile Vision API).
А. ZXing
Сканер штрих-кода Zxing представляет собой сканер штрих-кода с открытым исходным кодом [6]. ZXing - самая старая из этих трех, это хорошо поддерживаемая библиотека. Это проект Google с 2007 года и по-прежнему получает регулярные обновления. Проект состоит из базовой библиотеки Java, которая обрабатывает декодирование для всех платформ и множество приложений для платформы (включая Android, Glass, Java SE и Интернет). ZXing обеспечивает достаточно быстрое и точное сканирование штрих-кодов [7].
С другой стороны, его сложно интегрировать. Некоторые пользователи уже имеют установленное приложение ZXing, поэтому можно просто передать ему код и дождаться результата. Если это приложение недоступно для пользователя, то будет предложено его загрузить. Еще одна проблема с ZXing заключается в том, что она поддерживает только штрих-коды сканирования, которые находятся в той же ориентации, что и камера.
B. Zbar
ZBar - это программный пакет с открытым исходным кодом для чтения штрих-кодов из разных источников, таких как потоки видео, файлы изображений. Он поддерживает множество популярных типов штрих-кодов. Гибкая, многоуровневая реализация облегчает сканирование штрихового кода и декодирование для любого приложения [8].
ZBar невероятно быстро обнаруживает штрих-коды и обнаруживает штрих-код в другой ориентации. Как и ZXing, ZBar состоит из базового кроссплатформенного детектора штрих-кода и библиотек для платформы, использующих детектор. В отличие от ZXing, ZBar легко интегрируется. Он существует как настоящая Android-библиотека и захватывает API-интерфейсы камеры без особых проблем.
К сожалению, ZBar больше не поддерживается. Последний комит был в начале 2012 года. ZBar также имеет недостаточно документации. Также есть существенная проблема для пользователей. Похоже, ZBar слишком быстро обнаруживает штрих-коды. Скорость сказывается на качестве. Время от времени обнаруживается штрих-код, но декодируется неправильный номер. Поскольку пользователи полагаются на сканер для определения, низкая точность является серьезной проблемой.
C. Mobile Vision API
API сканера штрих-кода обнаруживает штрих-коды в реальном времени в любой ориентации. Пользователи могут получить быстрый и точный результат. Пользователи также могут одновременно обнаруживать и анализировать несколько штрих-кодов в разных форматах.
Классы для обнаружения и разбора штрих-кодов доступны в пространстве имен com.google.android.gms.vision.barcode. Тип штрих-кода представляет собой один признанный штрих-код и его значение. В случае 1D штрих-кода, такого как UPC-коды, это будет просто номер, который закодирован в штриховом коде [9].
Однако, все же есть некоторые ограничения. Функция сканирования основного штрих-кода - это собственная библиотека, которую API Mobile Vision необходимо загрузить на устройство. Библиотека Mobile Vision даже не пытается загрузить собственную библиотеку, если пользовательское устройство сообщает, что памяти недостаточно. Низкий объем памяти может означать, что до 10% свободного пространства пользователя по-прежнему свободны. Библиотека не дает хорошей обратной связи разработчику, что это происходит.
Табл.5 показывает достоинства и недостатки описанных библиотек:
Таблица 5
Сравнение библиотек
|
Достоинства |
Недостатки |
||
|
ZXing |
Качественная документация, по-прежнему поддерживается, быстро обнаруживает штрих-код, верно распознает. |
Сложна для интеграции, камера должна находиться в одной ориентации со штрих-кодом |
|
|
Zbar |
Очень быстро обнаруживает штрих-код, легко интегрируется, обнаруживает в различных ориентациях |
Слабое качество распознавания, документация практически отсутствует. |
|
|
Mobile Vision API |
Быстро обнаруживает и качественно распознает в различных ориентациях. |
Использует собственную библиотеку, загрузка которой не будет осуществлена, если память устройства менее 10% |