本頁面由 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軟件開發套件許可協議的約束(此類網址可能由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。如果不需要所有這些,請使用適合您的部署環境的子集。

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

如果其中一個模型正在使用Tensorflow ops,則上述腳本將生成tensorflow-lite.aar文件以及可選的tensorflow-lite-select-tf-ops.aar文件。有關更多詳細信息,請參見減少TensorFlow Lite二進制大小部分。

將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 ,確保您具有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