Как создать приложение для считывания штрих-кода на андроид
[wpanchor этом уроке научимся создавать приложение для чтения штрих-кодов и QR-кодов с использованием стандартной библиотеки Mobile Vision API.
Еще с выпуском Google Play services версии 7.8 разработчики добавили интерфейсы Mobile Vision, которые обеспечивают API для обнаружения штрих-кода. Они считывают и декодируют множество различных типов штрих-кодов, быстро, легко и локально.
Классы для обнаружения и анализа штрих-кодов доступны в пространстве имен com.google.android.gms.vision.barcode. Основной рабочей лошадкой является класс BarcodeDetector. Он выполняет обработку объектов Frame и возвращает массив штрих-кодов SparseArray .
Тип Barcode представляет собой единый общепризнанный штрих-код и его значение. В случае 1D штрих-кодов, таких как коды UPC, это будет просто номер, который закодирован в штрих-коде. Его значение доступно в поле rawValue, в то время как тип штрих-кода (то есть его кодировку) можно найти в поле format.
Для 2D штрих-кодов, которые содержат структурированные данные, такие как QR-коды — в поле valueFormat устанавливается определенный тип значения, соответствующего полю данных. Так, например, если обнаружен тип URL , то поле valueFormat вернет константу URL, а объект Barcode.UrlBookmark будет содержать значение URL-адреса. Помимо URL-адресов, существует множество различных типов данных, которые QR-код может хранить. Например, почтовый адрес, дату и время события календаря, мероприятие в календаре, информацию контакта, номер телефона, местоположение на карте и другие данные, полный список которых приводится в документации. Ссылки на документацию здесь.
Использование в приложении Mobile Vision API позволяет считывать штрих-коды в любом положении.
Важно отметить, что синтаксический разбор всех штрих-кодов выполняется локально, поэтому вам не нужно использовать соединение с сервером для чтения данных из кода. Например, при считывании линейного штрих-кода PDF-417, который может вместить до 1 КБ текста, можно сразу же получить всю закодированную в нем информацию.
Итак, для разработки приложения нам понадобится:
- Среда разработки Android Studio
- Смартфон на Android 4.2.2 или более поздней версии
- Последняя версия Android SDK, включая компонент SDK tools. Вы можете получить его с помощью Android SDK Manager в Android Studio.
- Google Play Services SDK. Вы можете получить его также в Android SDK Manager в Android Studio.
Создаем новый проект в Android Studio. При создании выбираем шаблон Empty Activity.
На следующем шаге нужно убедиться, что ваше приложение может использовать службы Google Play, в состав которых входит Mobile Vision API. Для этого нужно обновить файл build.gradle вашего проекта.
В секции зависимостей должны быть такие строки. Обновите Gradle при необходимости.
Службы Google Play часто обновляются, и чтобы получить последнюю версию, в Android Studio выберите инструменты > Android > SDK Manager.
Затем найдите строчку для сервисов Google Play и убедитесь, что у вас установлена версия 26 и выше. Если нет — установите компонент.
Теперь создадим пользовательский интерфейс.
В Android Studio выберите папку «res» и откройте ее вложенную папку «layout». Здесь вы увидите «activity_main.xml». Откройте его в редакторе макетов.
Вы можете видеть, что ваш макет содержит текстовое поле
. Нужно изменить макет, как показано ниже. Теперь здесь будет кроме текстового поля также кнопка и изображение. Для всех экранных компонентов прописываем идентификаторы, чтобы потом обращаться к ним в коде.
По нажатию на кнопку будет происходить загрузка и обработка изображения штрих-кода, которое будет отображаться в ImageView. После завершения обработки штрих-кода информация, считанная из него, будет отображаться в TextView.
Обычно приложения для считывания штрих-кодов получают изображение с камеры устройства, или обрабатывают превью камеры. Для реализации этого потребуется достаточно много кода, и в конце урока я покажу пример реализации такого приложения. Чтобы упростить этот пример, мы обработаем готовое изображение qr-кода, которое уже присутствует в вашем приложении.
Вот пример изображения qr-кода, которое вы можете скачать отсюда.
Назовите его qr.png и добавьте в папку проекта res/drawable.Android Studio обеспечит доступ к файлу в качестве ресурса с идентификатором: R.drawable.qr
Теперь перейдем к написанию кода приложения.
В файле MainActivity.java в методе onCreate добавьте следующий код.
Это настраивает обработчик событий (onClick), срабатывающий когда пользователь нажимает кнопку. Остальной код напишем в методе onClick.
Начнем с загрузки изображения штрих-кода. Сначала находим ImageView по идентификатору. Затем используется BitMapFactory для декодирования ресурса R.drawable.qr в растровое изображение. Полученное растровое изображение передаем ImageView.
Далее создаем экземпляр класса BarcodeDetector, используя Builder и настраиваем его на поиск QR-кодов и матрицы данных (есть много других типов штрих-кодов, которые он мог бы найти).
Вполне возможно, что первый раз наш детектор штрих-код сработает, когда служба Google Play еще не будет готова для обработки штрих-кодов. Поэтому мы должны проверить, что наш детектор работает, прежде чем использовать его. Если нет, нам придется ждать окончания загрузки или сообщить пользователям, что нужно найти подключение к Интернету или освободить место на устройстве. Прежде чем мы обратимся к текстовому полю, нужно объявить и найти его выше в методе onCreate.
Теперь допишем метод вывода сообщения.
Теперь, когда наш детектор создан и мы знаем, что он работает, создаем кадр из растрового изображения и передаем его детектору. Тот возвращает нам массив штрих-кодов SparseArray.
Обратите внимание, что Mobile Vision API способен обнаруживать несколько штрих-кодов в одном кадре. В этом случае массив SparseArray будет заполнен несколькими записями.
Обычно на этом этапе нужно пробежать по массиву SparseArray и обработать каждый штрих-код отдельно. Нужно предусмотреть возможность, что штрих-кодов может быть несколько, или ни одного. В нашем случае мы знаем, что у нас есть только 1 штрих-код, и можем прописать жесткий код для него. Для этого мы берем штрих-код, называемый «thisCode», который будет первым элементом в массиве. Затем присваиваем значение его поля rawValue текстовому полю textView — и все.
Теперь все, что вам нужно сделать, это запустить приложение.
Запускать лучше на реальном устройстве. На эмуляторе работать не будет, потому что на эмуляторах по умолчанию отсутствует сервис Google Play.
Вот приложение запустилось на устройстве, жмем кнопку. Если вы используете изображение штрих-кода qr.png, вы увидите в текстовом поле данные, закодированные в QR-код — это адрес нашего сайта fandroid.info.
Это был простой пример приложения, демонстрирующий работу Mobile Vision API. Но полноценный сканер штрих-кодов должен получать изображение с камеры устройства, или обрабатывать превью камеры.
Разработчики подготовили пример такого приложения на Github, вы можете скачать его код по ссылке.
Клонируйте или скачайте проект, и откройте в Android Studio модуль barcode-reader.
При запуске приложения из этого проекта мы можем увидеть, как оно работает. Первоначально открывается стартовый экран, на котором можно включить автофокус или вспышку. Кнопка считывания штрих-кода запускает камеру. Приложение отслеживает появление штрих-кодов на превью и рисует рамки на обнаруженных штрих-кодах. При нажатии на область обнаруженного штрих-кода превью закрывается, передавая при этом данные обнаруженного штрих-кода в текстовое поле на стартовом экране. Подробнее смотрите в видео.
Это приложение также использует Mobile Vision API. Но при рассмотрении проекта в Android Studio можно увидеть, что кода здесь побольше, чем в нашем простом примере.
Приложение состоит из восьми классов. Три из них отвечают за интерфейс и работу с камерой.
- Класс CameraSource предоставляет управление камерой для получения предварительного просмотра.
- Класс CameraSourcePreview отвечает за отображение превью на экране.
- Класс GraphicOverlay отображает графические объекты поверх связанного предварительного просмотра камеры.
- Класс MainActivity отображает стартовое окно с настройками и кнопкой запуска сканирования, и получает данные штрих-кода для размещения в TextView.
- Класс BarcodeTrackerFactory реализует паттерн «Фабрика» и используется для создания трекеров штрих-кода — по одному для каждого штрих-кода.
- Класс BarcodeGraphicTracker это трекер, который используется для обнаружения штрих-кодов на экране, и их отслеживания для наложения графики, а также удаления графики, когда штрих-код покидает зону видимости.
- Класс BarcodeGraphic используется для отрисовки экземпляра накладываемого на штрих-код изображения с учетом его положения, размера и идентификатора.
- Класс BarcodeCaptureActivity — это активити, которое запускается при нажатии кнопки считывания штрих-кода в стартовом окне приложения. Это активити отображает превью камеры и определяет штрих-коды на нем, выполнzет их считывание и наложение графических рамок на каждый штрих-код с помощью вышеперечисленных классов.
Я не буду в рамках этого урока углубляться в более подробное объяснение кода от разработчиков, а оставлю это вам в качестве домашнего задания. Тем более что код прекрасно документирован, каждый класс и метод содержит комментарии на английском языке. Читать и разбираться в таком коде очень полезно, особенно начинающему разработчику.
Источник
Python — cоздание и считывание QR кода
QR код является в настоящее время распространенным способом хранение информации, как на реальных объектах так и в виртуальной среде, например сканированием штрих кода можно оплатить покупку или перейти на интересующий сайт. Данную возможность можно реализовать в Python , используя Opencv, имеющий встроенную функцию для считывания информации, и библиотеки qrcode. Для начала установим соответствующие пакеты:
pip3 install opencv-python qrcode
import qrcode # импотируем модуль
string = «https://myrusakov.ru» # строка для перевода в QR
file = «myrusakov_out.jpg» # файл для хранения полученного штрих кода
image = qrcode.make(string) # метод отвечает за преобразование строки в QR
image.save(file) # сохранение полученного объекта в файл myrusakov_out.jpg
При этом в QR коде можно закодировать достаточно длинную строку, размеры которой все же ограничены. Нас же пока что интересует хранение адресной строки сайта, и последующее считывание данных. Следует отметить что для считывания кода в программной области существует множество инструментов, мы же используем Opencv, как наиболее удобный для нас, в виду возможности интеграции с веб камерой компьютера, или видеопотоком. Для корректного исполнения кода, изображение с QR кодом следует держать одной папке с нашим скриптом. Следующий скрипт выводит декодированную строку.
import cv2 # импорт модуля из библиотеки Opencv
import numpy as np # модуль обработки массивов
import sys # системный модуль
import time
# Первый блок проверяет условие, передан ли скрипту в командной строке дополнительный аргумент в виде картинки **QR кода**. Если первое условие ложно, то считывается указанная нами картинка.
if len(sys.argv)>1:
inputImage = cv2.imread(sys.argv[1])
else:
inputImage = cv2.imread(«myrusakov_out.jpg») # стандартный метод opencv для считывания изображения
# Создание функции выводящей в отдельном окне изображение QR с синим обрамлением.
def display(im, bbox):
for j in range(n):
cv2.line(im, tuple(bbox[j][0]), tuple(bbox[ (j+1) % n][0]), (255,0,0), 3)
# Display results
cv2.imshow(«Results», im)
# В Opencv имеется встроенный метод детектор QR
qrDecoder = cv2.QRCodeDetector() # создание объекта детектора
# Нахождение и декодирование нашего кода. Метод **detectAndDecode** возвращает кортеж из трех значений которыми кодируется QR, где первый аргумент data содержит декодированную строку, bbox — координаты вершин нашего изображения и rectifiedImage, содержит **QR** изображение в виде массива пикселей.
data, bbox, rectifiedImage = qrDecoder.detectAndDecode(inputImage)
print(«Decoded Data : <>«.format(data)) # вывод декодированной строки
#cv2.imshow(«Rectified QRCode», rectifiedImage);
print(«QR Code not detected»)
Таким образом, в данной статье мы научились программно создавать QR код из исходных данных, а также расшифровывать его.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Источник
Android SDK: создание сканера штрих-кода
В этом руководстве мы будем использовать библиотеку ZXing (Zebra Crossing) для сканирования штрих-кодов в приложении Android. Мы будем обращаться к ресурсам этой библиотеки с открытым исходным кодом в нашем приложении, получая и обрабатывая возвращенные результаты.
Поскольку мы используем библиотеку ZXing , нам не нужно беспокоиться о пользователях без установленного сканера штрих-кода, потому что предоставленные классы интеграции позаботятся об этом за нас. Импортируя классы интеграции ZXing в наше приложение, мы можем упростить сканирование пользователей и сосредоточить наши усилия на разработке на обработке результатов сканирования. В следующем выпуске серии мы разработаем приложение для сканирования книг, в котором мы будем использовать приложение, созданное в этом руководстве. Мы также добавим поддержку API Google Книг, чтобы мы могли отображать информацию о отсканированных книгах.
Премиум-вариант: QR-код и считыватель штрих-кодов
Если вы ищете ярлык, вы можете найти несколько готовых QR-кодов и считывателей штрих-кодов для приложений Android на Envato Market.
Например, QR-Code & Barcode Reader использует камеру мобильного устройства для считывания штрих-кодов и QR-кодов.
Программа автоматически распознает тип закодированных данных, обеспечивая приятный предварительный просмотр и различные параметры обмена. Он добавит новый контакт, если QR-код является визитной карточкой, или отправит SMS или позвонит кому-либо, в зависимости от закодированных данных. Выбор поисковой системы идеально подходит для поиска товаров в Интернете, сравнения цен и обзоров.
Функции автоматизации, такие как режим массового сканирования или автоматическое действие, открывают широкие возможности для интеграции предприятия. Для компиляции проекта требуется библиотека сканирования штрих-кодов с открытым исходным кодом zBar, которая, как утверждается, является самой быстрой среди других доступных на рынке и включена здесь.
QR-код и считыватель штрих-кодов на Envato Market
Вы можете найти в Envato Market другие варианты, чтобы помочь вам, или получить приложение для Android, разработанное в Envato Studio. В противном случае, читайте подробные пошаговые инструкции по созданию считывателя штрих-кода самостоятельно.
1. Создайте новый проект Android
Шаг 1
В Eclipse создайте новый проект Android. Введите выбранное вами приложение, проект и имена пакетов. Позвольте Eclipse создать для вас пустое мероприятие с именем по вашему выбору как для занятия, так и для его макета.
Шаг 2
Откройте ваш основной файл макета. С настройками по умолчанию Eclipse начинает макет с объекта Relative Layout , который вы можете оставить как есть. Внутри него замените существующий контент (обычно текстовое представление ) кнопкой.
После кнопки добавьте два текстовых представления, в которые мы выведем информацию о сканировании.
Добавьте текстовую строку кнопки в ваш XML-файл » res / values / strings «.
Пользователь нажимает кнопку для сканирования. Когда приложение получает результат от операции сканирования штрих-кода, оно отображает данные содержимого сканирования и имя формата в двух текстовых представлениях .
2. Добавьте ZXing к вашему проекту
Шаг 1
ZXing — это библиотека с открытым исходным кодом, которая предоставляет доступ к проверенному и функциональному сканированию штрих-кода на Android. Многие пользователи уже установили приложение на своих устройствах, поэтому вы можете просто запустить сканирование Intents и получить результаты. В этом уроке мы будем использовать метод « Сканирование через намерение», чтобы упростить сканирование. Этот метод включает импорт нескольких классов в ваше приложение и позволяет ZXing позаботиться о случаях, когда у пользователя не установлен сканер. Если у пользователя не установлен сканер штрих-кода, ему будет предложено загрузить его.
Совет: Поскольку ZXing является открытым исходным кодом, вы можете полностью импортировать исходный код в свои проекты. Тем не менее, это действительно целесообразно, только если вам нужно внести изменения в его функциональность. Вы также можете скомпилировать проект и включить его JAR-файл в свои собственные приложения, если хотите. В большинстве случаев использование сканирования через намерение — это надежный и простой в реализации вариант, плюс ваши пользователи будут иметь доступ к самой последней версии приложения ZXing.
В Eclipse добавьте новый пакет в свой проект, щелкнув правой кнопкой мыши папку « src », выбрав « Новый », затем « Пакет » и введя « com.google.zxing.integration.android » в качестве имени пакета.
Шаг 2
Eclipse предлагает несколько способов импортировать существующий код в ваши проекты. Для целей данного руководства вам, вероятно, будет проще всего создать два обязательных класса и скопировать код из ZXing. Щелкните правой кнопкой мыши новый пакет, выберите « Новый », затем « Класс » и введите « IntentIntegrator » в качестве имени класса. Вы можете оставить другие настройки по умолчанию такими, какие они есть. Создав этот класс, сделайте то же самое для другого класса, который мы будем импортировать, указав ему « IntentResult » в качестве имени класса.
Скопируйте код из обоих классов в библиотеке ZXing и вставьте его в созданные вами файлы классов. Это IntentIntegrator и IntentResult . Обратитесь к загрузке исходного кода, если у вас есть какие-либо сомнения относительно того, где должны быть различные файлы и папки или что в них должно быть.
Источник