此页面由 Cloud Translation API 翻译。
Switch to English

构建适用于Android的TensorFlow Lite

本文档介绍了如何自行构建TensorFlow Lite Android库。通常,您不需要在本地构建TensorFlow Lite Android库。如果只想使用它,最简单的方法是使用JCenter上托管TensorFlow Lite AAR 。有关如何在Android项目中使用它们的更多详细信息,请参见Android快速入门

在本地构建TensorFlow Lite

在某些情况下,您可能希望使用TensorFlow Lite的本地版本。例如,您可能正在构建包括从TensorFlow中选择的操作的自定义二进制文件,或者您可能希望对TensorFlow Lite进行本地更改。

使用Docker设置构建环境

  • 下载Docker文件。通过下载Docker文件,您同意以下服务条款约束您的使用:

点击接受即表示您同意Android Studio和Android Native Development Kit的所有使用均受https://developer.android.com/studio/terms上可用的Android Software Development Kit许可协议的约束(此类网址可能由Google不时更新或更改)。

您必须确认服务条款才能下载该文件。 确认

  • 您可以选择更改Android SDK或NDK版本。将下载的Docker文件放在一个空文件夹中,并通过运行以下命令构建Docker映像:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • 通过将当前文件夹安装到容器内的/ tmp来交互式地启动Docker容器(请注意/ tensorflow_src是容器内的TensorFlow存储库):
docker run -it -v $PWD:/tmp tflite-builder bash

如果在Windows上使用PowerShell,请将“ $ 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必备软件

Bazel是TensorFlow的主要构建系统。要使用它进行构建,您必须在系统上安装它以及Android NDK和SDK。

  1. 安装最新版本的Bazel构建系统
  2. 构建本地(C / C ++)TensorFlow Lite代码需要Android NDK。当前推荐的版本是17c,可以在此处找到。
  3. Android SDK和构建工具可以在此处获得,也可以作为Android Studio的一部分获得。建议使用构建工具API> = 23来构建TensorFlow Lite。

配置WORKSPACE和.bazelrc

在根TensorFlow检出目录中运行./configure脚本,并在脚本要求交互式配置Android构建的./WORKSPACE时回答“是”。该脚本将尝试使用以下环境变量来配置设置:

  • 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-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之后,您可以从根结帐目录构建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

这将在bazel-bin/tensorflow/lite/java/生成一个AAR文件。请注意,这将使用几种不同的体系结构构建“胖” AAR。如果不需要所有这些,请使用适合您的部署环境的子集。

205

如果其中一个模型正在使用Tensorflow ops,则上述脚本将生成tensorflow-lite.aar文件以及可选的tensorflow-lite-select-tf-ops.aar文件。有关更多详细信息,请参见减少TensorFlow Lite二进制大小部分。

将AAR直接添加到项目

tensorflow-lite.aar文件移动到项目中名为libs的目录中。修改应用程序的build.gradle文件以引用新目录,并用新的本地库替换现有的TensorFlow Lite依赖项,例如:

9

将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 ops的依赖项替换标准TensorFlow Lite依赖项:

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

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

请注意,这里的0.1.100版本纯粹是为了测试/开发。安装了本地AAR后,您可以在应用程序代码中使用标准的TensorFlow Lite Java推理API