本文档介绍如何在您自己的设备上构建 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'
}
}
}
将夜间快照添加到依赖项(或根据需要进行编辑)到您的 build.gradle 中
...
dependencies {
...
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
...
}
...
本地构建 TensorFlow Lite
在某些情况下,您可能希望使用 TensorFlow Lite 的本地构建。例如,您可能正在构建一个包含 从 TensorFlow 中选择的操作 的自定义二进制文件,或者您可能希望对 TensorFlow Lite 进行本地更改。
使用 Docker 设置构建环境
- 下载 Docker 文件。通过下载 Docker 文件,您同意以下服务条款对其使用进行约束
通过点击接受,您在此同意所有使用 Android Studio 和 Android Native Development Kit 的行为将受 Android 软件开发工具包许可协议的约束,该协议可在 https://android-docs.cn/studio/terms(此 URL 可能随时由 Google 更新或更改)获得。
您必须确认服务条款才能下载该文件。- 您可以选择更改 Android SDK 或 NDK 版本。将下载的 Docker 文件放在空文件夹中,并通过运行以下命令构建您的 docker 镜像
docker build . -t tflite-builder -f tflite-android.Dockerfile
- 通过将当前文件夹挂载到容器内的 /host_dir(注意 /tensorflow_src 是容器内的 TensorFlow 仓库)来交互式启动 docker 容器
docker run -it -v $PWD:/host_dir tflite-builder bash
如果您在 Windows 上使用 PowerShell,请将“$PWD”替换为“pwd”。
如果您想使用主机上的 TensorFlow 仓库,请挂载该主机目录而不是 (-v hostDir:/host_dir)。
- 进入容器后,您可以运行以下命令下载其他 Android 工具和库(注意您可能需要接受许可)
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
现在,您应该继续到 配置 WORKSPACE 和 .bazelrc 部分以配置构建设置。
完成库构建后,您可以将它们复制到容器内的 /host_dir,以便您可以在主机上访问它们。
在没有 Docker 的情况下设置构建环境
安装 Bazel 和 Android 先决条件
Bazel 是 TensorFlow 的主要构建系统。要使用它进行构建,您必须在系统上安装它以及 Android NDK 和 SDK。
- 安装最新版本的 Bazel 构建系统。
- Android NDK 是构建原生(C/C++)TensorFlow Lite 代码所必需的。当前推荐的版本是 25b,可以在 此处找到。
- Android SDK 和构建工具可以在 此处获得,或者作为 Android Studio 的一部分获得。构建工具 API >= 23 是构建 TensorFlow Lite 的推荐版本。
配置 WORKSPACE 和 .bazelrc
这是一个构建 TF Lite 库所需的**一次性配置步骤**。在 TensorFlow 根目录中运行 ./configure
脚本,并在脚本询问是否要交互式配置 ./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-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"
构建和安装
Bazel 正确配置后,您可以从根目录构建 TensorFlow Lite AAR,如下所示
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
--fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
--define=android_dexmerger_tool=d8_dexmerger \
--define=android_incremental_dexing_tool=d8_dexbuilder \
//tensorflow/lite/java:tensorflow-lite
这将在 bazel-bin/tensorflow/lite/java/
中生成一个 AAR 文件。请注意,这将构建一个包含多个不同架构的“胖”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 操作,则可以选择生成 tensorflow-lite-select-tf-ops.aar
文件。有关更多详细信息,请参阅 减小 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 后,您可以在应用程序代码中使用标准的 TensorFlow Lite Java 推理 API。