- Android studio сканирование штрих кода
- Creating a Barcode Scanner using Android Studio
- What is this article about
- Prerequisite
- Let’s write some code
- Работа с ML Kit в Android: как распознавать штрихкоды
- Пример работы barcode scanning (Android)
- Возможные трудности
- 1) Realtime
- 2) Адаптация
- 3) CameraX
- Заключение
- Генерируем и сканируем QR/BAR коды
- Русские Блоги
- Zxing интегрирован в Android Studio для реализации функции сканирования QR-кода.
- Есть картинки и правда
- Отсканируйте, чтобы загрузить APK и испытать
- инструкции
Android studio сканирование штрих кода
В народе довольно популярны приложения, умеющие сканировать штрих коды и QR-коды на различных вещах и продуктах и выдающие о них необходимую полезную информацию. В сегодняшнем уроке мы сделаем свое собственное приложение, способное работать с этими замысловатыми кодами. Но наше приложение не будет полностью работающим сканером, написанным лично нами, мы сделаем всего лишь приложение, которое будет использовать для анализа кодов известное на Play Market приложение под названием Barcode Scanner (бесплатное). Наше приложение будет с помощью намерения Intent запускать это упомянутое выше приложение, там будет происходить анализ необходимого кода, а результат анализа будет передаваться назад нашему приложению с помощью метода OnActivityResult, а затем высвечиваться уже в нашем приложении с помощью всплывающего Toast сообщения.
Для начала создаем новый проект, выбираем Blank Activity.
Первым делом создадим пользовательский интерфейс приложения. Он будет состоять из двух кнопок для запуска сканеров штрих кода и QR-кода. При нажатии на кнопки пользователю будет предложено загрузить приложение Barcode Scanner с маркета. Открываем файл activity_main.xml и добавляем туда следующие элементы:
Теперь переходим к работе с кодом. В принципе, ничего нового мы здесь не увидим, все довольно знакомое. Переход на другое приложение с помощью Intent, выполнение alert dialog для предложения пользователю перейти на Play Market для загрузки сканера, метод для обработки результатов программы сканера и получения данных с него OnActivityResult и их вывод в Toast сообщении.
Открываем файл MainActivity.java и добавляем в него следующий, довольно понятный код:
Вот и все, на этом наш сканер готов. Запускаем и проверяем:
Источник
Creating a Barcode Scanner using Android Studio
Step by step guide to building a barcode scanning application using Android Studio.
What is this article about
This article will guide you through creating an android application using which you can make use of your mobile camera to scan a barcode and read the data in them.
Prerequisite
- The latest version of Android Studio installed. ( download from here )
- A mobile device to test the application. (you can make use of the inbuild android emulator but in some pc, it may cause some issues.)
- Knowledge of java or any object-oriented programing language.
Let’s write some code
- Create a new application in android studio and name it Barcode Scanner.
- Open up your app-level Gradle file and add the below dependency there.
3. Now hit on Sync now button and wait for the build to complete. Once the build is complete open up your manifest file and add the necessary permissions.
also, add the metadata field in your manifest file, inside the application tag and above the activity tag.
here’s a full view of my manifest file
4. Now you have set up all the dependency needed for the barcode scanner to work and all the permission necessary. Let’s build the UI for the app.
5. Open your activity_main.xml file and write the below code inside.
Now your view should look something like this
here we have something called a sufaceview in android and a textview field to display the text scanned by the barcode.
SurfaceView: It provides a dedicated drawing surface embedded inside the view hierarchy.
You have completed the UI code for the Barcode App, now let’s write the java code to make wonders happen.
6. Open MainActivity.java file and you will see the following code.
let’s add some code of our own
7. First, we need to bind the views.
8. Now we will write the method to scan the image for a barcode.
this method will help us scan and display the text in the textview we created in the XML file.
9. The complete java code will look something like this.
Now try scanning this barcode and you will see the value that is embedded in the barcode in the textview.
The final screen should something like this.
Источник
Работа с ML Kit в Android: как распознавать штрихкоды
Первую в мире покупку по штрихкоду относят к 26 июня 1974 года – это была упаковка жевательной резинки в одном из супермаркетов США. Считывая информацию со штрихкода, по различным оценкам, можно ускорить операции с товарами в среднем на 30%. Сейчас штрихкоды сканируют и продавцы, и работники склада, и покупатели – например, если они хотят сделать покупку на кассе самообслуживания.
В статье рассмотрим некоторые особенности распознавания штрихкодов с помощью библиотеки ML Kit. Материал может быть полезен как начинающим разработчикам с базовыми навыками, так и опытным специалистам, которые хотят изучить новый инструмент.
ML Kit – это бесплатный мобильный SDK от Google, который позволяет использовать машинное обучение на устройствах с операционными системами Android, iOS и Flutter. В мобильной разработке это, пожалуй, простейший способ для добавления нейронных сетей в приложение. В свою очередь, это позволяет упростить реализацию некоторых функций.
Ключевые возможности ML Kit:
• Распознавание текста (в том числе и рукописного)
• Перевод текста между языками (офлайн)
• Распознавание лиц (и эмоций)
А также менее известные:
• Распознавание поз (определяет местоположение головы)
Такие функции могут быть полезны во многих приложениях, например, в туристических гидах – для перевода вывесок и указателей и вывода информации о достопримечательностях. Как пример, мы однажды участвовали в создании приложения, в котором туристы могли сфотографировать и распознать данные, чтобы не вводить их вручную.
Итак, перейдем к практике работы с ML Kit. В одном из проектов у нашего партнера была потребность заменить библиотеку для сканирования штрихкодов. Ранее заказчик использовал платную библиотеку Scandit и столкнулся с некоторыми ограничениями. На тот момент, в частности, требовалось выводить логотип библиотеки на экран сканирования кодов. Также лицензионное соглашение не исключало возможности того, что производитель может отозвать лицензию. В качестве альтернативного решения команда разработки выбрала ML Kit Barcode scanning.
Пример работы barcode scanning (Android)
Прежде всего, перед началом работы с ML Kit необходимо подключить необходимые библиотеки в gradle:
А также в manifest:
В первом случае все необходимое добавляется в установочный файл, а во втором динамически скачивается. Также в первом случае можно рассчитывать на чуть большую производительность.
Далее необходимо подготовить Detector. Это основной интерфейс в ML Kit, имеющий важнейшие методы process и close:
process производит всю обработку изображений и возвращает результаты, которые зависят от конкретной реализации интерфейса;
с помощью сlose мы высвобождаем занятые ресурсы.
Рассмотрим процесс подготовки BarcodeScanner – одного из наследников Detector:
BarcodeScanning – вариация порождающего паттерна. На вход единственного метода getClient принимает параметры нужного объекта, на выходе выдает экземпляр BarcodeScanner. В свою очередь BarcodeScannerOptions создается через стандартный Builder. В данном случае мы указали, что желаем распознавать только QR коды. Этот подход относится и к остальным функциям ML Kit.
После этого можно использовать данный Detector, ниже простой пример:
Возможные трудности
1) Realtime
Хотя ML Kit достаточно удобен в использовании, мы обнаружили некоторые «подводные камни». Основные вопросы оказались связаны с работой в режиме realtime. Во время реализации проекта у нас не было официальных примеров, поэтому мы изучали неофициальные примеры, и в некоторых из них были ошибки.
Так, первоначально мы рассматривали следующий пример (особенности получения данных с камеры рассмотрим ниже).
Хотя на большинстве устройств этот способ работал, на менее мощных он приводил к переполнению памяти. Так как detector обрабатывает кадры не мгновенно, был риск серьезной утечки памяти. Например, если каждое фото “весит” по 2 мегабайта, а в памяти одновременно находится несколько сотен кадров, это приведет к крашу приложения.
Изучив документацию ImageAnalysis, мы выяснили, что одна из причин вызова imageProxy.close() – необходимость сообщить системе о том, что приложение готово к обработке следующего кадра.
В результате мы изменили код следующим образом:
При такой реализации в памяти всегда находился только один кадр, и проблема с крашем на малопроизводительных устройствах была решена.
2) Адаптация
Также одной из наших задач была адаптация ML Kit к потребностям конкретного проекта. В частности, предыдущая библиотека умела обрабатывать как черно-белые, так и бело-черные штрихкоды. В свою очередь, ML Kit на старте работы негативы не понимал.
Для решения проблемы мы изменили код. Предыдущий вариант:
Новый вариант стал более сложным, с предварительной обработкой:
Здесь мы получали картинку как массив байтов и разделяли ее на позитив и негатив, которые отправляли по отдельности в detector.
3) CameraX
Ещё один баг, с которым мы столкнулись, касался неправильного использования разрешения в CameraX. Мы ставили максимальное разрешение 1920×1080.
Однако, в CameraX на выходе получались дефолтные 320×640. Мы выяснили, что порядок width и height зависит от ориентации, и для “портретного” вывода в нашем случае нужно было следующее:
Заключение
После настройки и внедрения в проект мы убедились, что ML Kit соответствует потребностям приложения и может заменить предыдущую библиотеку. В некоторых случаях платная библиотека была эффективнее, например, на небольшой доле «смазанных» штрихкодов. В свою очередь, библиотека ML Kit полностью бесплатная и не требует добавления своего логотипа на экран сканирования. В результате после тестирования владелец приложения решил полностью перейти на ML Kit.
Спасибо за внимание! Надеемся, что материал был вам полезен.
Источник
Генерируем и сканируем QR/BAR коды
В статье приводится короткий пример, как встроить в своё приложение генератор и/или сканер QR кодов (или штрих-кодов), и тем самым облегчить себе задачу передачи с устройства на устройство коротких объемов информации.
QR-коды пришли на смену устаревшим штрих-кодам (далее вместо ‘Bar code’) и все плотнее входят в нашу жизнь, их используют в десятках различных решений от передачи ссылок на сайт, до сложных систем авторизаций и покупок.
Подробно узнать что такое QR-код можно в подробностях узнать из статьи Читаем QR код
Для выполнения поставленой задачи нам понадобится 2 библиотеки из двух проектов:
- ZBar bar code reader
- ZXing («Zebra Crossing»)
Сканируем QR-коды
Тут есть одна особенность, result = scanner.scanImage(codeImage) иногда возвращет корректный результат, даже когда нет никакого QR-кода перед камерой. То есть, камера иногда распознает что то даже в обычной размытой картинке. Поэтому рекомендую ввести дополнительную проверку на размер прочитанного кода или на соответствие ожидаемому формату.
Генерируем QR-коды
В этом случае уже будут задействованы ресурсы библиотеки ZXing.
Входные парамеры encodeAsBitmap: текст или код для кодирования, стандарт в который мы кодируем, размеры картинки на выходе.
Что на счёт Штрих-кодов?
Сканер понимает все виды штрих-кодов без каких-либо модификаций, из коробки.
Генератор же модифицируется не просто, а очень просто:
в функцию encodeAsBitmap передаем в поле format вместо BarcodeFormat.QR_CODE, что нибудь вроде BarcodeFormat.CODE_128, что будет соответствовать штрих-коду стандарта Code 128
Пару советов напоследок
Имейте ввиду, что работа с камерой может иметь свои особенности на разных платформах
Замечено, что метод
постоянно теряет память (есть Memory Leak) ввиду того что буфер кадра постоянно создается и очищается на каждом новом превью кадре с камеры.
Для того, что бы этого избежать, есть возможность использовать CallbackBuffer для выделения статичного буфера под превью кадры.
Это действительно помогает избавится от утечек памяти и даже увеличивает фрейм-рейт у превью картинки с камеры.
Но!, нашлась модель телефона, которая ни в какую не захотела работать с превью буфером и не факт что не найдутся еще, поэтому оставил в примере более надежный способ.
Генерация штрихкодов имеет ограничения согласно выбранному стандарту: максимальный размер в байтах, разрешенные смиволы и т.д.
Изучите особенности линейных штрикодов, для того что бы обеспечить совместимость отображаемых вами штрих-кодов с магазинными сканерами
Источник
Русские Блоги
Zxing интегрирован в Android Studio для реализации функции сканирования QR-кода.
Однако в указанном выше блоге есть только функция сканирования, и на телефонах с низким разрешением могут возникнуть проблемы с искажением. Скорость сканирования также относительно низкая, функции не очень полные, нет вспышки, генерируется двумерный код, анализируется изображение двухмерного кода и изображение штрих-кода.
В последние несколько дней мне потребовалось некоторое время, чтобы улучшить предыдущий код, в основном для исправления некоторых ошибок, улучшения анализа двумерных изображений кода, изображений штрих-кода и создания двухмерных изображений. код изображения. Flash и т. д. Это также упрощает способ интеграции, вам нужно только добавить зависимость для использования, конкретная диаграмма эффектов выглядит следующим образом.
Есть картинки и правда
1. Обычное сканирование
Отсканировать QR-код
Как вы можете видеть на картинке, отсканированный мной QR-код по-прежнему представляет собой очень сложный QR-код, и скорость распознавания неплохая. Конкретное использование во многом зависит от конфигурации камеры устройства.
Сканирование штрих-кодов (точность не очень высокая, придумайте способы оптимизации позже, ведь сканирование штрих-кодов не очень распространено)
2. Вспышка (если устройство поддерживает вспышку, будет отображаться кнопка вспышки, иначе не будет отображаться)
3. Проанализируйте изображение QR-кода.
4. Анализируйте изображения штрих-кода.
5. Сгенерируйте QR-код (можно добавить логотип).
Отсканируйте, чтобы загрузить APK и испытать
Вы можете скачать APK и сначала испытать его:
Или напрямую отсканируйте и загрузите с помощью браузера, баллы не требуются
инструкции
По сравнению с предыдущей версией, многие шаги упрощены в использовании. Текущая версия должна быть достаточной для повседневного использования. Если вам нужно настроить интерфейс или использовать некоторые функции, вы можете перейти на github, чтобы загрузить демо и напрямую зависеть от moudle в вашем проекте., а затем измените исходный код. Если вы думаете, что это жаргон, не забудьте начать, я продолжу оптимизацию.
Здесь я только представляю использование прямой зависимости.
1. Добавьте зависимости
Добавить в корень build.gradle maven < url 'https://jitpack.io' >
Добавьте зависимость в build.gradle вашего приложения implementation ‘com.github.yuzhiqiang1993:zxing:2.0.0’
Если ваша версия gradle — 2.x, используйте компиляцию вместо реализации.
2. Его можно использовать после добавления зависимости.
Сначала не забудьте подать заявку на разрешение. Первоначально я интегрировал разрешение в библиотеку, но это приведет к первому переходу на страницу сканирования для подачи заявки на разрешение. Оно будет заблокировано до тех пор, пока Подумав об этом, лучше отказаться от разрешений и обработать их самостоятельно, прежде чем переходить к интерфейсу сканирования.
Ниже приведены разрешения, которые необходимо применять динамически.
Перейти к интерфейсу сканирования
Как показано в приведенном ниже коде, вы можете использовать намерение напрямую или можете передать класс ZxingConfig.Этот класс может управлять отображением нижнего макета, воспроизведением звука приглашения и т. Д. Или отсутствием передачи.
Получите проанализированный результат в onActivityResult
Ну так просто реализовать базовое сканирование
Сгенерировать QR-код
Если вам нужно сгенерировать QR-код, вы можете пройти напрямую через CodeCreator.createQRCode(contentEtString, 400, 400, null); Вот и все.
Ладно, вот и все, на нем есть адрес github, если вы думаете, что он работает, начните! Если вы не хотите использовать github, вот демонстрация исходного кода, вы можете скачать, если она вам нужна.
Источник