В этом документе описывается, как самостоятельно собрать библиотеку TensorFlow Lite для Android. Обычно вам не нужно локально собирать библиотеку TensorFlow Lite для Android. Если вы просто хотите использовать его, см. краткий обзор Android для получения более подробной информации о том, как использовать их в своих проектах Android.
Используйте ночные снимки
Чтобы использовать ночные снимки, добавьте следующий репозиторий в корневую конфигурацию сборки Gradle.
allprojects {
repositories { // should be already there
mavenCentral() // should be already there
maven { // add this repo to use snapshots
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
}
}
Локальная сборка TensorFlow Lite
В некоторых случаях вы можете использовать локальную сборку TensorFlow Lite. Например, вы можете создавать собственный двоичный файл, включающий операции, выбранные из TensorFlow , или вы можете внести локальные изменения в TensorFlow Lite.
Настройте среду сборки с помощью Docker
- Загрузите файл Docker. Загружая файл Docker, вы соглашаетесь с тем, что его использование регулируется следующими условиями обслуживания:
Нажимая «Принять», вы тем самым соглашаетесь с тем, что любое использование Android Studio и Android Native Development Kit будет регулироваться лицензионным соглашением 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 в интерактивном режиме, смонтировав текущую папку в /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 (обратите внимание, что вам может потребоваться принять лицензию):
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
Теперь следует перейти к разделу Configure WORKSPACE и .bazelrc для настройки параметров сборки.
После того, как вы закончите сборку библиотек, вы можете скопировать их в /host_dir внутри контейнера, чтобы получить к ним доступ на хосте.
Настройка среды сборки без Docker
Установите необходимые компоненты Bazel и Android
Bazel — это основная система сборки для TensorFlow. Чтобы выполнить сборку с его помощью, в вашей системе должны быть установлены Android NDK и SDK.
- Установите последнюю версию системы сборки Bazel .
- Android NDK требуется для создания собственного (C/C++) кода TensorFlow Lite. Текущая рекомендуемая версия — 21e, ее можно найти здесь .
- Android SDK и инструменты сборки можно получить здесь или в составе Android Studio . API инструментов сборки >= 23 — рекомендуемая версия для сборки TensorFlow Lite.
Настройте WORKSPACE и .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-r21e"
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 \
--define=android_dexmerger_tool=d8_dexmerger \
--define=android_incremental_dexing_tool=d8_dexbuilder \
//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 'https://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 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}
Обратите внимание, что версия 0.1.100
предназначена исключительно для тестирования/разработки. Установив локальный AAR, вы можете использовать стандартные API-интерфейсы TensorFlow Lite для вывода Java в коде своего приложения.