Riconosci i fiori con TensorFlow Lite su Android

Riconoscere i fiori con TensorFlow Lite su Android

Informazioni su questo codelab

subjectUltimo aggiornamento: apr 7, 2025
account_circleScritto da: Hoi Lam (revamping author), Yash Katariya (original author)

1. Introduzione

657431be3173fa86.png android.png

Nota: questo codelab richiede un dispositivo fisico per i test

TensorFlow è un framework di machine learning multiuso. TensorFlow può essere utilizzato ovunque, dall'addestramento di modelli enormi su cluster nel cloud all'esecuzione di modelli localmente su un sistema embedded come lo smartphone.

Questo codelab utilizza TensorFlow Lite per eseguire un modello di riconoscimento di immagini su un dispositivo Android.

Se non l'hai ancora installato, scarica e installa Android Studio 4.1 o versioni successive durante l'addestramento del modello TensorFlow Lite.

Obiettivi didattici

  • Come addestrare il tuo classificatore di immagini personalizzato utilizzando TensorFlow Lite Model Maker.
  • Come utilizzare Android Studio per importare il modello TensorFlow Lite al fine di integrare il modello personalizzato in un'app per Android utilizzando CameraX.
  • Come utilizzare la GPU sullo smartphone per accelerare il modello.

Cosa creerai

Una semplice app per la fotocamera che esegue un programma di riconoscimento delle immagini di TensorFlow per identificare i fiori.

f11c2821f2c8311d.png

Licenza: Utilizzo senza costi

2. Addestrare un riconoscitore di fiori utilizzando Colab

Prima di avviare l'addestramento del modello, inizia a scaricare e installare Android Studio 4.1 o versioni successive.

Apri il Colab che mostra come addestrare un classificatore con Keras per riconoscere i fiori utilizzando il trasferimento di conoscenze di TensorFlow Lite.

3. Configura la directory di lavoro

Clona il repository Git

Il seguente comando clona il repository Git contenente i file necessari per questo codelab:

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

Poi vai alla directory in cui hai appena clonato il repository. Qui lavorerai per il resto di questo codelab:

cd TFLClassify

4. Configurare l'app di base per Android

android.png

Installa Android Studio 4.1 o versioni successive

Se non l'hai ancora installato, installa Android Studio 4.1 o versioni successive.

Apri il progetto con Android Studio

Per aprire un progetto con Android Studio, svolgi i seguenti passaggi:

  1. Apri Android Studio 7f2480ded53a193b.png. Al termine del caricamento, seleziona "Apri un progetto esistente" in questo popup:

f3b8bea7e3b39376.png

  1. Nel selettore dei file, scegli TFLClassify/build.gradle dalla directory di lavoro.
  1. La prima volta che apri il progetto, viene visualizzato un popup "Gradle Sync" che ti chiede di utilizzare gradle wrapper. Fai clic su "OK".

d68b4d7189e6c1e4.png

  1. Se non l'hai ancora fatto, attiva il modello sviluppatore e il debug USB sullo smartphone. Si tratta di una configurazione una tantum. Segui queste istruzioni.
  2. Una volta che il progetto e lo smartphone sono pronti, puoi eseguirlo su un dispositivo reale selezionando TFL_Classify.start e premendo il pulsante Esegui 86934b7b01ad7565.png nella barra degli strumenti:

60a77ef126c1373d.png

  1. Ora consenti alla demo di Tensorflow di accedere alla fotocamera:

b63cba02bb36b7e3.png

  1. Sullo smartphone vedrai la schermata seguente con numeri casuali al posto dei risultati reali.

82c603596afa35f1.png

5. Aggiungere TensorFlow Lite all'app per Android

  1. Seleziona il modulo start nell'esploratore del progetto a sinistra:

cede7f2b8b23c1a7.png

  1. Fai clic con il tasto destro del mouse sul modulo start o su File, quindi su New > Other > TensorFlow Lite Model

bf243d9fdd27e20a.png

  1. Seleziona la posizione del modello in cui hai scaricato in precedenza il modello FlowerModel.tflite addestrato in base alle esigenze.

