День сообщества ML - 9 ноября! Присоединяйтесь к нам для обновления от TensorFlow, JAX, и многое другое Подробнее

Сборка TensorFlow Lite для Android

В этом документе описывается, как самостоятельно собрать Android-библиотеку TensorFlow Lite. Обычно вам не нужно создавать локальную библиотеку Android TensorFlow Lite. Если вы просто хотите использовать его, самый простой способ использует TensorFlow Lite AAR размещенного на MavenCentral . См Android QuickStart для более подробной информации о том , как использовать их в своих Android проектов.

Используйте ночные снимки

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

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'http://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

Соберите TensorFlow Lite локально

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

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

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

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

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

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

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

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

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

Теперь вы должны перейти к Configure WORKSPACE и .bazelrc раздел для настройки параметров сборки.

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

Настроить среду сборки без Docker

Установите необходимые компоненты Bazel и Android

Bazel - это основная система сборки для TensorFlow. Для сборки с ним у вас должен быть установлен Android NDK и SDK в вашей системе.

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

Настроить рабочее пространство и .bazelrc

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

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

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

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r19c"
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 вы можете собрать TensorFlow Lite AAR из корневого каталога извлечения следующим образом:

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 меньшего размера, ориентированные только на набор моделей, следующим образом:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

Над сценарием будет генерировать tensorflow-lite.aar файл и , возможно , в tensorflow-lite-select-tf-ops.aar файл , если одна из моделей с использованием Tensorflow опа. Для получения более подробной информации, пожалуйста , см Уменьшить TensorFlow Lite двоичного размера раздела.

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

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

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'http://oss.sonatype.org/content/repositories/snapshots'
        }
        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 , убедитесь , что вы имеете mavenLocal() зависимость и заменить стандартную зависимость TensorFlow Lite с той , которая имеет поддержку некоторых TensorFlow ОПС:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'http://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

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

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