Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Быстрый запуск Android

Чтобы начать работу с TensorFlow Lite на Android, мы рекомендуем изучить следующий пример.

Пример классификации изображений Android

Прочитайте TensorFlow Lite Android классификацию изображений для объяснения исходного кода.

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

Вывод выполняется с помощью API-интерфейса TensorFlow Lite Java и библиотеки поддержки Android TensorFlow Lite . Демонстрационное приложение классифицирует кадры в режиме реального времени, отображая наиболее вероятные классификации. Он позволяет пользователю выбирать между плавающей запятой или квантованной моделью, выбирать количество потоков и решать, запускать ли он на процессоре, графическом процессоре или через NNAPI .

Сборка в Android Studio

Чтобы создать пример в Android Studio, следуйте инструкциям в README.md .

Создайте свое собственное приложение для Android

Чтобы быстро приступить к написанию собственного кода Android, мы рекомендуем использовать наш пример классификации изображений Android в качестве отправной точки.

Следующие разделы содержат полезную информацию для работы с TensorFlow Lite на Android.

Используйте библиотеку поддержки Android TensorFlow Lite

Библиотека поддержки Android TensorFlow Lite облегчает интеграцию моделей в ваше приложение. Он предоставляет высокоуровневые API-интерфейсы, которые помогают преобразовывать необработанные входные данные в форму, требуемую моделью, и интерпретировать выходные данные модели, уменьшая объем требуемого стандартного кода.

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

Для начала следуйте инструкциям в библиотеке поддержки Android TensorFlow Lite README.md .

Используйте TensorFlow Lite AAR от JCenter

Чтобы использовать TensorFlow Lite в вашем приложении для Android, мы рекомендуем использовать TensorFlow Lite AAR, размещенный в JCenter .

Вы можете указать это в ваших зависимостях build.gradle следующим образом:

 dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
}
 

Этот AAR включает в себя двоичные файлы для всех Android ABI . Вы можете уменьшить размер двоичного файла вашего приложения, включив только те ABI, которые вам нужны для поддержки.

Мы рекомендуем большинству разработчиков не использовать arm32 x86 , x86_64 и arm32. Это может быть достигнуто с помощью следующей конфигурации Gradle, которая включает в себя только armeabi-v7a и arm64-v8a , которые должны охватывать большинство современных устройств Android.

 android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}
 

Чтобы узнать больше о abiFilters , см. NdkOptions в документации по Android Gradle.

Сборка TensorFlow Lite локально

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

Настройте среду сборки с помощью Docker

  • Загрузите файл Docker. Загружая файл Docker, вы соглашаетесь с тем, что его использование регулируется следующими условиями обслуживания:

Нажимая «Принять», вы тем самым соглашаетесь с тем, что любое использование Android Studio и Native Development Kit для Android будет регулироваться Лицензионным соглашением для Android Software Development Kit, доступным по адресу https://developer.android.com/studio/terms (такой URL-адрес может обновляться или изменяться Google время от времени).

Вы должны принять условия обслуживания, чтобы загрузить файл. Признать

  • При желании вы можете изменить версию Android SDK или NDK. Поместите загруженный файл Docker в пустую папку и создайте свой образ Docker, выполнив:
 docker build . -t tflite-builder -f tflite-android.Dockerfile
 
  • Запустите контейнер Docker в интерактивном режиме, подключив текущую папку к / tmp внутри контейнера (обратите внимание, что / tenorflow_src - это хранилище TensorFlow внутри контейнера):
 docker run -it -v $PWD:/tmp tflite-builder bash
 

Если вы используете PowerShell в Windows, замените «$ PWD» на «pwd».

Если вы хотите использовать репозиторий TensorFlow на хосте, смонтируйте вместо этого каталог хоста (-v hostDir: / tmp).

  • Как только вы окажетесь внутри контейнера, вы можете запустить следующее, чтобы загрузить дополнительные инструменты и библиотеки Android (обратите внимание, что вам может потребоваться принять лицензию):
 android update sdk --no-ui -a --filter tools,platform-tools,android-${ANDROID_API_LEVEL},build-tools-${ANDROID_BUILD_TOOLS_VERSION}
 

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

