Reconnaître des fleurs avec TensorFlow Lite sur Android

Reconnaître des fleurs avec TensorFlow Lite sur Android

À propos de cet atelier de programmation

subjectDernière mise à jour : avr. 7, 2025
account_circleRédigé par Hoi Lam (revamping author), Yash Katariya (original author)

1. Introduction

657431be3173fa86.png android.png

Remarque: Cet atelier de programmation nécessite un appareil physique pour effectuer les tests.

TensorFlow est un framework de machine learning polyvalent. Il peut être utilisé dans le cloud, pour entraîner des modèles volumineux sur des clusters, ou en local, pour exécuter des modèles sur un système intégré, comme un téléphone.

Cet atelier de programmation utilise TensorFlow Lite pour exécuter un modèle de reconnaissance d'images sur un appareil Android.

Installer Android Studio 4.1 ou version ultérieure

Si vous ne l'avez pas encore installé, téléchargez et installez Android Studio 4.1 ou version ultérieure pendant que vous entraînez votre modèle TensorFlow Lite.

Points abordés

  • Entraîner votre propre classificateur d'images personnalisé à l'aide de TensorFlow Lite Model Maker
  • Utiliser Android Studio pour importer le modèle TensorFlow Lite afin d'intégrer le modèle personnalisé dans une application Android à l'aide de CameraX
  • Utiliser le GPU de votre téléphone pour accélérer votre modèle

Objectifs de l'atelier

Une application d'appareil photo simple qui exécute un programme de reconnaissance d'image TensorFlow pour identifier les fleurs.

f11c2821f2c8311d.png

Licence: Utilisation sans frais

2. Entraîner un outil de reconnaissance des fleurs à l'aide de Colab

Avant de commencer l'entraînement du modèle, commencez à télécharger et à installer Android Studio 4.1 ou version ultérieure.

Ouvrez le Colab qui montre comment entraîner un classificateur avec Keras pour reconnaître des fleurs à l'aide de l'apprentissage par transfert TensorFlow Lite.

3. Configurer le répertoire de travail

Cloner le dépôt Git

La commande suivante clone le dépôt Git contenant les fichiers nécessaires à cet atelier de programmation:

git clone https://github.com/hoitab/TFLClassify.git

Accédez ensuite au répertoire dans lequel vous venez de cloner le dépôt. C'est là que vous allez travailler pendant le reste de cet atelier de programmation:

cd TFLClassify

4. Configurer l'application Android

android.png

Installer Android Studio 4.1 ou version ultérieure

Si vous ne l'avez pas encore installé, installez Android Studio 4.1 ou une version ultérieure.

Ouvrir le projet avec Android Studio

Pour ouvrir un projet avec Android Studio, procédez comme suit :

  1. Ouvrez Android Studio 7f2480ded53a193b.png. Une fois le chargement terminé, sélectionnez "Open an Existing project" (Ouvrir un projet existant) dans le pop-up suivant:

f3b8bea7e3b39376.png

  1. Dans le sélecteur de fichiers, sélectionnez TFLClassify/build.gradle dans votre répertoire de travail.
  1. Lorsque vous ouvrez le projet pour la première fois, un pop-up "Gradle Sync" s'affiche. Il vous demande si vous souhaitez utiliser le wrapper Gradle. Cliquez sur "OK".

d68b4d7189e6c1e4.png

  1. Activez le mode développeur et le débogage USB sur votre téléphone si ce n'est pas déjà fait. Il s'agit d'une configuration unique. Suivez ces instructions.
  2. Une fois votre projet et votre téléphone prêts, vous pouvez l'exécuter sur un appareil réel en sélectionnant TFL_Classify.start et en appuyant sur le bouton d'exécution 86934b7b01ad7565.png dans la barre d'outils:

60a77ef126c1373d.png

  1. Autorisez maintenant la démonstration Tensorflow à accéder à votre caméra:

b63cba02bb36b7e3.png

  1. L'écran suivant s'affiche sur votre téléphone. Les résultats réels seront affichés à la place des nombres aléatoires.

82c603596afa35f1.png

5. Ajouter TensorFlow Lite à l'application Android

  1. Sélectionnez le module start dans l'explorateur de projets sur la gauche:

cede7f2b8b23c1a7.png

  1. Effectuez un clic droit sur le module start ou cliquez sur File, puis sur New > Other > TensorFlow Lite Model.

bf243d9fdd27e20a.png

  1. Sélectionnez l'emplacement du modèle où vous avez téléchargé le FlowerModel.tflite entraîné sur mesure précédemment.

cfee18cc6674a408.png

  1. Cliquez sur Finish.
  2. Les informations suivantes s'affichent à la fin : FlowerModel.tflite est correctement importé et affiche des informations générales sur le modèle, y compris les entrées / sorties, ainsi qu'un exemple de code pour vous aider à vous lancer.

82840065f0d59def.png

6. Facultatif: Vérifier la liste de tâches complète

La liste de tâches vous permet d'accéder facilement à l'emplacement exact où vous devez mettre à jour l'atelier de programmation. Vous pouvez également l'utiliser dans votre projet Android pour vous rappeler de futurs travaux. Vous pouvez ajouter des tâches à faire à l'aide de commentaires de code et saisir le mot clé TODO. Pour accéder à la liste des tâches à faire, vous pouvez:

  1. Un excellent moyen de voir ce que nous allons faire est de consulter la liste de tâches. Pour ce faire, sélectionnez View > Tool Windows > TODO dans la barre de menu supérieure.

