LiteRT Next API 可在 Kotlin 中使用,為 Android 開發人員提供無縫的開發體驗,並可存取高階 API。
如需 Kotlin 中 LiteRT Next 應用程式的範例,請參閱「使用 Kotlin 進行圖像區隔範例」。
開始使用
請按照下列步驟,將 LiteRT Next 新增至 Android 應用程式。
新增 Maven 套件
將 LiteRT Next 依附元件新增至應用程式:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
建立編譯模型
使用 CompiledModel
API,使用模型和您選擇的硬體加速功能初始化執行階段:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
建立輸入和輸出緩衝區
建立必要的資料結構 (緩衝區),用於儲存您要提供給模型進行推論的輸入資料,以及模型在執行推論後產生的輸出資料。
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
如果您使用 CPU 記憶體,請直接將資料寫入第一個輸入緩衝區,藉此填入輸入內容。
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
叫用模型
提供輸入和輸出緩衝區,執行已編譯的模型。
model.run(inputBuffers, outputBuffers)
擷取輸出
直接從記憶體讀取模型輸出內容,以便擷取輸出內容。
val outputFloatArray = outputBuffers[0].readFloat()
重要概念和元件
如要瞭解 LiteRT Next Kotlin API 的重要概念和元件,請參閱下列各節。
基本推論 (CPU)
以下是使用 LiteRT Next 進行推論的簡化實作方式。
// Load model and initialize runtime
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
已編譯的模型 (CompiledModel)
已編譯的模型 API (CompiledModel
) 負責載入模型、套用硬體加速、例項化執行階段、建立輸入和輸出緩衝區,以及執行推論。
以下簡化的程式碼片段示範如何使用已編譯模型 API 取得 LiteRT 模型 (.tflite
),並建立可執行推論的已編譯模型。
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
以下簡化的程式碼片段示範 CompiledModel
API 如何取得輸入和輸出緩衝區,並使用已編譯的模型執行推論。
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
如要進一步瞭解 CompiledModel
API 的實作方式,請參閱 Model.kt 中的原始碼。
張量緩衝區 (TensorBuffer)
LiteRT Next 內建支援 I/O 緩衝區互通性,可使用 Tensor Buffer API (TensorBuffer
) 處理 CompiledModel
進出資料的流量。Tensor Buffer API 可提供寫入 (Write<T>()
)、讀取 (Read<T>()
) 和鎖定緩衝區的功能。
如要進一步瞭解如何實作 Tensor Buffer API,請參閱 TensorBuffer.kt 中的原始碼。