Android: приложение, которое сканирует штрих-коды и распознает текст!

В этом посте я расскажу о том, как мы можем использовать потрясающий комплект Firebase ML для сканирования штрих-кодов продуктов. Мы будем делать простое приложение для Android для достижения нашей цели.

Итак, давайте начнем

Шаг 1

Прежде чем мы сможем начать использовать комплект ML, нам нужно подключить наше приложение для Android к проекту Firebase. Итак, для этого зайдите в свою консоль firebase и создайте новый проект, вы можете назвать его как хотите. После создания проекта вы попадете на экран своего проекта. В обзоре проекта нажмите Добавить Firebase в ваше приложение для Android и введите имя пакета вашего приложения.

После ввода имени пакета и нажатия кнопки «Продолжить» браузер автоматически загрузит файл «google-services.json». Этот файл содержит все необходимые метаданные Firebase для вашего приложения. Скопируйте и вставьте файл в каталог «app» вашего проекта.

Шаг 2

Теперь, когда вы успешно подключили свое приложение к firebase, мы можем начать с добавления необходимых зависимостей. Добавьте следующие зависимости в файл build.gradle уровня приложения.

dependencies {
  // ...
  implementation 'com.google.firebase:firebase-ml-vision:16.0.0'
  implementation 'com.google.firebase:firebase-core:16.0.0'
}
apply plugin: 'com.google.gms.google-services'

Синхронизируйте свой проект, чтобы отразить изменения.

Шаг 3

На этом последнем шаге я объясню, как вы можете использовать ML Kit для извлечения значимой информации из изображений. Скопируйте и вставьте этот XML-код в свой файл activity_main.xml.

Теперь в строке номер 19 вы заметите, что мы реализовали пользовательское представление. Мы добавим класс GraphicOverlay на следующем шаге, а пока создайте пустой класс с именем «GraphicOverlay» и скопируйте и вставьте его абсолютный путь в файл XML вместо моего.

Создайте следующие классы — GraphicOverlay, TextGraphic и CloudTextGraphic. Скопируйте и вставьте следующие блоки кода в эти классы соответственно.

Графический оверлей.java

TextGraphic.java

CloudTextGraphic.java

Эти три класса отвечают за рисование «рамок» над текстом на изображениях, чтобы показать, что тексты идентифицированы. Мы не будем подробно изучать код этих классов. Однако вам предлагается сделать это самостоятельно. Вы можете использовать эти классы или просто извлечь необработанное значение из модели Firebase для собственного использования.

Теперь, наконец, скопируйте этот код в ваш файл MainActivity.

MainActivity.java

Мы поставляем изображения в наше приложение двумя способами — из галереи и с камеры.

В обоих случаях изображение уменьшается и преобразуется в растровое изображение перед отображением на экране. Я не буду много говорить об этом, но не стесняйтесь исследовать код для вашего понимания.

В этом файле мы в основном рассмотрим следующие методы:

  1. запустить распознавание текста ()
  2. результат распознавания текста()

запуститьРаспознаваниеТекста()

В этом методе мы сначала создаем объект FirebaseVisionImage, передавая необходимое растровое изображение в качестве параметра.

Затем мы создаем объект FirebaseVisionTextDetector. Затем мы вызываем метод «detectInImage()» для объекта детектора, передавая объект FirebaseVisionImage в качестве параметра. Мы подключаем слушателя к этому методу, и у нас есть два метода обратного вызова. Если все идет хорошо, мы получаем наши тексты в виде «FirebaseVisionText» в качестве параметра в методе обратного вызова «onSuccess()».

Наконец, мы передаем эти результаты в «processTextRecognitionResult», чтобы извлечь из результата осмысленные тексты.

результат распознавания текста()

Мы создаем список блоков FirebaseVisionText и присваиваем его значению, возвращаемому вызовом getBlocks() для объекта FirebaseVisionText.

Затем мы перебираем отдельные блоки, строки и, наконец, отдельные элементы, которые по сути являются словами. Вуаля! вы можете видеть красные рамки, появляющиеся вокруг текста на изображениях.

Примечание: вы можете использовать необработанный метод getRawValue(), чтобы просто извлечь текст.

Полный исходный код приложения доступен на моем github.

Большое спасибо за то, что прочитали это, я надеюсь, вам понравилось читать так же, как мне было писать это. Не стесняйтесь обращаться в комментариях, если у вас есть какие-либо сомнения. Как всегда, удачного кодирования!