本文件說明如何自行建構 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 Software Development Kit 授權協議規範,該協議可在 https://developer.android.com/studio/terms 取得 (Google 可能隨時更新或變更該網址)。
您必須確認服務條款才能下載檔案。- 您可以選擇性地變更 Android SDK 或 NDK 版本。將下載的 Docker 檔案放在空白資料夾中,並執行下列命令來建構您的 Docker 映像檔
docker build . -t tflite-builder -f tflite-android.Dockerfile
- 透過將目前資料夾掛載到容器內的 /host_dir 來以互動方式啟動 Docker 容器 (請注意,/tensorflow_src 是容器內的 TensorFlow 存放區)
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 建構系統。
- 建構原生 (C/C++) TensorFlow Lite 程式碼時,需要 Android NDK。目前建議的版本是 25b,您可以在這裡找到。
- Android SDK 和建構工具可以從這裡取得,或者也可以作為 Android Studio 的一部分取得。建構工具 API >= 23 是建構 TensorFlow Lite 的建議版本。
設定 WORKSPACE 和 .bazelrc
這是一次性的設定步驟,建構 TF Lite 程式庫時需要執行此步驟。在根目錄 TensorFlow 簽出目錄中執行 ./configure
指令碼,並在指令碼要求以互動方式為 Android 建構設定 ./WORKSPACE
時回答「Yes」。指令碼將嘗試使用下列環境變數來設定設定
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 檔案。請注意,這會建構包含多種不同架構的「fat」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 後,您可以在應用程式程式碼中使用標準 TensorFlow Lite Java 推論 API。