Executar o LiteRT Next no Android com Kotlin

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.