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 dell'applicazione. I modelli sottili devono essere scaricati. Alcune API sono disponibili sia in formato in bundle sia in formato sottile, altre solo in un formato o nell'altro:
| API | In bundle | Sottile |
|---|---|---|
| Riconoscimento del testo | x (beta) | x |
| Riconoscimento facciale | x | x |
| Scansione di codici a barre | x | x |
| Etichettatura delle immagini | x | x |
| Rilevamento di oggetti e monitoraggio | x | - |
Aggiorna le dipendenze per le librerie Android 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
| API | Artefatti precedenti | Nuovo 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
| API | Artefatti precedenti | Nuovo 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.1 |
AutoMLVision Edge
| API | Artefatto precedente | Nuovo 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 dell'applicazione. I modelli sottili devono essere scaricati:
| API | In bundle | Sottile |
|---|---|---|
| ID lingua | x | x |
| Risposta rapida | x | x (beta) |
Aggiorna le dipendenze per le librerie Android 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
| API | Artefatti precedenti | Nuovo 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
| API | Artefatti precedenti | Nuovo 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 precedente | Nuova classe |
|---|---|
| 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 da 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
FirebaseVisiondal nome della classe. - Rimuovi altri prefissi che iniziano con il prefisso
Firebasedal nome della classe.
Inoltre, nei nomi dei pacchetti sostituisci il prefisso com.google.firebase.ml con com.google.mlkit.
Aggiorna i nomi dei metodi
Sono necessarie modifiche minime al codice:
- L'istanza di rilevatore/scanner/etichettatore/traduttore... è stata modificata. Ogni funzionalità ora ha il proprio punto di ingresso. Ad esempio:
BarcodeScanning,TextRecognition,ImageLabeling,Translation... Le chiamate al servizio FirebasegetInstance()vengono sostituite dalle chiamate al metodogetClient()del punto di ingresso della funzionalità. - L'istanza predefinita per
TextRecognizerè stata rimossa perché 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 con script latino, dichiara una dipendenza dacom.google.android.gms:play-services-mlkit-text-recognitione utilizzaTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - L'istanza predefinita per
ImageLabelereObjectDetectorè stata rimossa perché abbiamo introdotto il supporto dei modelli personalizzati per queste due funzionalità. Ad esempio, per utilizzare le opzioni predefinite con il modello di base inImageLabeling, dichiara una dipendenza dacom.google.mlkit:image-labelinge utilizzaImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)in Java. - Tutti gli handle (rilevatore/scanner/etichettatore/traduttore...) sono chiudibili. Assicurati
che il
close()metodo venga chiamato quando questi oggetti non verranno più utilizzati. Se li utilizzi in unFragmentoAppCompatActivity, un modo per farlo è chiamareLifecycleOwner.getLifecycle()sulFragmentoAppCompatActivity, quindi chiamareLifecycle.addObserver. processImage()edetectInImage()nelle API Vision sono stati rinominati inprocess()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
xxxOptionssono stati rimossi. - Il metodo
getBitmap()nella classeInputImage(che sostituisceFirebaseVisionImage) non è più supportato come parte dell'interfaccia pubblica. Fai riferimento aBitmapUtils.javain nell'esempio di avvio rapido di ML Kit per ottenere la bitmap convertita da vari input. FirebaseVisionImageMetadataè stato rimosso. Puoi semplicemente passare i metadati dell'immagine comewidth,height,rotationDegrees,formatai metodi di costruzione diInputImage.
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 precedenti 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 dell'API
Scansione di codici a barre
Per l'API Scansione di codici a barre, ora esistono due modi per fornire i modelli:
- Tramite Google Play Services, ovvero "thin" (consigliato) : riduce le dimensioni dell'app 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" : aumenta le dimensioni dell'app, ma il modello è immediatamente utilizzabile.
Le due implementazioni sono leggermente diverse, con la versione "in bundle" che presenta una serie di miglioramenti rispetto alla versione "sottile". I dettagli su queste differenze sono disponibili nelle linee guida dell'API Scansione di codici a barre.
Riconoscimento facciale
Per l'API Riconoscimento facciale, esistono due modi per fornire i modelli:
- Tramite Google Play Services, ovvero "thin" (consigliato) : riduce le dimensioni dell'app 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" : aumenta le dimensioni del download dell'app , ma il modello è immediatamente utilizzabile.
Il comportamento delle implementazioni è lo stesso.
Traduzioni
TranslateLanguageora utilizza nomi leggibili per le costanti (ad es.ENGLISH) anziché tag lingua (EN). Ora sono anche@StringDef, anziché@IntDef, e il valore della costante è il tag lingua BCP 47 corrispondente.
AutoML Image Labeling (deprecato)
Il download di modelli personalizzati per l'etichettatura delle immagini utilizzando AutoML è stato ritirato e verrà disattivato il 15 giugno 2027. Ti consigliamo di utilizzare Cloud Storage per ospitare i modelli e aggiungere la logica di download alla tua app per scaricarli. 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 categorie possibili per il classificatore approssimativo sono incluse nella classe PredefinedCategory.
Ecco un esempio del codice Kotlin precedente e nuovo:
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 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 l'affidabilità 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.jsonnella directory del modulo (a livello di app) della tua app. - Sostituisci il plug-in Gradle dei servizi Google 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 root,
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
Se riscontri problemi, consulta la nostra pagina della community dove sono indicati i canali disponibili per contattarci.