Aggiorna importazioni Gradle
Il nuovo SDK 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. È necessario scaricare i modelli sottili. Alcune API sono disponibili sia in bundle che in formato thin, altre in un solo formato o l'altra:
API | In bundle | Sottile |
---|---|---|
Riconoscimento del testo | x (beta) | x |
Rilevamento facciale | x | x |
Scansione di codici a barre | x | x |
Etichettatura delle immagini | x | x |
Rilevamento e monitoraggio degli oggetti | x | - |
Aggiorna le dipendenze per le librerie Android ML Kit nel modulo (app-
livello) del file Gradle (di solito app/build.gradle
) in base alle seguenti tabelle:
Modelli in bundle
API | Vecchi artefatti | 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 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 | Vecchi artefatti | 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 |
Rilevamento 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 | Vecchio artefatto | 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
com.google.mlkit:linkfirebase:17.0.0 |
API Natural Language
I modelli in bundle vengono forniti come parte dell'applicazione. È necessario scaricare i modelli sottili:
API | In bundle | Sottile |
---|---|---|
ID lingua | x | x |
Risposta rapida | x | x (beta) |
Aggiorna le dipendenze per le librerie Android ML Kit nel modulo (app-
livello) del file Gradle (di solito app/build.gradle
) in base alle seguenti tabelle:
Modelli in bundle
API | Vecchi artefatti | 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 | Vecchi artefatti | 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 dei corsi
Se il corso viene visualizzato in questa tabella, apporta la modifica indicata:
Classe precedente | Nuovo 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.CustomRemoteModel |
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 gli altri corsi, segui queste regole:
- Rimuovi il prefisso
FirebaseVision
dal nome del corso. - Rimuovi dal nome del corso gli altri prefissi che iniziano con
Firebase
.
Inoltre, nei nomi dei pacchetti sostituisci il prefisso com.google.firebase.ml
con com.google.mlkit
.
Aggiorna nomi dei metodi
Sono state apportate modifiche minime al codice:
- Rilevatore/scanner/etichettatore/traduttore... L'istanza è stata modificata. Ogni funzionalità ha il proprio punto di accesso. Ad esempio: BarcodeScanning, TextRecognition, ImageLabeling, Translation.... Le chiamate al servizio Firebase
getInstance()
vengono sostituite da chiamate al metodo delgetClient()
punto di ingresso delle funzionalità. - L'istanza predefinita per Textidentifier è stata rimossa, in quanto abbiamo introdotto librerie aggiuntive per il riconoscimento di altri script come cinese e coreano. Per utilizzare le opzioni predefinite con il modello di riconoscimento del testo della scrittura latina, dichiara una dipendenza su
com.google.android.gms:play-services-mlkit-text-recognition
e utilizzaTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - L'istanza predefinita per ImageLabeler e ObjectDetector è stata rimossa, poiché abbiamo introdotto il supporto dei modelli personalizzati per queste due caratteristiche. Ad esempio, per utilizzare le opzioni predefinite con il modello di base in ImageLabeling, dichiara una dipendenza su
com.google.mlkit:image-labeling
e utilizzaImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
in Java. - Tutti gli handle (rilevatore/scanner/etichettatore/traduttore...) sono chiudibili. Assicurati che il metodo
close()
venga chiamato quando questi oggetti non verranno più utilizzati. Se le utilizzi in un Fragment o AppCompatActivity, un modo semplice per farlo è chiamare LifecycleOwner.getLifecycle() sul Fragment o AppCompatActivity e quindi chiamare Lifecycle.addObserver processImage()
edetectInImage()
nelle API Vision sono stati rinominati inprocess()
per coerenza.- Le API Natural Language ora utilizzano il termine "tag del linguaggio" (come definito dallo standard BCP 47) anziché "codice del linguaggio".
- I metodi Getter nelle classi xxxOptions sono stati rimossi.
- Il metodo getBitmap() nella classe InputImage(in sostituzione di
FirebaseVisionImage
) non è più supportato come parte dell'interfaccia pubblica. Fai riferimento aBitmapUtils.java
nell'esempio della guida rapida di ML Kit per convertire le bitmap da vari input. - FirebaseVisionImageMetadata è stato rimosso, puoi semplicemente passare i metadati delle immagini come larghezza, altezza, rotazioneDegrees e formato ai metodi di costruzione di InputImages.
Ecco alcuni esempi di metodi Kotlin vecchi e nuovi:
Vecchio
// 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 life cycle 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:
Vecchio
// 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 life cycle 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 Barcode Scanning, sono ora disponibili due modi per distribuire i modelli:
- Tramite Google Play Services, noto anche come "thin" (opzione consigliata), questa opzione 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 della tua app, noto anche come "in bundle": le dimensioni dell'app aumentano, ma il modello è immediatamente utilizzabile.
Le due implementazioni sono leggermente diverse: la versione "in bundle" presenta una serie di miglioramenti rispetto alla versione "thin". I dettagli su queste differenze sono disponibili nelle linee guida relative all'API Barcode Scanning.
Rilevamento facciale
Per l'API Face Detection, esistono due modi per distribuire i modelli:
- Tramite Google Play Services, noto anche come "thin" (opzione consigliata), questa opzione 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 della tua app, noto anche come "in bundle": questa opzione aumenta le dimensioni di 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
) al posto dei tag lingua (EN
). Ora si chiamano anche @StringDef, anziché @IntDef, e il valore della costante è il tag BCP 47 di lingua corrispondente.Se la tua app utilizza l'opzione della condizione di download "dispositivo inattivo", tieni presente che questa opzione è stata rimossa e non può più essere utilizzata. Puoi comunque utilizzare l'opzione "ricarica del dispositivo". Se vuoi un comportamento più complesso, puoi ritardare la chiamata a
RemoteModelManager.download
in base alla tua logica.
Etichettatura delle immagini con AutoML
Se la tua app utilizza l'opzione della condizione di download "dispositivo inattivo", tieni presente che questa è stata rimossa e non può più essere utilizzata. Puoi comunque utilizzare l'opzione "ricarica dispositivo".
Se vuoi un comportamento più complesso, puoi posticipare le chiamate
RemoteModelManager.download
dietro la tua logica.
Rilevamento e monitoraggio di oggetti
Se la tua app utilizza il rilevamento di oggetti con una classificazione approssimativa, tieni presente che il Il nuovo SDK ha cambiato la modalità di restituzione della categoria di classificazione per di oggetti strutturati.
La categoria di classificazione viene restituita come istanza
DetectedObject.Label
anziché un numero intero. Tutte le categorie possibili per
le categorie di classificazione approssimativa sono incluse nella classe PredefinedCategory
.
Ecco un esempio del vecchio e del nuovo codice Kotlin:
Vecchio
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 vecchio e del nuovo codice Java:
Vecchio
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 viene restituita alcuna etichetta.
Rimuovi le dipendenze Firebase (facoltativo)
Questo passaggio è valido solo se vengono soddisfatte le seguenti condizioni:
- Firebase ML Kit è l'unico componente Firebase che utilizzi.
- Utilizzi solo API on-device.
- Non usi la pubblicazione del modello.
In questo caso, puoi rimuovere le dipendenze Firebase dopo la migrazione. Segui questi passaggi:
- 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 dei servizi Google nel file Gradle del modulo (a livello di app) (di solito app/build.gradle) con il plug-in Strict Version Matcher:
Prima
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // … }
Dopo
apply plugin: 'com.android.application' apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' android { // … }
- Sostituisci il classpath del plug-in Gradle dei servizi Google nel tuo file Gradle (build.gradle) del progetto (a livello principale) con quello del plug-in Strict Version Matcher:
Prima
buildscript { dependencies { // ... classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin } }
Dopo
buildscript { dependencies { // ... classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1' } }
Elimina l'app Firebase nella console Firebase in base a segui le istruzioni sul sito di assistenza Firebase.
Risorse di assistenza
Se riscontri problemi, consulta la pagina della community, dove troverai i canali disponibili per contattarci.