Utilizzare un modello TensorFlow Lite personalizzato con Flutter

Se la tua app utilizza modelli TensorFlow Lite personalizzati, puoi utilizzare Firebase ML per distribuire i tuoi modelli. Distribuendo i modelli con Firebase, puoi ridurre le dimensioni iniziali del download della tua app e aggiornare i modelli ML della tua app senza rilasciare una nuova versione della tua app. Inoltre, con Remote Config e A/B Testing, puoi offrire dinamicamente diversi modelli a 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 mantenuta per Dart, dovrai integrare 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 lo hai già fatto.

  2. Dalla directory principale del tuo progetto Flutter, esegui il comando seguente per installare il plug-in del downloader del modello ML:

    flutter pub add firebase_ml_model_downloader
    
  3. Ricostruisci il tuo progetto:

    flutter run
    

1. Distribuisci il tuo modello

Distribuisci i tuoi modelli TensorFlow personalizzati utilizzando la console Firebase o gli SDK Firebase Admin Python e Node.js. Vedere Distribuire e gestire modelli personalizzati .

Dopo aver aggiunto un modello personalizzato al tuo progetto Firebase, puoi fare riferimento al modello nelle tue app utilizzando il nome che hai specificato. In qualsiasi momento, puoi distribuire un nuovo modello TensorFlow Lite e scaricare il nuovo modello sui dispositivi degli utenti chiamando getModel() (vedi sotto).

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

Per utilizzare il tuo modello TensorFlow Lite nella tua app, utilizza prima il downloader del modello per scaricare l'ultima versione del modello sul dispositivo. Quindi, 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 desideri scaricare sempre l'ultimo modello e le condizioni in base alle quali desideri consentire il download.

Puoi scegliere tra tre comportamenti di download:

Tipo di download Descrizione
localModel Ottieni il modello locale dal dispositivo. Se non è disponibile alcun modello locale, si comporta come latestModel . Utilizzare questo tipo di download se non si è interessati a controllare gli aggiornamenti del modello. Ad esempio, stai utilizzando Remote Config per recuperare i nomi dei modelli e carichi sempre i modelli con nuovi nomi (consigliato).
localModelUpdateInBackground Ottieni il modello locale dal dispositivo e avvia l'aggiornamento del modello in background. Se non è disponibile alcun modello locale, si comporta come latestModel .
latestModel Prendi l'ultimo modello. Se il modello locale è l'ultima versione, restituisce il modello locale. Altrimenti, scarica l'ultimo modello. Questo comportamento si bloccherà fino al download dell'ultima versione (non consigliato). Utilizzare questo comportamento solo nei casi in cui è esplicitamente necessaria la versione più recente.

Devi disabilitare la funzionalità relativa al modello, ad esempio disattivare o nascondere parte dell'interfaccia utente, 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 usare il modello.

3. Eseguire l'inferenza sui dati di input

Ora che hai il file del modello sul dispositivo, puoi usarlo con l'interprete TensorFlow Lite per eseguire l'inferenza. In assenza di una libreria TensorFlow Lite gestita per Dart, sarà necessario 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 a Firebase ML, Firebase ML li archivia nel formato protobuf serializzato standard nell'archivio locale.

In teoria, questo 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 codice. Tuttavia, dovresti essere consapevole di questo rischio prima di usare un modello personalizzato nella tua app.