Le API LiteRT Next sono disponibili in Kotlin, che offre agli sviluppatori Android un'esperienza di sviluppo senza interruzioni con accesso ad API di alto livello.
Per un esempio di applicazione LiteRT Next in Kotlin, consulta la demo di segmentazione delle immagini con Kotlin.
Inizia
Per aggiungere LiteRT Next alla tua applicazione Android, segui questa procedura.
Aggiungi il pacchetto Maven
Aggiungi la dipendenza LiteRT Next all'applicazione:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Crea il modello compilato
Utilizzando l'API CompiledModel
, inizializza il runtime con un modello e la tua scelta di accelerazione hardware:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Creare buffer di input e output
Crea le strutture di dati (buffer) necessarie per contenere i dati di input che alimenterai nel modello per l'inferenza e i dati di output prodotti dal modello dopo l'esecuzione dell'inferenza.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Se utilizzi la memoria della CPU, compila gli input scrivendo i dati direttamente nel primo buffer di input.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Richiama il modello
Fornisci i buffer di input e di output ed esegui il modello compilato.
model.run(inputBuffers, outputBuffers)
Recupera gli output
Recupera gli output leggendo direttamente l'output del modello dalla memoria.
val outputFloatArray = outputBuffers[0].readFloat()
Concetti e componenti chiave
Consulta le seguenti sezioni per informazioni sui concetti e sui componenti chiave delle API Kotlin di LiteRT Next.
Interruzione di base (CPU)
Di seguito è riportata un'implementazione condensata e semplificata dell'inferenza con 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()
Modello compilato (CompiledModel)
L'API Modello compilato (CompiledModel
) è responsabile del caricamento di un modello, dell'applicazione dell'accelerazione hardware, dell'inizializzazione del runtime, della creazione di buffer di input e di output e dell'esecuzione dell'inferenza.
Il seguente snippet di codice semplificato mostra come l'API Compiled Model prende un modello LiteRT (.tflite
) e crea un modello compilato pronto per eseguire l'inferenza.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Il seguente snippet di codice semplificato mostra come l'API CompiledModel
prenda un buffer di input e uno di output ed esegua deduzioni con il modello compilato.
// 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()
Per una visione più completa dell'implementazione dell'API CompiledModel
, consulta il codice sorgente in Model.kt.
Buffer di tensori (TensorBuffer)
LiteRT Next fornisce il supporto integrato per l'interoperabilità dei buffer I/O, utilizzando l'API Tensor Buffer (TensorBuffer
) per gestire il flusso di dati all'interno e all'esterno del CompiledModel
. L'API Tensor Buffer offre la possibilità di scrivere
(Write<T>()
) e leggere (Read<T>()
) e bloccare i buffer.
Per una visione più completa dell'implementazione dell'API Tensor Buffer, consulta il codice sorgente in TensorBuffer.kt.