Vous pouvez également accéder à LiteRT dans les services Google Play à l'aide d'API Java, qui peuvent être utilisées à partir de code Java ou Kotlin, en plus de l'API native. Plus précisément, LiteRT dans les services Google Play est disponible via l'API LiteRT Interpreter.
Utiliser les API Interpreter
L'API LiteRT Interpreter, fournie par l'environnement d'exécution TensorFlow, fournit une interface polyvalente pour créer et exécuter des modèles de ML. Suivez les étapes ci-dessous pour exécuter des inférences avec l'API Interpreter à l'aide de TensorFlow Lite dans l'environnement d'exécution des services Google Play.
1. Ajouter des dépendances de projet
Ajoutez les dépendances suivantes au code de votre projet d'application pour accéder à l'API Play Services pour LiteRT :
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.1.0'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.1.0'
...
}
2. Ajouter l'initialisation de LiteRT
Initialisez le composant LiteRT de l'API des services Google Play avant d'utiliser les API LiteRT :
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3. Créer un interpréteur et définir une option d'environnement d'exécution
Créez un interpréteur à l'aide de InterpreterApi.create()
et configurez-le pour qu'il utilise l'environnement d'exécution des services Google Play en appelant InterpreterApi.Options.setRuntime()
, comme indiqué dans l'exemple de code suivant :
Kotlin
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private lateinit var interpreter: InterpreterApi ... initializeTask.addOnSuccessListener { val interpreterOption = InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) interpreter = InterpreterApi.create( modelBuffer, interpreterOption )} .addOnFailureListener { e -> Log.e("Interpreter", "Cannot initialize interpreter", e) }
Java
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private InterpreterApi interpreter; ... initializeTask.addOnSuccessListener(a -> { interpreter = InterpreterApi.create(modelBuffer, new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)); }) .addOnFailureListener(e -> { Log.e("Interpreter", String.format("Cannot initialize interpreter: %s", e.getMessage())); });
Vous devez utiliser l'implémentation ci-dessus, car elle évite de bloquer le thread de l'interface utilisateur Android. Si vous devez gérer l'exécution du thread de plus près, vous pouvez ajouter un appel Tasks.await()
à la création de l'interpréteur:
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. Exécuter des inférences
À l'aide de l'objet interpreter
que vous avez créé, appelez la méthode run()
pour générer une inférence.
Kotlin
interpreter.run(inputBuffer, outputBuffer)
Java
interpreter.run(inputBuffer, outputBuffer);
Accélération matérielle
LiteRT vous permet d'accélérer les performances de votre modèle à l'aide de processeurs matériels spécialisés, tels que des processeurs graphiques (GPU). Vous pouvez tirer parti de ces processeurs spécialisés à l'aide de pilotes matériels appelés délégués.
Le délégué GPU est fourni via les services Google Play et est chargé dynamiquement, tout comme les versions des services Play de l'API Interpreter.
Vérification de la compatibilité de l'appareil
Tous les appareils ne sont pas compatibles avec l'accélération matérielle GPU avec TFLite. Pour atténuer les erreurs et les plantages potentiels, utilisez la méthode TfLiteGpu.isGpuDelegateAvailable
pour vérifier si un appareil est compatible avec le délégué GPU.
Utilisez cette méthode pour vérifier si un appareil est compatible avec le GPU et utilisez le processeur comme solution de secours lorsque le GPU n'est pas pris en charge.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
Une fois que vous disposez d'une variable comme useGpuTask
, vous pouvez l'utiliser pour déterminer si les appareils utilisent le délégué GPU.
Kotlin
val interpreterTask = useGpuTask.continueWith { task -> val interpreterOptions = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) if (task.result) { interpreterOptions.addDelegateFactory(GpuDelegateFactory()) } InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions) }
Java
Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> InterpreterApi.Options options = new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY); if (task.getResult()) { options.addDelegateFactory(new GpuDelegateFactory()); } return options; });
GPU avec API Interpreter
Pour utiliser le délégué GPU avec les API de l'interprète :
Mettez à jour les dépendances du projet pour utiliser le délégué GPU à partir des services Play :
implementation 'com.google.android.gms:play-services-tflite-gpu:16.2.0'
Activez l'option "Délégué de GPU" lors de l'initialisation de TFlite:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
Activez le délégué GPU dans les options de l'interprète : définissez la fabrique de délégués sur GpuDelegateFactory en appelant
addDelegateFactory() within
InterpreterApi.Options()` :Kotlin
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Java
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
Migrer depuis LiteRT autonome
Si vous prévoyez de migrer votre application de LiteRT autonome vers l'API Play Services, consultez les conseils supplémentaires suivants pour mettre à jour le code de votre projet d'application :
- Consultez la section Limites de cette page pour vous assurer que votre cas d'utilisation est pris en charge.
- Avant de mettre à jour votre code, nous vous recommandons de vérifier les performances et la précision de vos modèles, en particulier si vous utilisez des versions de LiteRT (TF Lite) antérieures à la version 2.1. Vous aurez ainsi un point de référence à comparer à la nouvelle implémentation.
- Si vous avez migré l'ensemble de votre code afin d'utiliser l'API Play Services pour LiteRT, vous devez supprimer les dépendances de la bibliothèque d'exécution LiteRT existantes (entrées avec
org.tensorflow:tensorflow-lite:*
) de votre fichier build.gradle afin de pouvoir réduire la taille de votre application. - Identifiez toutes les occurrences de création d'objets
new Interpreter
dans votre code et modifiez-les afin qu'elles utilisent l'appelInterpreterApi.create()
. Le nouveauTfLite.initialize
est asynchrone, ce qui signifie que dans la plupart des cas, il ne s'agit pas d'un remplacement prêt à l'emploi : vous devez enregistrer un écouteur pour la fin de l'appel. Reportez-vous à l'extrait de code de l'étape 3. - Ajoutez
import org.tensorflow.lite.InterpreterApi;
etimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
à tous les fichiers sources à l'aide des classesorg.tensorflow.lite.Interpreter
ouorg.tensorflow.lite.InterpreterApi
. - Si l'un des appels obtenus à
InterpreterApi.create()
ne comporte qu'un seul argument, ajouteznew InterpreterApi.Options()
à la liste d'arguments. - Ajoutez
.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
au dernier argument de tous les appels àInterpreterApi.create()
. - Remplacez toutes les autres occurrences de la classe
org.tensorflow.lite.Interpreter
parorg.tensorflow.lite.InterpreterApi
.
Si vous souhaitez utiliser la version autonome de LiteRT et l'API des services Play côte à côte, vous devez utiliser LiteRT (TF Lite) version 2.9 ou ultérieure. La version 2.8 et les versions antérieures de LiteRT (TF Lite) ne sont pas compatibles avec la version de l'API des services Play.