Utilizzare un modello TensorFlow Lite personalizzato con Flutter

Se la tua app utilizza modelli TensorFlow Lite personalizzati, puoi utilizzare Firebase ML per eseguire il deployment dei modelli. Se esegui il deployment dei modelli con Firebase, puoi ridurre le dimensioni del download iniziale della tua app e aggiornare i modelli di ML della tua app senza rilasciare una nuova versione. Inoltre, con Remote Config e A/B Testing, puoi pubblicare dinamicamente modelli diversi per diversi gruppi di utenti.

Modelli TensorFlow Lite

I modelli TensorFlow Lite sono modelli ML ottimizzati per l'esecuzione su dispositivi mobili. Per ottenere un modello TensorFlow Lite:

Tieni presente che, in assenza di una libreria TensorFlow Lite per Dart gestita, dovrai eseguire l'integrazione con la libreria TensorFlow Lite nativa per le tue piattaforme. Questa integrazione non è documentata qui.

Prima di iniziare

  1. Installa e inizializza gli SDK Firebase per Flutter se non l'hai ancora fatto.

  2. Dalla directory radice del progetto Flutter, esegui questo comando per installare il plug-in di download del modello ML:

    flutter pub add firebase_ml_model_downloader
    
  3. Ricostruisci il progetto:

    flutter run
    

1. Esegui il deployment del modello

Esegui il deployment dei tuoi modelli TensorFlow personalizzati utilizzando la console Firebase o gli SDK Firebase Admin Python e Node.js. Consulta Eseguire il deployment e gestire modelli personalizzati.

Dopo aver aggiunto un modello personalizzato al progetto Firebase, puoi fare riferimento al modello nelle tue app usando il nome specificato. In qualsiasi momento, puoi eseguire il deployment di un nuovo modello TensorFlow Lite e scaricarlo sui dispositivi degli utenti chiamando getModel() (vedi sotto).

2. Scarica il modello sul dispositivo e inizializza un interprete TensorFlow Lite

Per utilizzare il modello TensorFlow Lite nella tua app, utilizza prima il downloader del modello per scaricare l'ultima versione del modello sul dispositivo. Poi, crea un'istanza di un interprete TensorFlow Lite con il modello.

Per avviare il download del modello, chiama il metodo getModel() del downloader del modello, specificando il nome che hai assegnato al modello quando lo hai caricato, se vuoi scaricare sempre l'ultimo modello e le condizioni in cui vuoi consentire il download.

Puoi scegliere tra tre comportamenti di download:

Tipo di download Descrizione
localModel Recupera il modello locale dal dispositivo. Se non è disponibile alcun modello locale, questo si comporta come latestModel. Utilizza questo tipo di download se non ti interessa verificare la presenza di aggiornamenti del modello. Ad esempio, utilizzi Remote Config per recuperare i nomi dei modelli e carichi sempre i modelli con nuovi nomi (consigliato).
localModelUpdateInBackground Recupera il modello locale dal dispositivo e inizia ad aggiornarlo in background. Se non è disponibile alcun modello locale, questo si comporta come latestModel.
latestModel Acquista l'ultimo modello. Se il modello locale è l'ultima versione, restituisce il modello locale. In caso contrario, scarica l'ultimo modello. Questo comportamento verrà bloccato finché non verrà scaricata l'ultima versione (non consigliato). Utilizza questo comportamento solo nei casi in cui hai bisogno esplicitamente dell'ultima versione.

Devi disattivare le funzionalità correlate al modello, ad esempio disattivare o nascondere parte della UI, finché non confermi che il modello è stato scaricato.

FirebaseModelDownloader.instance
    .getModel(
        "yourModelName",
        FirebaseModelDownloadType.localModel,
        FirebaseModelDownloadConditions(
          iosAllowsCellularAccess: true,
          iosAllowsBackgroundDownloading: false,
          androidChargingRequired: false,
          androidWifiRequired: false,
          androidDeviceIdleRequired: false,
        )
    )
    .then((customModel) {
      // Download complete. Depending on your app, you could enable the ML
      // feature, or switch from the local model to the remote model, etc.

      // The CustomModel object contains the local path of the model file,
      // which you can use to instantiate a TensorFlow Lite interpreter.
      final localModelPath = customModel.file;

      // ...
    });

Molte app avviano l'attività di download nel codice di inizializzazione, ma puoi farlo in qualsiasi momento prima di dover utilizzare il modello.

3. Esegue l'inferenza sui dati di input

Ora che hai il file del modello sul dispositivo, puoi utilizzarlo con l'interprete TensorFlow Lite per eseguire l'inferenza. In assenza di una libreria TensorFlow Lite per Dart gestita, dovrai eseguire l'integrazione con le librerie TensorFlow Lite native per iOS e Android.

Appendice: Sicurezza del modello

Indipendentemente da come rendi disponibili i tuoi modelli TensorFlow Lite per Firebase ML, Firebase ML li archivia nel formato protobuf serializzato standard nell'archivio locale.

In teoria, ciò significa che chiunque può copiare il tuo modello. Tuttavia, in pratica, la maggior parte dei modelli è così specifica per l'applicazione e offuscata dalle ottimizzazioni che il rischio è simile a quello dei concorrenti che disassemblano e riutilizzano il tuo codice. Tuttavia, devi essere consapevole di questo rischio prima di utilizzare un modello personalizzato nella tua app.