Migrazione per Android

Questa guida spiega come eseguire la migrazione da ML Kit per Firebase per Android.

Aggiorna le importazioni di Gradle

L'SDK ML Kit richiede una sola dipendenza per ogni API ML Kit. Non è necessario specificare librerie comuni come firebase-ml-vision o firebase-ml-natural-language. ML Kit utilizza lo spazio dei nomi com.google.android.gms per le librerie che dipendono da Google Play Services.

API Vision

I modelli in bundle vengono forniti come parte della tua applicazione. I modelli leggeri devono essere scaricati. Alcune API sono disponibili sia in formato pacchetto che in formato thin, altre solo in un formato o nell'altro:

APIIn bundleSottile
Riconoscimento del testox (beta)x
Riconoscimento faccialexx
Scansione di codici a barrexx
Etichettatura delle immaginixx
Rilevamento e monitoraggio degli oggettix-

Aggiorna le dipendenze per le librerie Android di ML Kit nel file Gradle del modulo (a livello di app, di solito app/build.gradle.kts) in base alle seguenti tabelle:

Modelli in bundle

APIArtefatti precedentiNuovo artefatto
Scansione di codici a barre com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-barcode-model:16.0.1
com.google.mlkit:barcode-scanning:17.3.0
Contorno del viso com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-face-model:19.0.0
com.google.mlkit:face-detection:16.1.7
Etichettatura delle immagini com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-image-label-model:19.0.0
com.google.mlkit:image-labeling:17.0.9
Rilevamento di oggetti com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3
com.google.mlkit:object-detection:17.0.2

Modelli sottili

APIArtefatti precedentiNuovo artefatto
Scansione di codici a barre com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1
Riconoscimento facciale com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-face-detection:17.1.0
Riconoscimento del testo com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-text-recognition:19.0.2

AutoMLVision Edge

APIArtefatto precedenteNuovo artefatto
AutoML senza download com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3
AutoML con download com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3

Per ospitare e scaricare modelli personalizzati, spostali in Cloud Storage e aggiungi la logica di download nella tua app per caricarli utilizzando LocalModel. Per maggiori dettagli, consulta la guida alla migrazione da Firebase ML a Cloud Storage.

API Natural Language

I modelli in bundle vengono forniti come parte della tua applicazione. I modelli leggeri devono essere scaricati:

APIIn bundleSottile
ID linguaxx
Risposta rapidaxx (beta)

Aggiorna le dipendenze per le librerie Android di ML Kit nel file Gradle del modulo (a livello di app, di solito app/build.gradle.kts) in base alle seguenti tabelle:

Modelli in bundle

APIArtefatti precedentiNuovo artefatto
ID lingua com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.mlkit:language-id:17.0.6
Risposta rapida com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.mlkit:smart-reply:17.0.4

Modelli sottili

APIArtefatti precedentiNuovo artefatto
ID lingua com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.android.gms:play-services-mlkit-language-id:17.0.0
Risposta rapida com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1

Aggiorna i nomi delle classi

Se la tua classe è presente in questa tabella, apporta la modifica indicata:

Classe precedenteNuovo corso
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml.vision.common.FirebaseVisionImage com.google.mlkit.vision.common.InputImage
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabeler
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel com.google.mlkit.common.model.LocalModel
com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel com.google.mlkit.common.model.LocalModel

Richiede il download manuale. I modelli remoti ospitati su Firebase sono stati ritirati. Per maggiori dettagli, consulta la guida alla migrazione da Firebase ML a Cloud Storage.
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions com.google.mlkit.vision.label.defaults.ImageLabelerOptions
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions com.google.mlkit.vision.label.custom.CustomImageLabelerOptions
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions

Per le altre classi, segui queste regole:

  • Rimuovi il prefisso FirebaseVision dal nome della classe.
  • Rimuovi altri prefissi che iniziano con il prefisso Firebase dal nome della classe.

Inoltre, nei nomi dei pacchetti sostituisci il prefisso com.google.firebase.ml con com.google.mlkit.

Nomi dei metodi di aggiornamento

