Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Начало работы с Firebase ML Kit на Android

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Благодаря TensorFlow Mobile и TensorFlow Lite внедрение и использование глубоких моделей в приложениях для Android стало очень простым. Однако разработка и обучение моделей по-прежнему требует большого мастерства, времени и усилий, не говоря уже о вычислительной мощности. По этой причине большинство разработчиков неохотно используют возможности машинного обучения для своих приложений. С Firebase ML Kit Google надеется изменить это.

Firebase ML Kit - это библиотека, которая позволяет вам легко и с минимальным кодом использовать множество высокоточных, предварительно обученных глубоких моделей в ваших приложениях для Android. Большинство предлагаемых моделей доступны как локально, так и в Google Cloud.

В настоящее время модели ограничены только задачами, связанными с компьютерным видением, такими как оптическое распознавание символов, сканирование штрих-кодов и обнаружение объектов.

В этом уроке я расскажу вам, как добавить Firebase ML Kit в проект Android Studio и использовать некоторые из его базовых API.

Предпосылки

Прежде чем продолжить, убедитесь, что у вас есть доступ к следующему:

  • последняя версия Android Studio
  • устройство или эмулятор под управлением Android API уровня 21 или выше
  • аккаунт в Firebase
  • Google Cloud-аккаунт

1. Создаём проект Firebase

Чтобы подключить службы Firebase для вашего приложения, вы должны создать для него проект Firebase. Войдите в консоль Firebase и на экране приветствия нажмите кнопку «Добавить проект».

Firebase console welcome screen

В появившемся диалоговом окне дайте проекту имя, которое легко запомнить, и нажмите кнопку «Создать проект».

Project configuration form

Через несколько секунд вы увидите уведомление о том, что новый проект готов. Нажмите кнопку «Продолжить», чтобы продолжить.

На следующем экране перейдите в раздел «Разработка» и нажмите ссылку «ML Kit», чтобы увидеть все предложения ML Kit.

Services ML Kit offers

В этом уроке мы будем использовать три службы: распознавание текста, распознавание лиц и маркировку изображений. Вам не нужно предпринимать какие-либо шаги, чтобы явно подключить их, если вы намереваетесь работать только с локальными моделями, поставляемыми с ML Kit. Однако в этом учебнике мы будем использовать как локальные, так и облачные модели. Поэтому нажмите ссылку «Использование облачного API».

Теперь вы попадете на консоль Google Cloud, где вы можете просто нажать кнопку Enable, показанную в разделе Cloud Vision API, чтобы активировать облачные модели. Обратите внимание, однако, что это будет работать только в том случае, если для вашей учетной записи Google Cloud включены платежи.

Cloud Vision API activation screen

2. Настройка проекта Android Studio

Прежде чем вы начнете использовать API Firebase ML Kit, вы должны установить соединение между вашим проектом Android Studio и проектом Firebase, созданным на предыдущем шаге. Для этого откройте панель Firebase Assistant, перейдя в меню Инструменты> Firebase.

У Firebase Assistant в настоящее время нет поддержки ML Kit. Тем не менее, используя его для добавления Firebase Analytics, вы все равно можете не устанавливать соединение вручную. Поэтому разверните раздел Аналитика, нажмите ссылку Добавить событие Analytics и нажмите кнопку Подключиться к Firebase.

В появившемся диалоговом окне убедитесь, что вы выбрали опцию Выбрать существующий Firebase или Google проект и выберите проект, который вы создали.

Connect to Firebase dialog

Нажмите кнопку Подключиться к Firebase. На этом этапе помощник автоматически загрузит файл google-services.json, содержащий ключи API и идентификаторы проектов, и добавит его в модуль app.

После того, как соединение будет успешно установлено, убедитесь, что вы нажали кнопку Добавить Google Analytics в ваше приложение, чтобы добавить различные базовые зависимости Firebase к файлу build.gradle вашего модуля app.

Затем, чтобы добавить библиотеку ML Kit, откройте файл build.gradle и введите следующие реализации implementation:

Чтобы упростить процесс загрузки изображений из Интернета и отображения их в приложении, я предлагаю вам также добавить зависимость для библиотеки Picasso.

Кроме того, добавьте Anko в качестве зависимости, чтобы убедиться, что код Kotlin является кратким и интуитивным.

По умолчанию локальные модели Firebase ML Kit автоматически загружаются на устройства пользователя только по мере необходимости. Однако, если вы хотите, чтобы они были загружены сразу после установки вашего приложения, добавьте следующий код в файл AndroidManifest.xml:

3. Определите макет

В этой статье мы создадим приложение, которое позволяет пользователям вводить URL-адреса изображений и выполнять на них распознавание текста, распознавания лиц и лейблинг изображений. Поэтому в макете приложения должен быть виджет EditText, в котором пользователи могут вводить URL-адреса и три виджета Button, которые позволяют им выбирать, какую операцию они хотят выполнять.

При желании вы можете включить виджет ImageView для отображения изображений.

Если вы разместите все вышеперечисленные виджеты с помощью виджета RelativeLayout, XML-файл макета должен выглядеть так:

Вот более наглядное представление макета:

Visual representation of layout XML

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

4. Загрузка изображения

Когда пользователь нажимает клавишу Готово после ввода URL-адреса изображения в виджет EditText, наше приложение должно загрузить изображение и отобразить его внутри виджета ImageView.

Чтобы обнаружить действия, выполняемые на виртуальной клавиатуре пользователя, сопоставьте объект OnEditorActionListener с виджемом EditText. Внутри слушателя, после подтверждения того, что было выполнено действие IME_ACTION_DONE, вы можете просто вызвать методы Picasso load() и into() для загрузки и отображения изображения соответственно.

Соответственно, добавьте следующий код внутри метода onCreate() вашей деятельности:

