Die LiteRT Next APIs sind in Kotlin verfügbar, was Android-Entwicklern eine nahtlose Entwicklungsumgebung mit Zugriff auf APIs der höheren Ebene bietet.
Ein Beispiel für eine LiteRT Next-Anwendung in Kotlin finden Sie in der Demo zur Bildsegmentierung mit Kotlin.
Jetzt starten
So fügen Sie Ihrer Android-Anwendung LiteRT Next hinzu:
Maven-Paket hinzufügen
Fügen Sie Ihrer Anwendung die Abhängigkeit „LiteRT Next“ hinzu:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Compiled Model erstellen
Initialisieren Sie die Laufzeit mit der CompiledModel
API mit einem Modell und der gewünschten Hardwarebeschleunigung:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Eingabe- und Ausgabe-Buffer erstellen
Erstellen Sie die erforderlichen Datenstrukturen (Puffer), um die Eingabedaten zu speichern, die Sie dem Modell zur Inferenz zuführen, und die Ausgabedaten, die das Modell nach der Inferenz generiert.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Wenn Sie CPU-Speicher verwenden, füllen Sie die Eingaben, indem Sie Daten direkt in den ersten Eingabepuffer schreiben.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Modell aufrufen
Führen Sie das kompilierte Modell aus, indem Sie die Eingabe- und Ausgabe-Buffer angeben.
model.run(inputBuffers, outputBuffers)
Ausgaben abrufen
Sie können die Ausgabe direkt aus dem Arbeitsspeicher abrufen.
val outputFloatArray = outputBuffers[0].readFloat()
Wichtige Konzepte und Komponenten
In den folgenden Abschnitten finden Sie Informationen zu den wichtigsten Konzepten und Komponenten der LiteRT Next Kotlin APIs.
Grundlegende Inferenz (CPU)
Im Folgenden finden Sie eine komprimierte, vereinfachte Implementierung der Inferenz mit 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()
Kompiliertes Modell (CompiledModel)
Die Compiled Model API (CompiledModel
) ist für das Laden eines Modells, die Anwendung der Hardwarebeschleunigung, die Instanziierung der Laufzeit, das Erstellen von Eingabe- und Ausgabepuffern und die Ausführung der Inferenz verantwortlich.
Das folgende vereinfachte Code-Snippet zeigt, wie die Compiled Model API ein LiteRT-Modell (.tflite
) verwendet, um ein kompiliertes Modell zu erstellen, das für die Ausführung von Inferenzen bereit ist.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Das folgende vereinfachte Code-Snippet zeigt, wie die CompiledModel
API einen Eingabe- und einen Ausgabebuffer annimmt und Inferenzen mit dem kompilierten Modell ausführt.
// 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()
Eine vollständigere Übersicht über die Implementierung der CompiledModel
API finden Sie im Quellcode unter Model.kt.
Tensor Buffer (TensorBuffer)
LiteRT Next bietet integrierte Unterstützung für die Interoperabilität von E/A-Bussen. Dabei wird die Tensor Buffer API (TensorBuffer
) verwendet, um den Datenfluss in und aus dem CompiledModel
zu steuern. Mit der Tensor Buffer API können Sie Buffers schreiben (Write<T>()
), lesen (Read<T>()
) und sperren.
Eine vollständigere Darstellung der Implementierung der Tensor Buffer API finden Sie im Quellcode unter TensorBuffer.kt.