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

Как использовать службы Google Cloud Machine на Android

by
Difficulty:IntermediateLength:MediumLanguages:

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

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

К счастью, недавно Google запустила платформу Cloud Machine Learning, которая предлагает нейронные сети, прошедшие предварительную подготовку для выполнения множества задач. Большинство его моделей не только очень точные, но и постоянно совершенствуются. И угадайте что? Вы можете использовать их, просто сделав несколько вызовов REST API!

В этом уроке я расскажу вам о платформе Cloud Machine Learning и покажу вам, как использовать ее для создания смарт-приложения для Android, которое может распознавать объекты реального мира и называть их на нескольких языках.

Требования

Чтобы максимально использовать этот учебник, вам нужно всего лишь:

  • последняя версия Android Studio
  • устройство под управлением Android 4.4 или выше
  • и учетная запись Google Cloud Platform

1. Приобретение ключа API

Чтобы иметь возможность использовать сервисы Google для обучения компьютера в своем приложении для Android, вам нужен ключ API. Вы можете создать его, создав новый проект на консоли Google Cloud Platform.

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

Create new project

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

На следующем экране под заголовком Google Cloud Machine Learning вы сможете увидеть все доступные API машинного обучения. В этом уроке мы будем использовать только API Vision и Translation.

Machine learning library

Чтобы включить API Vision, щелкните по его ссылке и нажмите кнопку «Включить».

Enable Vision API

Аналогично, чтобы включить API Translation, щелкните по его ссылке и нажмите кнопку «Включить».

Вам понадобится только один ключ для использования обоих API. Чтобы получить его, перейдите на вкладку «Учетные данные», нажмите кнопку «Создать учетные данные» и выберите ключ API.

Select API key

Теперь вы должны увидеть всплывающее окно, содержащее секретный ключ API.

2. Создание нового Android-проекта

Запустите Android Studio и создайте новый проект с пустым действием. Я предлагаю вам выбрать хотя бы API уровня 19 для минимального поддерживаемого SDK.

Хотя вам и не нужно, всегда полезно использовать надежную сетевую библиотеку для общения с платформой Google Cloud Machine Learning. В этом уроке мы будем использовать одну такую библиотеку под названием Fuel. Добавьте ее в качестве compile зависимости в файле build.gradle модуля app:

Нажмите «Синхронизировать сейчас», чтобы обновить проект.

Далее, нашему приложению потребуется разрешение INTERNET для связи с серверами Google. Поэтому добавьте следующую строку внутри файла манифеста проекта:

Наконец, добавьте ключ API в файл values/strings.xml:

3. Использование API Vision

API Vision позволяет создавать приложения, которые могут видеть и понимать среду пользователя. Распознавание лиц, обнаружение эмоций, оптическое распознавание символов и аннотация изображения - вот некоторые из его многочисленных функций. Пока мы сосредоточимся только на мощной функции аннотации изображения, также называемой обнаружением меток, что, на мой взгляд, очень полезно.

Как и следовало ожидать, API ожидает, что изображение станет одним из его входов. Поэтому давайте теперь создадим экран, где пользователь может делать снимки с помощью камеры устройства.

Шаг 1. Создание макета.

На экране нашего экрана должен быть виджет Button, который пользователь может нажать, чтобы сделать снимок, виджет ImageView, чтобы отобразить изображение, и виджет TextView для отображения меток или аннотаций, созданных API. Соответственно, добавьте следующий код в XML-файл макета вашей деятельности:

Обратите внимание, что мы связали обработчик onClick с кнопкой. Мы определим его на следующем шаге.

Шаг 2: Создайте намерение

Создав новое намерение с помощью действия ACTION_IMAGE_CAPTURE и передав его методу startActivityForResult(), вы можете попросить приложение камеры по умолчанию для устройства пользователя делать снимки и передавать их в приложение. Поэтому добавьте следующий код в свой класс Activity:

Чтобы получать изображения, снятые приложением камеры по умолчанию, вы должны переопределить метод onActivityResult() вашего класса Activity. Внутри метода вы получите доступ к объекту Bundle, содержащему все данные изображения. Вы можете визуализировать данные изображения, просто преобразуя его в Bitmap и передавая его в виджет ImageView.

Если вы сейчас запустите приложение и сделаете снимок, вы увидите, что размер изображения довольно мал. Все в порядке, API Cloud Vision очень точен даже с эскизами изображений.

Шаг 3. Кодировка изображения

API Vision не может напрямую использовать объекты Bitmap. Вместо этого он ожидает строку с кодировкой Base64 с сжатым изображением.