Le modifiche al codice sono minime:

  • L'inizializzazione di rilevatore/scanner/etichettatore/traduttore… è stata modificata. Ora ogni funzionalità ha il proprio punto di accesso. Ad esempio: BarcodeScanning, TextRecognition, ImageLabeling, Translation… Le chiamate al servizio Firebase getInstance() vengono sostituite dalle chiamate al metodo getClient() dell'entry point della funzionalità.
  • L'istanza predefinita per TextRecognizer è stata rimossa, poiché abbiamo introdotto librerie aggiuntive per il riconoscimento di altri script come il cinese e il coreano. Per utilizzare le opzioni predefinite con il modello di riconoscimento del testo in caratteri latini, dichiara una dipendenza da com.google.android.gms:play-services-mlkit-text-recognition e utilizza TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS).
  • L'istanza predefinita per ImageLabeler e ObjectDetector è stata rimossa, poiché abbiamo introdotto il supporto dei modelli personalizzati per queste due funzionalità. Ad esempio, per utilizzare le opzioni predefinite con il modello di base in ImageLabeling, dichiara una dipendenza da com.google.mlkit:image-labeling e utilizza ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) in Java.
  • Tutti gli handle (detector/scanner/labeler/translator…) sono chiudibili. Assicurati che il metodo close() venga chiamato quando questi oggetti non verranno più utilizzati. Se li utilizzi in un Fragment o AppCompatActivity, un modo per farlo è chiamare LifecycleOwner.getLifecycle() su Fragment o AppCompatActivity, quindi chiamare Lifecycle.addObserver.
  • processImage() e detectInImage() nelle API Vision sono stati rinominati in process() per coerenza.
  • Le API Natural Language ora utilizzano il termine "tag lingua" (come definito dallo standard BCP 47) anziché "codice lingua".
  • I metodi getter nelle classi xxxOptions sono stati rimossi.
  • Il metodo getBitmap() nella classe InputImage (che sostituisce FirebaseVisionImage) non è più supportato come parte dell'interfaccia pubblica. Fai riferimento a BitmapUtils.java nell'esempio di guida rapida di ML Kit per ottenere la bitmap convertita da vari input.
  • FirebaseVisionImageMetadata è stato rimosso, puoi semplicemente passare i metadati dell'immagine come width, height, rotationDegrees, format nei metodi di costruzione di InputImage.

Ecco alcuni esempi di metodi Kotlin precedenti e nuovi:

Precedente

// Construct image labeler with base model and default options.
val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler

// Construct object detector with base model and default options.
val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector

// Construct face detector with given options
val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options)

// Construct image labeler with local AutoML model
val localModel =
    FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build()
val autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build()
    )

Nuovo

// Construct image labeler with base model and default options.
val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
// Optional: add lifecycle observer
lifecycle.addObserver(imageLabeler)

// Construct object detector with base model and default options.
val objectDetector = ObjectDetection.getClient(
    ObjectDetectorOptions.DEFAULT_OPTIONS
)

// Construct face detector with given options
val faceDetector = FaceDetection.getClient(options)

// Construct image labeler with local AutoML model
val localModel =
  LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build()
val autoMLImageLabeler =
  ImageLabeling.getClient(
    CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build())
  

Ecco alcuni esempi di metodi Java vecchi e nuovi:

Precedente

// Construct image labeler with base model and default options.
FirebaseVisionImageLabeler imagelLabeler =
     FirebaseVision.getInstance().getOnDeviceImageLabeler();

// Construct object detector with base model and default options.
FirebaseVisionObjectDetector objectDetector =
     FirebaseVision.getInstance().getOnDeviceObjectDetector();

// Construct face detector with given options
FirebaseVisionFaceDetector faceDetector =
     FirebaseVision.getInstance().getVisionFaceDetector(options);

// Construct image labeler with local AutoML model
FirebaseAutoMLLocalModel localModel =
    new FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build();
FirebaseVisionImageLabeler autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build());

Nuovo

// Construct image labeler with base model and default options.
ImageLabeler imageLabeler = ImageLabeling.getClient(
    ImageLabelerOptions.DEFAULT_OPTIONS
);
// Optional: add lifecycle observer
getLifecycle().addObserver(imageLabeler);

// Construct object detector with base model and default options.
ObjectDetector objectDetector = ObjectDetection.getClient(
    ObjectDetectorOptions.DEFAULT_OPTIONS
);

// Construct face detector with given options
FaceDetector faceDetector = FaceDetection.getClient(options);

// Construct image labeler with local AutoML model
LocalModel localModel =
  new LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build();
ImageLabeler autoMLImageLabeler =
  ImageLabeling.getClient(
    new CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build());
  

Modifiche specifiche per l'API

Scansione di codici a barre