5de29b413574f25c.png

  1. Par défaut, il liste toutes les tâches à faire dans tous les modules, ce qui est un peu déroutant. Nous ne pouvons trier que les tâches à faire de départ en cliquant sur le bouton de regroupement sur le côté du panneau de tâches à faire, puis en sélectionnant Modules.

5d8fe7b102340208.png

  1. Développez tous les éléments des modules de démarrage:

8d0f14a039995b20.png

7. Exécuter le modèle personnalisé avec TensorFlow Lite

  1. Cliquez sur "TODO 1" dans la liste "TODO" ou ouvrez le fichier MainActivity.kt et recherchez "TODO 1". Initialisez le modèle en ajoutant la ligne suivante:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  ...
  // TODO 1: Add class variable TensorFlow Lite Model
  private val flowerModel = FlowerModel.newInstance(ctx)

  ...
}
  1. Dans la méthode d'analyse de l'outil d'analyse de CameraX, nous devons convertir l'ImageProxy de l'entrée de la caméra en Bitmap et créer un objet TensorImage pour le processus d'inférence.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 2: Convert Image to Bitmap then to TensorImage
  val tfImage
= TensorImage.fromBitmap(toBitmap(imageProxy))
 
...
}

  1. Traitez l'image et effectuez les opérations suivantes sur le résultat:
  • Triez les résultats par probabilité décroissante sous l'attribut score, en commençant par la probabilité la plus élevée.
  • Prendre les k premiers résultats, comme défini par la constante MAX_RESULT_DISPLAY. Vous pouvez éventuellement modifier la valeur de cette variable pour obtenir plus ou moins de résultats.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 3: Process the image using the trained model, sort and pick out the top results
  val outputs
= flowerModel.process(tfImage)
     
.probabilityAsCategoryList.apply {
          sortByDescending
{ it.score } // Sort with highest confidence first
     
}.take(MAX_RESULT_DISPLAY) // take the top results

 
...
}
  1. Convertissez les résultats triés et filtrés en objets de données Recognition prêts à être consommés par RecyclerView via la liaison de données:
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 4: Converting the top probability items into a list of recognitions
 
for (output in outputs) {
      items
.add(Recognition(output.label, output.score))
 
}
 
...
}
  1. Mettez en commentaire ou supprimez les lignes suivantes, qui permettent de générer les faux résultats que nous voyons précédemment:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
    items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
  1. Exécutez l'application sur un appareil réel en sélectionnant TFL_Classify.start, puis en appuyant sur le bouton d'exécution 86934b7b01ad7565.png dans la barre d'outils:

60a77ef126c1373d.png

  1. L'écran suivant s'affiche sur votre téléphone. Les résultats réels seront affichés à la place des nombres aléatoires:

f11c2821f2c8311d.png

8. Facultatif: Accélérer l'inférence avec le délégué GPU

TensorFlow Lite est compatible avec plusieurs accélérateurs matériels pour accélérer l'inférence sur votre appareil mobile. Le GPU est l'un des accélérateurs que TensorFlow Lite peut exploiter via un mécanisme de délégué. Il est assez facile à utiliser.

  1. Ouvrez build.gradle sous le module start, ou cliquez sur TODO 5 sous la liste de tâches et ajoutez la dépendance suivante:
// TODO 5: Optional GPU Delegates    
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
  1. Revenez au fichier MainActivity.kt ou cliquez sur TODO 6 dans la liste des tâches à faire. Remplacez l'initialisation simple de flowerModel par ce qui suit: obtenez une instance de la liste de compatibilité des GPU et initialisez le GPU en fonction de son appartenance à la liste des GPU compatibles. Sinon, lancez quatre threads de processeur pour exécuter le modèle:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {
  ...

  // TODO 1: Add class variable TensorFlow Lite Model
  // Initializing the flowerModel by lazy so that it runs in the same thread when the process
  // method is called.
  private val flowerModel: FlowerModel by lazy{

    // TODO 6. Optional GPU acceleration
    val compatList = CompatibilityList()

    val options = if(compatList.isDelegateSupportedOnThisDevice){
        Log.d(TAG, "This device is GPU Compatible ")
        Model.Options.Builder().setDevice(Model.Device.GPU).build()
    } else {
        Log.d(TAG, "This device is GPU Incompatible ")
        Model.Options.Builder().setNumThreads(4).build()
    }

  ...
}
  1. Modifiez l'initialiseur du modèle pour qu'il l'utilise en ajoutant options à l'entrée de la méthode:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  private val flowerModel: FlowerModel by lazy{

    ...

    // Initialize the Flower Model
    FlowerModel.newInstance(ctx, options)
  }
}

  1. Exécutez l'application sur un appareil réel en sélectionnant TFL_Classify.start, puis en appuyant sur le bouton d'exécution 86934b7b01ad7565.png dans la barre d'outils:

60a77ef126c1373d.png

9. Étapes suivantes

Voici quelques liens pour en savoir plus: