Aggiorna le importazioni di 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 raggruppati vengono caricati nell'ambito dell'applicazione. I modelli thin devono essere scaricati. Alcune API sono disponibili sia in versione pacchettizzata che in versione thin, altre solo in una o nell'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 di ML Kit nel file Gradle del tuo modulo (a livello di app) (di solito app/build.gradle
) 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 |
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 | 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
com.google.mlkit:linkfirebase:17.0.0 |
API Natural Language
I modelli raggruppati vengono caricati nell'ambito dell'applicazione. I modelli Thin devono essere scaricati:
API | In bundle | Sottile |
---|---|---|
ID lingua | x | x |
Risposta rapida | x | x (beta) |
Aggiorna le dipendenze per le librerie Android di ML Kit nel file Gradle del tuo modulo (a livello di app) (di solito app/build.gradle
) 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 |
Aggiornare i nomi dei corsi
Se il tuo corso è presente in questa tabella, apporta la modifica indicata:
Corso 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 della classe. - Rimuovi dal nome della classe gli altri prefissi che iniziano con
Firebase
.
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'istanziazione di detector/scanner/labeler/translator… è stata modificata. Ogni funzionalità ora ha il proprio punto di contatto. Ad esempio: BarcodeScanning, TextRecognition, ImageLabeling, Translation…. Le chiamate al servizio
getInstance()
di Firebase vengono sostituite da chiamate al metodogetClient()
dell'entry point della funzionalità. - L'istanza predefinita di TextRecognizer è stata rimossa, poiché 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 in caratteri latini, dichiara una dipendenza da
com.google.android.gms:play-services-mlkit-text-recognition
e utilizzaTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - L'istanziazione 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 utilizzaImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
in Java. - Tutti i controlli (rilevatore/scanner/etichettatrice/traduttore e così via) sono chiudibili. Assicurati che il metodo
close()
venga chiamato quando questi oggetti non verranno più utilizzati. Se li utilizzi in un Fragment o in AppCompatActivity, un modo semplice per farlo è chiamare LifecycleOwner.getLifecycle() sul Fragment o su AppCompatActivity e poi chiamare Lifecycle.addObserver - Per coerenza,
processImage()
edetectInImage()
nelle API Vision sono stati rinominati inprocess()
. - 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 nell'interfaccia pubblica. Fai riferimento aBitmapUtils.java
nell'esempio di avvio rapido di ML Kit per convertire la bitmap da vari input. - FirebaseVisionImageMetadata è stato rimosso. Puoi semplicemente passare i metadati delle immagini, come larghezza, altezza, gradi di rotazione 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 per l'API
Scansione di codici a barre
Per l'API di scansione dei codici a barre, ora esistono due modi per caricare i modelli:
- Tramite Google Play Services, noto anche come "sottile" (opzione consigliata): 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, con la versione "in bundle" che presenta una serie di miglioramenti rispetto alla versione "snella". Puoi trovare i dettagli su queste differenze nelle linee guida dell'API Barcode Scanning.
Rilevamento dei volti
Per l'API Face Detection, i modelli possono essere pubblicati in due modi:
- Tramite Google Play Services, noto anche come "sottile" (opzione consigliata): 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 della tua app, ovvero "in bundle": questo 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
) anziché i tag di lingua (EN
). Ora sono anche @StringDef anziché @IntDef e il valore della costante è il tag di lingua BCP 47 corrispondente.Se la tua app utilizza l'opzione di 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 immagini AutoML
Se la tua app utilizza l'opzione di 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 diRemoteModelManager.download
in base alla tua logica.
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 di quello nuovo:
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 la confidenza della classificazione di un oggetto è bassa, non viene restituita alcuna etichetta.
(Facoltativo) Rimuovi le dipendenze da Firebase
Questo passaggio si applica solo quando sono soddisfatte le seguenti condizioni:
- Firebase ML Kit è l'unico componente Firebase che utilizzi.
- Utilizzi solo API on-device.
- Non utilizzi la pubblicazione del modello.
In questo caso, puoi rimuovere le dipendenze di 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 di corrispondenza delle versioni rigide:
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 percorso del classpath del plug-in Gradle dei servizi Google nel file Gradle (build.gradle) del progetto (a livello di radice) 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 seguendo le istruzioni riportate sul sito di assistenza di Firebase.
Risorse di assistenza
In caso di problemi, consulta la nostra pagina della community, dove sono descritti i canali a nostra disposizione per contattarci.