Les API LiteRT Next sont disponibles en Kotlin, ce qui offre aux développeurs Android une expérience de développement fluide avec un accès aux API de haut niveau.
Pour voir un exemple d'application LiteRT Next en Kotlin, consultez la démo de segmentation d'images avec Kotlin.
Premiers pas
Pour ajouter LiteRT Next à votre application Android, procédez comme suit :
Ajouter un package Maven
Ajoutez la dépendance LiteRT Next à votre application:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Créer le modèle compilé
À l'aide de l'API CompiledModel
, initialisez l'environnement d'exécution avec un modèle et l'accélération matérielle de votre choix:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Créer des tampons d'entrée et de sortie
Créez les structures de données (tampons) nécessaires pour stocker les données d'entrée que vous allez fournir au modèle pour l'inférence et les données de sortie que le modèle produit après l'exécution de l'inférence.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Si vous utilisez la mémoire du processeur, remplissez les entrées en écrivant des données directement dans le premier tampon d'entrée.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Appeler le modèle
Fournissez les tampons d'entrée et de sortie, puis exécutez le modèle compilé.
model.run(inputBuffers, outputBuffers)
Récupérer les sorties
Récupérez les sorties en lisant directement la sortie du modèle à partir de la mémoire.
val outputFloatArray = outputBuffers[0].readFloat()
Concepts et composants clés
Consultez les sections suivantes pour en savoir plus sur les concepts et composants clés des API Kotlin LiteRT Next.
Inférence de base (CPU)
Vous trouverez ci-dessous une implémentation condensée et simplifiée de l'inférence avec 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()
Modèle compilé (CompiledModel)
L'API de modèle compilé (CompiledModel
) est chargée de charger un modèle, d'appliquer l'accélération matérielle, d'instancier l'environnement d'exécution, de créer des tampons d'entrée et de sortie, et d'exécuter l'inférence.
L'extrait de code simplifié suivant montre comment l'API de modèle compilé prend un modèle LiteRT (.tflite
) et crée un modèle compilé prêt à exécuter l'inférence.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
L'extrait de code simplifié suivant montre comment l'API CompiledModel
prend une entrée et un tampon de sortie, puis exécute des inférences avec le modèle compilé.
// 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()
Pour obtenir une vue plus complète de l'implémentation de l'API CompiledModel
, consultez le code source dans Model.kt.
Tampon de tensor (TensorBuffer)
LiteRT Next est compatible avec l'interopérabilité des tampons d'E/S, à l'aide de l'API Tensor Buffer (TensorBuffer
) pour gérer le flux de données vers et depuis le CompiledModel
. L'API Tensor Buffer permet d'écrire (Write<T>()
) et de lire (Read<T>()
), et de verrouiller des tampons.
Pour obtenir une vue plus complète de l'implémentation de l'API Tensor Buffer, consultez le code source à l'adresse TensorBuffer.kt.