開發人員可以使用 LiteRT 中繼資料來產生 以便在 Android 上啟用整合。對大多數開發人員來說 Android Studio ML Model Binding 的圖形介面是 最容易使用如果您需要更多自訂項目,或是使用指令列 LiteRT Codegen 工具也可以這個工具使用。
使用 Android Studio 機器學習模型繫結
如果是有中繼資料強化的 LiteRT 模型,
開發人員可以使用 Android Studio 機器學習模型繫結功能,
專案設定並根據模型
中繼資料。只要使用包裝函式程式碼,就不需要直接與
ByteBuffer
。開發人員可以與 LiteRT 模型互動
與輸入的物件,例如 Bitmap
和 Rect
。
在 Android Studio 中匯入 LiteRT 模型
在您要使用 TFLite 模型的模組上按一下滑鼠右鍵,或按一下
File
,然後New
>Other
>LiteRT Model
選取 TFLite 檔案的位置。請注意,這項工具 使用機器學習模型繫結和 所有依附元件都會自動插入 Android 模組的
build.gradle
檔案。選用:如有匯入 TensorFlow GPU,請選取第二個核取方塊,即可匯入 TensorFlow GPU 使用 GPU 加速功能
按一下「
Finish
」。匯入成功後,您會看到以下畫面。開始 使用這個模型選取「Kotlin 或 Java」,然後複製程式碼並貼到 「
Sample Code
」專區。按兩下即可回到這個畫面 在 Android Studio 的ml
目錄中找到 TFLite 模型。
加快模型推論速度
機器學習模型繫結功能可讓開發人員透過 委派代表使用委派項目和執行緒數量。
步驟 1:檢查內含下列的模組 build.gradle
檔案
依附元件:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
}
步驟 2:偵測裝置上執行的 GPU 是否與 TensorFlow GPU 相容 委派 (如果不是使用多個 CPU 執行緒執行模型):
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = if(compatList.isDelegateSupportedOnThisDevice) { // if the device has a supported GPU, add the GPU delegate Model.Options.Builder().setDevice(Model.Device.GPU).build() } else { // if the GPU is not supported, run on 4 threads Model.Options.Builder().setNumThreads(4).build() } // Initialize the model as usual feeding in the options object val myModel = MyModel.newInstance(context, options) // Run inference per sample code
Java
import org.tensorflow.lite.support.model.Model import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Model.Options options; CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate options = Model.Options.Builder().setDevice(Model.Device.GPU).build(); } else { // if the GPU is not supported, run on 4 threads options = Model.Options.Builder().setNumThreads(4).build(); } MyModel myModel = new MyModel.newInstance(context, options); // Run inference per sample code
透過 LiteRT 程式碼產生器產生模型介面
對於使用中繼資料強化 LiteRT 模型,
開發人員可使用 LiteRT Android 包裝函式程式碼產生器
特定平台的包裝函式程式碼。只要使用包裝函式程式碼,
直接透過 ByteBuffer
存取。開發人員可以與 TensorFlow 互動
含有已輸入物件 (例如 Bitmap
和 Rect
) 的 Lite 模型。
程式碼產生器的實用性取決於
LiteRT 模型的中繼資料項目。請參閱「<Codegen usage>
」一節
列在相關欄位中
metadata_schema.fbs、
,瞭解 Codegen 工具如何剖析每個欄位。
產生包裝函式程式碼
您必須在終端機中安裝下列工具:
pip install tflite-support
完成後,您可以使用下列語法來使用程式碼產生器:
tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--package_name=org.tensorflow.lite.classify \
--model_class_name=MyClassifierModel \
--destination=./classify_wrapper
產生的程式碼會位於目的地目錄中。如果您是 使用 Google Colab 或其他遙控器 就能以 ZIP 封存檔的形式壓縮結果,並下載 加入 Android Studio 專案
# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/
# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')
使用產生的程式碼
步驟 1:匯入產生的程式碼
視需要將產生的程式碼解壓縮至目錄結構。根
產生的程式碼假設為 SRC_ROOT
。
開啟要使用 LiteRT 的 Android Studio 專案
再透過下列方式匯入產生的模組新功能 ->匯入模組 ->
選取「SRC_ROOT
」
以上方範例來說,系統會呼叫 目錄和匯入的模組。
classify_wrapper
。
步驟 2:更新應用程式的 build.gradle
檔案
在使用產生的程式庫模組的應用程式模組中:
在 Android 部分下方,新增以下內容:
aaptOptions {
noCompress "tflite"
}
在依附元件區段下方,新增以下內容:
implementation project(":classify_wrapper")
步驟 3:使用模型
// 1. Initialize the model
MyClassifierModel myImageClassifier = null;
try {
myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
// Error reading the model
}
if(null != myImageClassifier) {
// 2. Set the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));
// 3. Run the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);
// 4. Retrieve the result
Map<String, Float> labeledProbability = outputs.getProbability();
}
加快模型推論速度
產生的程式碼可讓開發人員加快程式碼的執行速度 使用委派項目和 。您可以在初始化模型物件時設定這些項目,因為 參數:
Context
:Android 活動或服務的背景資訊- (選用)
Device
:TFLite 加速委派。例如: GPUDelegate - (選用)
numThreads
:用於執行模型的執行緒數量 - 預設值為 1。
舉例來說,如要使用 GPU 委派和最多三個執行緒,您可以初始化 就像這樣
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
疑難排解
如果收到「java.io.FileNotFoundException:這個檔案無法在 檔案描述元可能已經過壓縮錯誤,請插入下列幾行 在使用程式庫模組的應用程式模組的 Android 部分底下:
aaptOptions {
noCompress "tflite"
}