Utilizza 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 modelli con Firebase, puoi ridurre le dimensioni di download iniziali 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 servire dinamicamente modelli diversi 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 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 lo hai già fatto.

  2. Dalla directory root del tuo progetto Flutter, esegui il comando seguente per installare il plug-in di download 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. Consulta 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 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 modello TensorFlow Lite nella tua app, utilizza prima il downloader del modello per scaricare la versione più recente 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 il modello più recente e le condizioni alle quali desideri consentire il download.

Puoi scegliere tra tre comportamenti di download:

Scarica tipo Descrizione
localModel Ottieni il modello locale dal dispositivo. Se non è disponibile alcun modello locale, si comporta come latestModel . Utilizza questo tipo di download se non sei interessato a verificare la presenza di 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 inizia ad aggiornare il modello in background. Se non è disponibile alcun modello locale, si comporta come latestModel .
latestModel Ottieni l'ultimo modello. Se il modello locale è la versione più recente, restituisce il modello locale. Altrimenti scarica l'ultimo modello. Questo comportamento si bloccherà finché non verrà scaricata la versione più recente (non consigliato). Utilizza questo comportamento solo nei casi in cui hai esplicitamente bisogno della versione più recente.

Dovresti disattivare le funzionalità relative 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 utilizzare il modello.

3. Eseguire 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 mantenuta 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 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 sono così specifici per l'applicazione e offuscati 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 utilizzare un modello personalizzato nella tua app.