Per l'API Barcode Scanning, ora esistono due modi per fornire i modelli:

  • Tramite Google Play Services, noto anche come "thin" (consigliato): in questo modo, le dimensioni dell'app vengono ridotte e il modello viene condiviso tra le applicazioni. Tuttavia, gli sviluppatori dovranno assicurarsi che il modello venga scaricato prima di utilizzarlo per la prima volta.
  • Con l'APK dell'app, ovvero "in bundle": questo aumenta le dimensioni dell'app, ma significa che il modello è immediatamente utilizzabile.

Le due implementazioni sono leggermente diverse e la versione "in bundle" presenta una serie di miglioramenti rispetto alla versione "thin". I dettagli su queste differenze sono disponibili nelle linee guida dell'API Barcode Scanning.

Riconoscimento facciale

Per l'API di riconoscimento facciale, i modelli possono essere forniti in due modi:

  • Tramite Google Play Services, noto anche come "thin" (consigliato): in questo modo, le dimensioni dell'app vengono ridotte e il modello viene condiviso tra le applicazioni. Tuttavia, gli sviluppatori dovranno assicurarsi che il modello venga scaricato prima di utilizzarlo per la prima volta.
  • Con l'APK dell'app, ovvero "in bundle": questo aumenta le dimensioni del download dell'app, ma significa che il modello è immediatamente utilizzabile.

Il comportamento delle implementazioni è lo stesso.

Traduzioni

  • TranslateLanguage ora utilizza nomi leggibili per le sue costanti (ad es. ENGLISH) anziché i tag di lingua (EN). Ora sono anche @StringDef, anziché @IntDef, e il valore della costante è il tag di lingua BCP 47 corrispondente.

Etichettatura delle immagini AutoML (deprecata)

Il download di modelli personalizzati per l'etichettatura delle immagini utilizzando AutoML è deprecato e verrà disattivato il 15 giugno 2027. Ti consigliamo di utilizzare Cloud Storage per ospitare i modelli e di aggiungere la logica di download alla tua app per scaricare i modelli. Per maggiori dettagli, consulta la guida alla migrazione da Firebase ML a Cloud Storage.

Rilevamento e monitoraggio degli oggetti

Se la tua app utilizza il rilevamento di oggetti con classificazione approssimativa, tieni presente che il nuovo SDK ha modificato il modo in cui restituisce la categoria di classificazione per gli oggetti rilevati.

La categoria di classificazione viene restituita come istanza di DetectedObject.Label anziché come numero intero. Tutte le possibili categorie per il classificatore generico sono incluse nella classe PredefinedCategory.

Ecco un esempio del vecchio e del nuovo codice Kotlin:

Precedente

if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Nuovo

if (!object.labels.isEmpty() &&
    object.labels[0].text == PredefinedCategory.FOOD) {
    ...
}
// or
if (!object.labels.isEmpty() &&
    object.labels[0].index == PredefinedCategory.FOOD_INDEX) {
    ...
}

Ecco un esempio del codice Java precedente e di quello nuovo:

Precedente

if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Nuovo

if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) {
    ...
}
// or
if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) {
    ...
}

La categoria "Sconosciuto" è stata rimossa. Quando la confidenza della classificazione di un oggetto è bassa, non restituiamo alcuna etichetta.

Rimuovi le dipendenze di Firebase

Rimuovi le dipendenze di Firebase dopo la migrazione. Procedi nel seguente modo:

  • Rimuovi il file di configurazione di Firebase eliminando il file di configurazione google-services.json nella directory del modulo (a livello di app) della tua app.
  • Sostituisci il plug-in Gradle di Google Services nel file Gradle del modulo (a livello di app) (di solito app/build.gradle.kts) con il plug-in Strict Version Matcher:

Prima

plugins {
  id("com.android.application")
  id("com.google.gms.google-services")
}

android {
  // …
}

Dopo

plugins {
  id("com.android.application")
  id("com.google.android.gms.strict-version-matcher-plugin")
}

android {
  // …
}
  • Sostituisci il classpath del plug-in Gradle dei servizi Google nel file Gradle del progetto (a livello di directory principale) (build.gradle.kts) con quello del plug-in Strict Version Matcher:

Prima

buildscript {
  dependencies {
    // ...

    classpath("com.google.gms:google-services:4.3.3")
  }
}

Dopo

buildscript {
  dependencies {
    // ...
    classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1")
  }
}

Elimina l'app Firebase nella console Firebase seguendo le istruzioni riportate sul sito di assistenza di Firebase.

Risorse di assistenza

In caso di problemi, consulta la nostra pagina della community, dove indichiamo i canali disponibili per contattarci.