Первую в мире покупку по штрихкоду относят к 26 июня 1974 года – это была упаковка жевательной резинки в одном из супермаркетов США. Считывая информацию со штрихкода, по различным оценкам, можно ускорить операции с товарами в среднем на 30%. Сейчас штрихкоды сканируют и продавцы, и работники склада, и покупатели – например, если они хотят сделать покупку на кассе самообслуживания.
В статье рассмотрим некоторые особенности распознавания штрихкодов с помощью библиотеки ML Kit. Материал может быть полезен как начинающим разработчикам с базовыми навыками, так и опытным специалистам, которые хотят изучить новый инструмент.
ML Kit – это бесплатный мобильный SDK от Google, который позволяет использовать машинное обучение на устройствах с операционными системами Android, iOS и Flutter. В мобильной разработке это, пожалуй, простейший способ для добавления нейронных сетей в приложение. В свою очередь, это позволяет упростить реализацию некоторых функций.
Галилео. Штрих-код 🛍 Barcode
Ключевые возможности ML Kit:
• Распознавание текста (в том числе и рукописного)
• Перевод текста между языками (офлайн)
• Распознавание лиц (и эмоций)
А также менее известные:
• Распознавание поз (определяет местоположение головы)
Такие функции могут быть полезны во многих приложениях, например, в туристических гидах – для перевода вывесок и указателей и вывода информации о достопримечательностях. Как пример, мы однажды участвовали в создании приложения, в котором туристы могли сфотографировать и распознать данные, чтобы не вводить их вручную.
Итак, перейдем к практике работы с ML Kit. В одном из проектов у нашего партнера была потребность заменить библиотеку для сканирования штрихкодов. Ранее заказчик использовал платную библиотеку Scandit и столкнулся с некоторыми ограничениями. На тот момент, в частности, требовалось выводить логотип библиотеки на экран сканирования кодов.
Также лицензионное соглашение не исключало возможности того, что производитель может отозвать лицензию. В качестве альтернативного решения команда разработки выбрала ML Kit Barcode scanning.
Пример работы barcode scanning (Android)
Прежде всего, перед началом работы с ML Kit необходимо подключить необходимые библиотеки в gradle:
implementation ‘com.google.mlkit:barcode-scanning:17.0.0’
implementation ‘com.google.android.gms:play-services-mlkit-barcode-scanning:16.2.1’
А также в manifest:
В первом случае все необходимое добавляется в установочный файл, а во втором динамически скачивается. Также в первом случае можно рассчитывать на чуть большую производительность.
Далее необходимо подготовить Detector. Это основной интерфейс в ML Kit, имеющий важнейшие методы process и close:
- process производит всю обработку изображений и возвращает результаты, которые зависят от конкретной реализации интерфейса;
- с помощью сlose мы высвобождаем занятые ресурсы.
Рассмотрим процесс подготовки BarcodeScanner – одного из наследников Detector:
❌Штрихкод не читается? Проверяем этикетку WILDBERRIES. BARCODE для Андроида. 🛍Адреса СЦ WBPartners.
val detector = BarcodeScanning.getClient( BarcodeScannerOptions.Builder() .setBarcodeFormats(Barcode.FORMAT_QR_CODE) .build() )
BarcodeScanning – вариация порождающего паттерна. На вход единственного метода getClient принимает параметры нужного объекта, на выходе выдает экземпляр BarcodeScanner. В свою очередь BarcodeScannerOptions создается через стандартный Builder. В данном случае мы указали, что желаем распознавать только QR коды.
Этот подход относится и к остальным функциям ML Kit.
После этого можно использовать данный Detector, ниже простой пример:
detector.process(image).addOnSuccessListener < barcodes ->barcodes.firstOrNull()?.let < Toast.makeText(context, it.rawValue, Toast.LENGTH_SHORT).show() >>
Возможные трудности
1) Realtime
Хотя ML Kit достаточно удобен в использовании, мы обнаружили некоторые «подводные камни». Основные вопросы оказались связаны с работой в режиме realtime.
Во время реализации проекта у нас не было официальных примеров, поэтому мы изучали неофициальные примеры, и в некоторых из них были ошибки.
Так, первоначально мы рассматривали следующий пример (особенности получения данных с камеры рассмотрим ниже).
Хотя на большинстве устройств этот способ работал, на менее мощных он приводил к переполнению памяти. Так как detector обрабатывает кадры не мгновенно, был риск серьезной утечки памяти. Например, если каждое фото “весит” по 2 мегабайта, а в памяти одновременно находится несколько сотен кадров, это приведет к крашу приложения.
Изучив документацию ImageAnalysis, мы выяснили, что одна из причин вызова imageProxy.close() – необходимость сообщить системе о том, что приложение готово к обработке следующего кадра.
В результате мы изменили код следующим образом:
При такой реализации в памяти всегда находился только один кадр, и проблема с крашем на малопроизводительных устройствах была решена.
2) Адаптация
Также одной из наших задач была адаптация ML Kit к потребностям конкретного проекта. В частности, предыдущая библиотека умела обрабатывать как черно-белые, так и бело-черные штрихкоды. В свою очередь, ML Kit на старте работы негативы не понимал.
Для решения проблемы мы изменили код. Предыдущий вариант:
InputImage.fromMediaImage(imageProxy.image. imageProxy.imageInfo.rotationDegrees)
Новый вариант стал более сложным, с предварительной обработкой:
private fun getByteDataFromImage(image: Image): ByteArray? < var data: ByteArray? = null val planes: Array= image.planes if (planes.isNotEmpty()) < val buffer: ByteBuffer = planes[0].buffer data = ByteArray(buffer.remaining()) buffer.get(data) >return data > getByteDataFromImage(image)?.let < byteArray ->processImage(byteArray, imageProxy) val inverted = ByteArray(byteArray.size) byteArray.forEachIndexed < index, byte ->inverted[index] = byte.inv() > processImage(inverted, imageProxy) >
Здесь мы получали картинку как массив байтов и разделяли ее на позитив и негатив, которые отправляли по отдельности в detector.
3) CameraX
Ещё один баг, с которым мы столкнулись, касался неправильного использования разрешения в CameraX. Мы ставили максимальное разрешение 1920×1080.
val camProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_1080P) analysisBuilder.setTargetResolution(Size(camProfile.videoFrameWidth, camProfile.videoFrameHeight))
Однако, в CameraX на выходе получались дефолтные 320×640. Мы выяснили, что порядок width и height зависит от ориентации, и для “портретного” вывода в нашем случае нужно было следующее:
val camProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_1080P) analysisBuilder.setTargetResolution(Size(camProfile.videoFrameHeight, camProfile.videoFrameWidth))
После настройки и внедрения в проект мы убедились, что ML Kit соответствует потребностям приложения и может заменить предыдущую библиотеку. В некоторых случаях платная библиотека была эффективнее, например, на небольшой доле «смазанных» штрихкодов. В свою очередь, библиотека ML Kit полностью бесплатная и не требует добавления своего логотипа на экран сканирования. В результате после тестирования владелец приложения решил полностью перейти на ML Kit.
Спасибо за внимание! Надеемся, что материал был вам полезен.
- Блог компании SimbirSoft
- Разработка мобильных приложений
- Разработка под Android
Источник: habr.com
Что такое сканер штрих кодов и как им пользоваться?
Сканер штрих-кодов — это прибор, который считывает штрих-коды с упаковок товара и передает информацию на другое устройство. Считыватель можно подключить к POS-системе, компьютеру, контрольно-кассовому терминалу. Мы расскажем вам, как работают считыватели, как подключить новое устройство к компьютеру.
Что такое сканер штрих кода?
На упаковке каждого товара есть штрих-код. В нем зашифровано наименование товара, сведения о производителе и другие данные. Чтобы читать зашифрованную информацию, нужно считывать коды специальным прибором.
Светодиодные и лазерные модели работают по одному принципу. Устройство генерирует световой или лазерный луч. Когда луч попадает на этикетку со штрихкодом, он отражается от поверхности. Отражение попадает на светочувствительную матрицу. Программа расшифровывает отражение и передает информацию на базовое устройство.
У фотосканеров есть встроенная камера. Они фотографируют штрихкод в высоком разрешении. Программа расшифровывает данные с фотографии. Фотосканеры отличаются высокой скоростью и точностью расшифровки данных. Считывание одной этикетки проводится за доли секунды.
Зачем нужен сканер штрих-кода?
Считыватель штрихкодов ускоряет продажу или учет товара. Сотрудникам магазина или склада не нужно вручную вводить данные с упаковки товара. Двумерные коды (DataMatrix, QR и др.) можно расшифровать только специальным устройством. Для этой цели применяется 2D считыватель.
Для чего нужен сканер штрих кодов:
- идентификация товара при продаже на кассе;
- быстрое проведение инвентаризации на складе;
- работа с обязательной маркировкой товаров;
- быстрый поиск остатков по каждой позиции;
- ускорение работы персонала;
- минимизация ошибок при работе.
Работать с маркированными товарами невозможно без считывателя штрихкодов. Для контроля за оборотом некоторых товаров введена система маркировки «Честный Знак». На товары, которые подлежат маркировке, наносится двумерный штрих-код. Участники рынка обязаны считывать эти коды на каждом этапе движения товара: с начала оборота до продажи конечному покупателю.
Как работает сканер штрих кодов?
Устройство считывает код с упаковки товара и передает информацию на ККМ, в POS систему, на компьютер или ноутбук. Расшифрованные данные отображаются на дисплее внешнего аппарата.
Считыватели MERTECH совместимы с:
- ККМ популярных брендов (Эвотор, АТОЛ, Штрих, Пионер, МТС и т.д.).
- Компьютерами и ноутбуками с операционной системой Windows.
- Программами для товарного учета от компании 1С.
- ЕГАИС и системой «Честный Знак».
В каталоге MERTECH есть проводные сканеры с USB портом и беспроводные модели, которые подключаются по Bluetooth. У некоторых беспроводных моделей есть подставка для работы в стационарном режиме. Большинство беспроводных моделей имеют несколько интерфейсов: USB COM и USB HID, RS-232.
Как выбрать считыватель штриховых кодов?
Беспроводные модели применяются в торговле и логистике. Работать с ними можно в любой точке склада и торгового зала. Движения персонала не ограничены длиной провода. Корпус защищен от удара при падении.
У беспроводных моделей есть память, где сохраняются данные на случай потери соединения. После восстановления сигнала информация передается на внешний аппарат. Считыватели могут синхронизироваться с базой на расстоянии до 100 метров.
Ручные модели состоят из корпуса и ручки. Для считывания штрих-кода нужно навести прибор на этикетку и нажать кнопку. Ручные модели бывают и с проводным и беспроводным соединением. Устанавливать их на кассе можно в небольших магазинах.
Стационарные модели ставятся на стол кассира или встраиваются в рабочее место. При работе у кассира свободны обе руки, он быстрее пробивает покупки. Стационарные модели подходят для магазинов с интенсивным потоком покупателей.
Подключение сканера штрих кода
Новый прибор нужно подключить к компьютеру через USB порт. Кабель для подключения входит в комплект. У беспроводных моделей в комплекте есть адаптер для синхронизации с ПК.
Как подключить устройство к компьютеру:
- Вставить в порт USB кабель или Bluetooth адаптер.
- Дождаться, пока система определит новое устройство.
- Если компьютер не видит прибор, выполнить подключение заново.
- Драйвера для синхронизации устанавливать не нужно.
- После распознавания нового устройства считыватель готов к работе.
- Откройте любой текстовый редактор для проверки синхронизации.
- Наведите устройство на этикетку товара.
- Если синхронизация прошла успешно, в файле появится текст.
Если у вас возникнут сложности с подключением и настройкой прибора, вы сможете обратиться в службу поддержки MERTECH. Оставить заявку можно по телефону 8 (800) 555 77 83 или на сайте. Служба поддержки клиентов круглосуточно отвечает на новые заявки.
Как пользоваться сканером штрих кодов?
После подключения и настройки прибора можно приступать к работе. Работать со считывателями можно без долгого обучения. Режим управления прибором понятен интуитивно.
Как применять считыватель на кассе магазина:
- Поднести этикетку к считывающему модулю (для стационарных моделей).
- Направить прибор на этикетку (для ручных моделей)
- Ввести количество товара при продаже нескольких единиц.
- Для маркированных товаров: отсканировать 2D штрих-код с каждой упаковки.
- Проверить информацию на экране, добавить позицию в чек.
- Повторить процедуру для каждого товара на ленте.
- Завершить операцию и распечатать чек для покупателя.
Хорошие считыватели ускоряют работу кассиров. Когда техника работает быстро и без ошибок, уменьшается время на обслуживание одного покупателя. Очереди становятся меньше, а выручка магазина повышается.
Преимущества сканеров MERTECH
Считыватели MERTECH одобрены для работы с маркированными товарами. Рекомендации были получены от компании 1С и системы «Честный Знак».
Достоинства считывателей MERTECH:
- Распознавание всех видов 1D и 2D штрих-кодов.
- Запатентованная технология считывания SUPERLEAD.
- Технология Bluetooth Low Energy для экономии заряда батареи.
- Дальность синхронизации с базой: до 100 метров.
- Установлены аккумуляторы повышенной емкости.
- Большой объем памяти у беспроводных моделей.
- Установлены японские фотоматрицы, улучшенные светосильные фотолинзы.
- Высокопроизводительный 32-битный процессор.
- Материалы корпуса: ABS+PS. Корпус защищен от падений с высоты до 1,5 м.
- Гибкая настройка функций. Простой интерфейс.
Покупатели получают бесплатные драйвера для установки и настройки оборудования. Инструкция по скачиванию и установке программы входит в комплект. Гарантия на считыватели штрихкодов: 3 года после покупки.
Условия заказа оборудования
В каталоге MERTECH представлены ручные и стационарные считыватели, устройства встраиваемого типа. Ассортимент включает проводные модели с USB портом и беспроводные сканеры, которые подключаются по Bluetooth. В каталоге есть модели с Cradle подставкой для ускоренной зарядки и модели с Dongle ключом для передачи информации на расстояние до 100 метров.
На нашем сайте вы можете заказать считыватели штрих-кодов с доставкой по Москве и по России. Дилерская сеть MERTECH охватывает все регионы страны. Во многих городах работают пункты самовывоза товаров.
Чтобы купить оборудование, оставьте заявку на сайте за пару кликов. Менеджер перезвонит вам, ответит на любые вопросы и поможет оформить заказ.
Источник: mertech.ru