本頁面由 Cloud Translation API 翻譯而成。
Switch to English

Android快速入門

要開始在Android上使用TensorFlow Lite,我們建議您瀏覽以下示例。

Android圖像分類示例

閱讀TensorFlow Lite Android圖像分類以獲取源代碼的說明。

此示例應用程序使用圖像分類對從設備的後置攝像頭看到的圖像進行連續分類。該應用程序可以在設備或仿真器上運行。

使用TensorFlow Lite Java API和TensorFlow Lite Android支持庫執行推理。演示應用程序實時對幀進行分類,顯示最可能的分類。它允許用戶在浮點模型或量化模型之間進行選擇,選擇線程數,並決定是在CPU,GPU還是通過NNAPI運行

在Android Studio中構建

要在Android Studio中構建示例,請按照README.md中的說明進行操作

創建自己的Android應用

為了快速開始編寫自己的Android代碼,我們建議使用我們的Android圖像分類示例作為起點。

以下各節包含一些在Android上使用TensorFlow Lite的有用信息。

使用TensorFlow Lite Android支持庫

TensorFlow Lite Android支持庫使將模型集成到應用程序中變得更加容易。它提供了高級API,可幫助將原始輸入數據轉換為模型所需的形式,並解釋模型的輸出,從而減少所需的樣板代碼量。

它支持輸入和輸出的通用數據格式,包括圖像和數組。它還提供執行諸如圖像大小調整和裁切之類的任務的預處理和後處理單元。

首先,請遵循TensorFlow Lite Android支持庫README.md中的說明

使用來自JCenter的TensorFlow Lite AAR

要在您的Android應用中使用TensorFlow Lite,我們建議使用JCenter託管TensorFlow Lite AAR

您可以在build.gradle依賴項中指定以下內容:

 dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
}
 

該AAR包含所有Android ABI的二進製文件。您可以通過僅包含需要支持的ABI來減小應用程序二進製文件的大小。

我們建議大多數開發人員省略x86x86_64arm32 ABI。這可以通過以下Gradle配置來實現,該配置僅包括armeabi-v7aarm64-v8a ,應涵蓋大多數現代Android設備。

 android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}
 

要了解有關abiFilters更多信息,請參閱Android Gradle文檔中的NdkOptions

在本地構建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。如果不需要所有這些,請使用適合您的部署環境的子集。從那裡開始,您可以採用多種方法在Android Studio項目中使用.aar。

將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

使用C ++構建Android應用

如果使用NDK構建應用程序,則有兩種通過C ++使用TFLite的方法:

使用TFLite C API

這是推薦的方法。下載JCenter上託管TensorFlow Lite AAR ,將其重命名為tensorflow-lite-*.zip ,然後解壓縮。您必須在NDK項目的jni/文件夾中的headers/tensorflow/lite/headers/tensorflow/lite/c/文件夾中包含四個頭文件,以及相關的libtensorflowlite_jni.so動態庫。

c_api.h頭文件包含有關使用TFLite C API的基本文檔。

使用TFLite C ++ API

如果要通過C ++ API使用TFLite,則可以構建C ++共享庫:

32位armeabi-v7a:

 bazel build -c opt --config=android_arm //tensorflow/lite:libtensorflowlite.so
 

64位arm64-v8a:

 bazel build -c opt --config=android_arm64 //tensorflow/lite:libtensorflowlite.so
 

當前,沒有直接的方法來提取所需的所有頭文件,因此您必須從TensorFlow存儲庫tensorflow/lite/所有頭文件包括在tensorflow/lite/ 。此外,您將需要從頭文件FlatBuffers繞繩下降