Чтобы сжать данные изображения, вы можете использовать метод compress() класса Bitmap. В качестве аргументов метод ожидает формата сжатия, желаемоt качество и объект ByteArrayOutputStream. Следующий код сжимает растровое изображение с использованием формата JPEG, а также гарантирует, что качество полученного изображения достаточно велико:

Теперь вы можете генерировать строку Base64, используя метод encodeToString() класса Base64.

Шаг 4: Обработка изображения

После всей этой тяжелой работы у вас есть все необходимое для взаимодействия с Vision API. Начните с создания строки, содержащей как URL-адрес API, так и ваш ключ API:

Чтобы отправить данные в API, вы должны создать запрос HTTP POST. Тело запроса должно быть документом JSON, содержащим данные изображения, закодированные Base64. Для обнаружения меток документ должен также иметь массив features, содержащий значение LABEL_DETECTION. Вот формат документа JSON:

Хотя можно скопировать код JSON вручную, создавая его программно, он менее подвержен ошибкам. Следующий код показывает вам, как это сделать, используя классы JSONObject и JSONArray:

На этом этапе мы можем использовать метод post() класса Fuel для запроса HTTP POST. В качестве единственного аргумента метод ожидает URL-адреса API. Вы также должны включать заголовки content-length и content-type в запросе. Для этого используйте метод header(). Аналогичным образом, чтобы добавить документ JSON в тело запроса POST, используйте метод post().

Наконец, вызывая метод responseString() и передавая ему новый экземпляр класса Handler, вы можете асинхронно получать ответ запроса в виде строки. Соответственно, добавьте следующий код:

Когда вы используете функцию обнаружения меток, Vision API возвращает документ JSON, содержащий метки. Наряду с каждым ярлыком вы также получаете оценку, указывающую, насколько точна метка. Документ выглядит следующим образом:

Пока давайте просто пройдемся по всем объектам в массиве labelAnnotations и добавим значение каждого ключа description в виджет TextView нашего макета. Вот как вы можете сделать это в методе success() класса Handler:

Теперь вы можете запустить приложение, сфотографировать любой объект поблизости и посмотреть метки, созданные для него API Vision.

Labels generated for a laptop

4. Использование API перевода

API-интерфейс Cloud Translation, как следует из его названия, может переводить текст на более чем 100 языков. Используя его эффективно, вы можете создавать смарт-приложения, которые могут общаться с вашими пользователями на их языках.

На предыдущем шаге вы видели, что метки, созданные нашим приложением, находятся на английском языке. Давайте добавим к нему кнопку, чтобы перевести эти ярлыки на немецкий.

Шаг 1: обновите макет

Добавьте виджет Button в конец макета вашей activity's, используя следующий код:

Обратите внимание, что эта кнопка также имеет обработчик события onClick, который должен быть определен в вашем классе Activity.

Шаг 2: Перевести ярлыки

Использование API перевода намного проще, чем использование API Vision, прежде всего потому, что вам не нужно создавать документ JSON для определения вашего запроса. Вместо этого вы можете просто передать параметры в строке запроса.

Создайте метод translateToGerman() и внутри него создайте строку, содержащую URL-адрес API перевода.

Чтобы добавить поля в строку запроса вышеуказанного URL-адреса, мы можем использовать объекты List или Pair. Нам важны следующие поля:

  • key, указав секретный ключ API
  • source, указав язык, с которого вы хотите перевести
  • target, указав язык, на который вы хотите перевести
  • q, указав текст, который вы хотите перевести

В следующем коде показано, как настроить API для перевода с английского на немецкий:

Поскольку строка запроса может содержать несколько полей q, мы добавим один для каждого ярлыка, который присутствует внутри виджета TextView нашего макета. Вот так:

Наконец, вы можете вызвать метод get() класса Fuel, чтобы сделать HTTP GET-запрос API перевода. На этот раз вы также можете использовать метод responseString() для асинхронного получения ответа в виде строки.

Ответ API перевода - это документ JSON, содержащий массив переводов. Он имеет следующий формат:

Пока что внутри метода success() класса Handler просто пройдитесь в цикле через translations из вышеуказанного документа JSON и обновим содержимое виджета TextView, используя значения, связанные с ключами translatedText.

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

Labels in German

Заключение

В этом уроке вы узнали, как использовать API Cloud Vision и Cloud Translation, которые являются частью платформы Google Cloud Machine Learning, в приложении для Android. Есть еще много таких 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.