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
) 负责加载模型、应用硬件加速、实例化运行时、创建输入和输出缓冲区以及运行推理。
以下简化版代码段演示了 Compiled Model 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 中的源代码。