5. Распознование текста

Firebase ML Kit имеет отдельные классы детекторов для всех различных операций распознавания изображений, которые он предлагает. Чтобы распознать текст, вы должны либо использовать класс FirebaseVisionTextDetector, который зависит от локальной модели, либо использовать класс FirebaseVisionCloudTextDetector, который зависит от облачной модели. Пока что, давайте использовать первый. Он намного быстрее, но он может обрабатывать текст, написанный только на латинском алфавите.

Детектор ML Kit ожидает, что его вход будет в виде объекта FirebaseVisionImage. Чтобы создать такой объект, все, что вам нужно сделать, это вызвать метод fromBitmap() класса FirebaseVisionImage и передать ему растровое изображение. Следующий код, который должен быть добавлен в обработчик события recognizeText(), который мы создали ранее, показывает, как преобразовать изображение, которое отображается в виджетах ImageView, в растровое изображение, а затем создать из него объект FirebaseVisionImage:

Затем, чтобы получить ссылку на объект FirebaseVisionTextDetector, вы должны использовать экземпляр FirebaseVision.

Теперь вы можете начать процесс распознавания текста, вызвав метод detectInImage() и передав ему объект FirebaseVisionImage. Поскольку метод выполняется асинхронно, он возвращает объект Task. Следовательно, чтобы иметь возможность обрабатывать результат, когда он доступен, вы должны приложить к нему экземпляр OnCompleteListener. Вот как:

Внутри слушателя вы получите доступ к списку объектов Block. В общем, каждый блок можно рассматривать как отдельный абзац, обнаруженный на изображении. Просмотрев свойства text всех объектов Block, вы можете определить весь текст, который был обнаружен. Следующий код показывает вам, как это сделать:

То, как вы используете обнаруженный текст, конечно, зависит от вас. Пока же давайте просто отобразим его с помощью диалогового окна предупреждения. Используем Anko функцию alert().

В приведенном выше коде метод runOnUiThread() гарантирует, что функция alert() запускается в основном потоке приложения.

Наконец, как только вы закончите использовать детектор, вы должны помнить, что вызываете его метод close(), чтобы освободить все ресурсы, которые он хранит.

Если вы сейчас запустите приложение, введите URL-адрес изображения, содержащего большое количество текста, и нажмите кнопку Текст, вы сможете увидеть действие службы распознавания текста ML Kit.

App performing text recognition

Локальная модель ML Kit для распознавания текста достаточно точна для большинства видов печатного текста.

6. Обнаружение лиц

Несмотря на то, что у них нет общего интерфейса высокого уровня, большинство классов детектора имеют одинаковые методы. Это означает, что обнаружение лиц в изображении не слишком отличается от распознавания текста. Однако обратите внимание, что в настоящее время ML Kit предлагает только локальную модель обнаружения лиц, к которой можно получить доступ, используя класс FirebaseVisionFaceDetector. Вы можете получить ссылку на экземпляр, используя класс FirebaseVision.

Добавьте следующий код в метод detectFaces():

Вызвав метод detectInImage() и передав ему растровое изображение, вы можете запустить процесс обнаружения лица асинхронно. Используя экземпляр OnCompleteListener, прикрепленный к объекту Task, он возвращается, вы можете легко узнать, когда процесс будет завершен.

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

Чтобы создать копию растрового изображения исходного изображения, вы должны использовать его метод copy(), как показано ниже:

Затем, чтобы иметь возможность рисовать новое растровое изображение, вы должны создать для него объекты Canvas и Paint. Использование слегка прозрачного цвета для прямоугольников было бы идеальным.

На этом этапе вы можете просто пропустить список объектов FirebaseVisionFace и использовать их свойства boundingBox для рисования прямоугольников над обнаруженными лицами.

Наконец, не забудьте передать новое растровое изображение в виджет ImageView, когда оно будет готово.

Если вы сейчас запустите приложение, вы сможете выполнять обнаружение лица на любом изображении, в котором есть люди.

App performing face detection

Я уверен, что вы будете впечатлены тем, насколько быстрыми и точными являются операции обнаружения лица ML Kit.

7. Создание меток

Чтобы создавать метки для изображения, вы должны использовать либо класс FirebaseVisionLabelDetector на основе модели, либо класс FirebaseVisionCloudLabelDetector на основе облачных моделей. Поскольку в этом руководстве мы использовали только локальные модели, давайте теперь используем облачную модель. Чтобы получить ссылку на экземпляр класса FirebaseVisionCloudLabelDetector, вы должны снова использовать класс FirebaseVision.

Добавьте следующий код в метод generateLabels():

Затем, как обычно, вызовите метод detectInImage() и присвойте экземпляру OnCompleteListener его возвращаемое значение.

На этот раз внутри слушателя вы получите доступ к списку объектов FirebaseVisionCloudLabel, каждый из которых имеет свойство label, содержащее потенциальную метку для изображения. Каждая метка также имеет свойство confidence, связанное с ней, с указанием того, насколько уверен ML Kit в отношении метки.

Следующий код показывает вам, как перебирать список меток и генерировать диалоговое окно с предупреждением, отображающее только те метки, чьи показатели доверия составляют более 70%.

Продолжайте и снова запустите приложение, чтобы узнать, какие ярлыки создаются вашим приложением для изображений, которые вы ему предоставляете.

App generating labels

Заключение

С Firebase ML Kit Google хочет сделать машинное обучение таким же доступным, как и более простые задачи, такие как аналитика и отчеты о сбоях. В этой вводной статье вы узнали, как работать с некоторыми из базовых API в приложениях для Android. Вы также узнали, как использовать как облачные, так и локальные модели, которые он предлагает.

Чтобы узнать больше, обратитесь к официальной документации.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.