TensorFlow Lite доступен в API сервисов Google Play в виде общедоступной бета-версии на всех устройствах Android, на которых установлена текущая версия сервисов Play. API позволяет запускать модели машинного обучения (ML) без статического связывания библиотек TensorFlow Lite с вашим приложением, что позволяет:
- Уменьшите размер вашего приложения
- Получите улучшенную производительность благодаря последней стабильной версии TensorFlow Lite.
На этой странице представлен краткий обзор того, как использовать новый TensorFlow Lite в API сервисов Google Play в приложении для Android.
Дополнительные сведения о службах Google Play см. на веб-сайте служб Google Play .
Добавьте TensorFlow Lite в свое приложение
Вы можете использовать TensorFlow Lite в API сервисов Google Play, внеся несколько изменений в зависимости вашего модуля приложения, инициализировав новый API и используя определенный класс в качестве объекта интерпретатора. Следующие инструкции содержат более подробную информацию о том, как реализовать API интерпретатора в сервисах Google Play.
Пример приложения
Вы можете просмотреть и протестировать пример реализации TensorFlow Lite в сервисах Google Play в приложении классификации изображений . В этом примере приложение использует TensorFlow Lite в сервисах Play для реализации классификатора изображений.
Использование TensorFlow Lite с API интерпретатора
Вы можете использовать TensorFlow Lite в сервисах Google Play с API интерпретатора. В следующих инструкциях показано, как добавить зависимости, инициализировать TensorFlow Lite, создать экземпляр InterpreterApi
и выполнить выводы.
1. Добавьте зависимости проекта
Добавьте следующие зависимости в код проекта вашего приложения, чтобы получить доступ к Play Services API для TensorFlow Lite:
dependencies {
...
// Tensorflow Lite dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.0.0-beta03'
// Optional: include Tensorflow Lite Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta03'
...
}
2. Добавить инициализацию TensorFlow Lite
Инициализируйте компонент TensorFlow Lite API сервисов Google Play перед использованием API TensorFlow Lite:
Котлин
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Ява
Task<Void> initializeTask = TfLite.initialize(context);
3. Создайте интерпретатор и установите параметр времени выполнения
Создайте интерпретатор с помощью InterpreterApi.create()
и настройте его для использования среды выполнения сервисов Google Play, вызвав InterpreterApi.Options.setRuntime()
, как показано в следующем примере кода:
Котлин
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private lateinit var interpreter: InterpreterApi ... initializeTask.addOnSuccessListener { val interpreterOption = InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) interpreter = InterpreterApi.create( modelBuffer, interpreterOption )} .addOnFailureListener { e -> Log.e("Interpreter", "Cannot initialize interpreter", e) }
Ява
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private InterpreterApi interpreter; ... initializeTask.addOnSuccessListener(a -> { interpreter = InterpreterApi.create(modelBuffer, new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)); }) .addOnFailureListener(e -> { Log.e("Interpreter", String.format("Cannot initialize interpreter: %s", e.getMessage())); });
Вы должны использовать приведенную выше реализацию, потому что она позволяет избежать блокировки потока пользовательского интерфейса Android. Если вам нужно более тщательно управлять выполнением потока, вы можете добавить Tasks.await()
для создания интерпретатора:
Котлин
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Ява
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. Делайте выводы
Используя созданный вами объект interpreter
, вызовите метод run()
, чтобы сгенерировать вывод.
Котлин
interpreter.run(inputBuffer, outputBuffer)
Ява
interpreter.run(inputBuffer, outputBuffer);
Аппаратное ускорение
TensorFlow Lite позволяет повысить производительность вашей модели с помощью специализированных аппаратных процессоров, таких как графические процессоры (GPU). Вы можете воспользоваться преимуществами этих специализированных процессоров, используя аппаратные драйверы, называемые делегатами . Вы можете использовать следующих делегатов аппаратного ускорения с TensorFlow Lite в сервисах Google Play:
Делегат графического процессора (рекомендуется) . Этот делегат предоставляется через сервисы Google Play и загружается динамически, как и версии Task API и Interpreter API сервисов Play.
Делегат NNAPI — этот делегат доступен как включенная библиотечная зависимость в ваш проект разработки Android и включен в ваше приложение.
Чтобы использовать делегата графического процессора с TensorFlow Lite в сервисах Google Play:
Обновите зависимости проекта, чтобы использовать делегат GPU из Play Services:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.0.0-beta03'
Включите опцию делегирования графического процессора в инициализации TFlite:
Котлин
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Ява
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
Установите делегат GPU в параметрах интерпретатора для использования
DelegateFactory
, вызвавaddDelegateFactory()
вInterpreterApi.Options()
:Котлин
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Ява
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
Дополнительные сведения об аппаратном ускорении с помощью TensorFlow Lite см. на странице делегатов TensorFlow Lite .
Миграция с автономного TensorFlow Lite
Если вы планируете перенести свое приложение с автономного TensorFlow Lite на API сервисов Play, ознакомьтесь со следующими дополнительными рекомендациями по обновлению кода проекта вашего приложения:
- Просмотрите раздел « Ограничения » на этой странице, чтобы убедиться, что ваш вариант использования поддерживается.
- Перед обновлением кода проверьте производительность и точность своих моделей, особенно если вы используете версии TensorFlow Lite до версии 2.1, чтобы у вас была база для сравнения с новой реализацией.
- Если вы перенесли весь свой код для использования API сервисов Play для TensorFlow Lite, вам следует удалить существующие зависимости библиотеки времени выполнения TensorFlow Lite (записи с
org.tensorflow: tensorflow-lite :*
) из вашего файла build.gradle, чтобы вы может уменьшить размер вашего приложения. - Определите все случаи создания
new Interpreter
в вашем коде и измените его так, чтобы он использовал вызов InterpreterApi.create(). Этот новый API является асинхронным, что означает, что в большинстве случаев он не является заменой, и вы должны зарегистрировать прослушиватель, когда вызов завершится. См. фрагмент кода в шаге 3 кода. - Добавить
import org.tensorflow.lite.InterpreterApi;
иimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
в любые исходные файлы с помощью классовorg.tensorflow.lite.Interpreter
илиorg.tensorflow.lite.InterpreterApi
. - Если какой-либо из результирующих вызовов
InterpreterApi.create()
имеет только один аргумент, добавьтеnew InterpreterApi.Options()
в список аргументов. - Добавьте
.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
к последнему аргументу любых вызововInterpreterApi.create()
. - Замените все остальные вхождения класса
org.tensorflow.lite.Interpreter
наorg.tensorflow.lite.InterpreterApi
.
Если вы хотите использовать автономный TensorFlow Lite и API сервисов Play одновременно, вы должны использовать TensorFlow Lite 2.9 (или более позднюю версию). TensorFlow Lite 2.8 и более ранние версии несовместимы с версией API сервисов Play.
Тестирование
После внедрения TensorFlow Lite в сервисы Google Play обязательно протестируйте свое приложение и опробуйте функции модели машинного обучения вашего приложения. Если вы столкнулись с ошибками или проблемами, которые не можете решить, сообщите о них, используя каналы, указанные в разделе « Поддержка и обратная связь » ниже.
LoadingException: нет приемлемого модуля
При тестировании вашего приложения в среде разработки в период запуска бета-версии вы можете получить исключение, когда ваше приложение попытается инициализировать класс TensorFlow Lite ( TfLite.intialize(context)
):
com.google.android.gms.dynamite.DynamiteModule$LoadingException:
No acceptable module com.google.android.gms.tflite_dynamite found.
Local version is 0 and remote version is 0.
Эта ошибка означает, что TensorFlow Lite в API сервисов Google Play еще недоступен на вашем тестовом устройстве. Вы можете устранить это исключение, присоединившись к этой группе Google tflite-play-services-beta-access с учетной записью пользователя, которую вы используете для тестирования на своем устройстве. После того, как вы были добавлены в группу доступа к бета-версии, это исключение должно быть устранено.
Подождите хотя бы один рабочий день после того, как вы присоединитесь к этой группе, чтобы получить доступ и устранить ошибку. Если вы продолжаете сталкиваться с этой ошибкой, сообщите о ней по каналам, указанным в разделе « Поддержка и обратная связь » ниже.
Ограничения
TensorFlow Lite в сервисах Google Play имеет следующие ограничения:
- Поддержка делегатов аппаратного ускорения ограничена делегатами, перечисленными в разделе « Аппаратное ускорение ». Никакие другие делегаты ускорения не поддерживаются.
- Доступ к TensorFlow Lite через собственные API не поддерживается. Через сервисы Google Play доступны только Java-API TensorFlow Lite.
- Экспериментальные или устаревшие API-интерфейсы TensorFlow Lite, включая пользовательские операции, не поддерживаются.
Поддержка и обратная связь
Вы можете оставить отзыв и получить поддержку через средство отслеживания проблем TensorFlow. Сообщайте о проблемах и запрашивайте поддержку, используя шаблон проблемы для TensorFlow Lite в сервисах Google Play.
Условия и политика конфиденциальности
Использование TensorFlow Lite в сервисах Google Play регулируется Условиями обслуживания Google API . Обратите внимание, что TensorFlow Lite в сервисах Google Play находится в стадии бета-тестирования, поэтому его функциональность, а также связанные с ним API-интерфейсы могут изменяться без предварительного уведомления.
Когда вы используете TensorFlow Lite в API сервисов Google Play, обработка входных данных, таких как изображения, видео, текст, полностью происходит на устройстве, и TensorFlow Lite в сервисах Google Play не отправляет эти данные на серверы Google. В результате вы можете использовать наши API для обработки данных, которые не должны покидать устройство.
TensorFlow Lite в API сервисов Google Play может время от времени связываться с серверами Google, чтобы получать такие вещи, как исправления ошибок, обновленные модели и информацию о совместимости аппаратного ускорителя. TensorFlow Lite в API сервисов Google Play также отправляет в Google показатели производительности и использования API в вашем приложении. Google использует данные этих показателей для измерения производительности, отладки, обслуживания и улучшения API, а также для выявления неправомерного использования или злоупотребления, как описано в нашей Политике конфиденциальности .
Вы несете ответственность за информирование пользователей вашего приложения об обработке Google данных показателей TensorFlow Lite в сервисах Google Play в соответствии с требованиями действующего законодательства.
Данные, которые мы собираем, включают следующее:
- Информация об устройстве (например, производитель, модель, версия ОС и сборка) и доступные аппаратные ускорители машинного обучения (GPU и DSP). Используется для диагностики и анализа использования.
- Идентификатор устройства, используемый для диагностики и анализа использования.
- Информация о приложении (имя пакета, версия приложения). Используется для диагностики и анализа использования.
- Конфигурация API (например, какие делегаты используются). Используется для диагностики и анализа использования.
- Тип события (например, создание интерпретатора, вывод). Используется для диагностики и анализа использования.
- Коды ошибок. Используется для диагностики.
- Показатели эффективности. Используется для диагностики.
Следующие шаги
Дополнительные сведения о реализации машинного обучения в мобильном приложении с помощью TensorFlow Lite см. в Руководстве разработчика TensorFlow Lite . Вы можете найти дополнительные модели TensorFlow Lite для классификации изображений, обнаружения объектов и других приложений на TensorFlow Hub .