As APIs LiteRT Next estão disponíveis no Kotlin, que oferece aos desenvolvedores Android uma experiência de desenvolvimento perfeita com acesso a APIs de alto nível.
Para conferir um exemplo de um aplicativo do LiteRT Next em Kotlin, consulte a demonstração de segmentação de imagens com Kotlin.
Começar
Siga as etapas abaixo para adicionar o LiteRT Next ao seu app Android.
Adicionar pacote Maven
Adicione a dependência do LiteRT Next ao app:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Criar o modelo compilado
Usando a API CompiledModel
, inicialize o ambiente de execução com um modelo e sua
escolha de aceleração de hardware:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Criar buffers de entrada e saída
Crie as estruturas de dados necessárias (buffers) para armazenar os dados de entrada que você vai alimentar no modelo para inferência e os dados de saída que o modelo produz após a execução da inferência.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Se você estiver usando a memória da CPU, preencha as entradas gravando dados diretamente no primeiro buffer de entrada.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Invocar o modelo
Forneça os buffers de entrada e saída e execute o modelo compilado.
model.run(inputBuffers, outputBuffers)
Recuperar saídas
Extrair saídas lendo diretamente a saída do modelo da memória.
val outputFloatArray = outputBuffers[0].readFloat()
Principais conceitos e componentes
Consulte as seções a seguir para informações sobre os principais conceitos e componentes das APIs LiteRT Next Kotlin.
Inferência básica (CPU)
Confira a seguir uma implementação condensada e simplificada da inferência com o 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()
Modelo compilado (CompiledModel)
A API Compiled Model (CompiledModel
) é responsável por carregar um modelo,
aplicar a aceleração de hardware, instanciar o ambiente de execução, criar buffers de entrada e
saída e executar a inferência.
O snippet de código simplificado a seguir demonstra como a API Compiled Model
usa um modelo LiteRT (.tflite
) e cria um modelo compilado pronto para
executar a inferência.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
O snippet de código simplificado a seguir demonstra como a API CompiledModel
recebe uma entrada e um buffer de saída e executa inferências com o modelo
compilado.
// 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()
Para uma visão mais completa de como a API CompiledModel
é implementada, consulte o
código-fonte em
Model.kt.
Tensor Buffer (TensorBuffer)
O LiteRT Next oferece suporte integrado à interoperabilidade de buffer de E/S usando a
API Tensor Buffer (TensorBuffer
) para processar o fluxo de dados que entram e saem do
CompiledModel
. A API Tensor Buffer permite gravar
(Write<T>()
) e ler (Read<T>()
) e bloquear buffers.
Para uma visão mais completa de como a API Tensor Buffer é implementada, consulte o código-fonte em TensorBuffer.kt.