Настройка среды сборки без Docker

Установите Bazel и Android.

Базель является основной системой сборки для TensorFlow. Чтобы создать его, у вас должен быть установлен Android NDK и SDK в вашей системе.

  1. Установите последнюю версию системы сборки Bazel .
  2. Android NDK требуется для создания собственного (C / C ++) кода TensorFlow Lite. Текущая рекомендуемая версия - 17c, которую можно найти здесь .
  3. Android SDK и инструменты для сборки можно получить здесь или в качестве альтернативы в составе Android Studio . API инструментов сборки> = 23 - это рекомендуемая версия для сборки TensorFlow Lite.
Настройте рабочее пространство и .bazelrc

Запустите сценарий ./configure в корневом каталоге проверки TensorFlow и ответьте «Да», когда сценарий запросит интерактивную настройку ./WORKSPACE для Android. Сценарий попытается настроить параметры, используя следующие переменные среды:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Если эти переменные не установлены, они должны быть предоставлены в интерактивном режиме в приглашении сценария. При успешной настройке должны .tf_configure.bazelrc записи, аналогичные приведенным в файле .tf_configure.bazelrc в корневой папке:

 build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r17c"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="28.0.3"
build --action_env ANDROID_SDK_API_LEVEL="23"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"
 

Сборка и установка

После правильной настройки Bazel вы можете создать AAR TensorFlow Lite из корневого каталога проверки следующим образом:

 bazel build -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
  //tensorflow/lite/java:tensorflow-lite
 

Это создаст файл AAR в bazel-bin/tensorflow/lite/java/ . Обратите внимание, что это создает «толстый» AAR с несколькими различными архитектурами; если вам не нужны все из них, используйте подмножество, соответствующее вашей среде развертывания. Оттуда есть несколько подходов, которые вы можете использовать .aar в своем проекте Android Studio.

Добавить AAR напрямую в проект

Переместите файл tensorflow-lite.aar в каталог libs в вашем проекте. Измените файл build.gradle вашего приложения, чтобы он ссылался на новый каталог, и замените существующую зависимость TensorFlow Lite новой локальной библиотекой, например:

 allprojects {
    repositories {
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}
 
Установите AAR в локальный репозиторий Maven

Выполните следующую команду из корневого каталога проверки:

 mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
 

В build.gradle вашего приложения build.gradle , что у вас есть зависимость mavenLocal() и замените стандартную зависимость TensorFlow Lite на ту, которая поддерживает некоторые операции TensorFlow:

 allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}
 

Обратите внимание, что версия 0.1.100 здесь исключительно для тестирования / разработки. Установив локальный AAR, вы можете использовать стандартные API вывода TensorFlow Lite Java в коде своего приложения.

Сборка Android-приложения с использованием C ++

Существует два способа использования TFLite через C ++, если вы создаете свое приложение с помощью NDK:

Используйте TFLite C API

Это рекомендуемый подход. Загрузите TensorFlow Lite AAR, размещенный в JCenter , переименуйте его в tensorflow-lite-*.zip и разархивируйте. Вы должны включить четыре заголовочных файла в headers/tensorflow/lite/ и headers/tensorflow/lite/c/ и соответствующую динамическую библиотеку libtensorflowlite_jni.so в папке libtensorflowlite_jni.so jni/ вашего проекта NDK.

Заголовочный файл c_api.h содержит основную документацию по использованию TFLite C API.

Используйте TFLite C ++ API

Если вы хотите использовать TFLite через C ++ API, вы можете создать разделяемые библиотеки C ++:

32-битная armeabi-v7a:

 bazel build -c opt --config=android_arm //tensorflow/lite:libtensorflowlite.so
 

64bit arm64-v8a:

 bazel build -c opt --config=android_arm64 //tensorflow/lite:libtensorflowlite.so
 

В настоящее время не существует простого способа извлечь все необходимые файлы заголовков, поэтому вы должны включить все файлы заголовков в tensorflow/lite/ из репозитория TensorFlow. Кроме того, вам понадобятся заголовочные файлы от FlatBuffers и Abseil .