cfee18cc6674a408.png

  1. Fai clic su Finish.
  2. Alla fine vedrai quanto segue. FlowerModel.tflite viene importato correttamente e mostra le informazioni di alto livello relative al modello, inclusi input / output, nonché un codice di esempio per iniziare.

82840065f0d59def.png

6. (Facoltativo) Controllare tutti gli elenchi di cose da fare

L'elenco di cose da fare ti consente di accedere facilmente alla posizione esatta in cui devi aggiornare il codelab. Puoi anche utilizzarlo nel tuo progetto Android per ricordarti il lavoro futuro. Puoi aggiungere elementi della lista di cose da fare utilizzando i commenti del codice e digitando la parola chiave TODO. Per accedere all'elenco di attività da svolgere, puoi:

  1. Un ottimo modo per vedere cosa faremo è controllare l'elenco di cose da fare. Per farlo, seleziona View > Tool Windows > TODO nella barra dei menu in alto.

5de29b413574f25c.png

  1. Per impostazione predefinita, elenca tutti i TODO in tutti i moduli, il che può creare un po' di confusione. Possiamo ordinare solo le attività da fare iniziali facendo clic sul pulsante Raggruppa per sul lato del riquadro delle attività da fare e scegliendo Modules

5d8fe7b102340208.png

  1. Espandi tutti gli elementi sotto i moduli di avvio:

8d0f14a039995b20.png

7. Esegui il modello personalizzato con TensorFlow Lite

  1. Fai clic su TODO 1 nell'elenco TODO o apri il file MainActivity.kt e individua TODO 1, inizializza il modello aggiungendo questa riga:
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. All'interno del metodo di analisi di CameraX Analyzer, dobbiamo convertire l'input della videocamera ImageProxy in un Bitmap e creare un oggetto TensorImage per il processo di inferenza.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 2: Convert Image to Bitmap then to TensorImage
  val tfImage
= TensorImage.fromBitmap(toBitmap(imageProxy))
 
...
}

  1. Elabora l'immagine ed esegui le seguenti operazioni sul risultato:
  • Ordina i risultati in ordine decrescente per probabilità nell'attributo score, partendo dalla probabilità più alta.
  • Prendi i primi k risultati come definito dalla costante MAX_RESULT_DISPLAY. Se vuoi, puoi variare il valore di questa variabile per ottenere più o meno risultati.
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. Converti i risultati ordinati e filtrati in oggetti dati Recognition pronti per essere utilizzati da RecyclerView tramite il collegamento dati:
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. Commenta o elimina le seguenti righe che contribuiscono a generare i risultati falsi che abbiamo visto in precedenza:
// 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. Esegui l'app su un dispositivo reale selezionando TFL_Classify.start e premendo il pulsante Esegui 86934b7b01ad7565.png nella barra degli strumenti:

60a77ef126c1373d.png

  1. Sullo smartphone viene visualizzata la seguente schermata con numeri casuali al posto dei risultati reali:

f11c2821f2c8311d.png

8. (Facoltativo) Accelera l'inferenza con il delegato GPU

TensorFlow Lite supporta diversi acceleratori hardware per velocizzare l'inferenza sul tuo dispositivo mobile. La GPU è uno degli acceleratori che TensorFlow Lite può sfruttare tramite un meccanismo di delega ed è abbastanza facile da usare.

  1. Apri build.gradle nel modulo start oppure fai clic su TODO 5 nell'elenco TODO e aggiungi la seguente dipendenza:
// TODO 5: Optional GPU Delegates    
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
  1. Torna al file MainActivity.kt o fai clic su DA FARE 6 nell'elenco DA FARE. Sostituisci l'inizializzazione semplice di flowerModel con quanto segue: ottieni un'istanza dell'elenco di compatibilità della GPU e inizializza la GPU a seconda che sia una delle GPU compatibili elencate. In caso contrario, avvia 4 thread CPU per eseguire il modello:
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. Modifica l'inizializzatore del modello in modo da utilizzarlo aggiungendo options all'input del metodo:
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. Esegui l'app su un dispositivo reale selezionando TFL_Classify.start e premendo il pulsante Esegui 86934b7b01ad7565.png nella barra degli strumenti:

60a77ef126c1373d.png

9. Passaggi successivi

Ecco alcuni link per ulteriori informazioni: