In dieser Anleitung wird beschrieben, wie Sie von ML Kit for Firebase für Android migrieren.
Gradle-Importe aktualisieren
Für das ML Kit SDK ist nur eine Abhängigkeit für jede ML Kit API erforderlich. Sie müssen keine allgemeinen Bibliotheken wie firebase-ml-vision oder firebase-ml-natural-language angeben. ML Kit verwendet den Namespace com.google.android.gms für Bibliotheken, die von den Google Play-Diensten abhängen.
Vision APIs
Gebündelte Modelle werden als Teil Ihrer Anwendung bereitgestellt. Schlanke Modelle müssen heruntergeladen werden. Einige APIs sind sowohl in gebündelter als auch in schlanker Form verfügbar, andere nur in einer der beiden Formen:
| API | Gebündelt | Schlank |
|---|---|---|
| Texterkennung | x (Beta) | x |
| Gesichtserkennung | x | x |
| Scannen von Barcodes | x | x |
| Hinzufügen von Bild-Labels | x | x |
| Objekterkennung und -tracking | x | - |
Aktualisieren Sie die Abhängigkeiten für die ML Kit Android-Bibliotheken in der Gradle-Datei Ihres Moduls (auf App-Ebene, in der Regel app/build.gradle.kts) gemäß den folgenden Tabellen:
Gebündelte Modelle
| API | Alte Artefakte | Neues Artefakt |
|---|---|---|
| Scannen von Barcodes | 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 |
| Gesichtskontur | 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 |
| Hinzufügen von Bild-Labels | 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 |
| Objekterkennung | 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 |
Schlanke Modelle
| API | Alte Artefakte | Neues Artefakt |
|---|---|---|
| Scannen von Barcodes | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| Gesichtserkennung | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| Texterkennung | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
AutoMLVision Edge
| API | Altes Artefakt | Neues Artefakt |
|---|---|---|
| AutoML ohne 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 mit 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
Wenn Sie benutzerdefinierte Modelle hosten und herunterladen möchten, verschieben Sie Ihre Modelle in Cloud Storage und fügen Sie Ihrer App Downloadlogik hinzu, um sie mit LocalModel zu laden. Weitere Informationen finden Sie in der
Migrationsanleitung von Firebase ML zu Cloud Storage. |
Natural Language APIs
Gebündelte Modelle werden als Teil Ihrer Anwendung bereitgestellt. Schlanke Modelle müssen heruntergeladen werden:
| API | Gebündelt | Schlank |
|---|---|---|
| Sprach-ID | x | x |
| Intelligente Antwort | x | x (Beta) |
Aktualisieren Sie die Abhängigkeiten für die ML Kit Android-Bibliotheken in der Gradle-Datei Ihres Moduls (auf App-Ebene, in der Regel app/build.gradle.kts) gemäß den folgenden Tabellen:
Gebündelte Modelle
| API | Alte Artefakte | Neues Artefakt |
|---|---|---|
| Sprach-ID | 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 |
| Intelligente Antwort | 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 |
Schlanke Modelle
| API | Alte Artefakte | Neues Artefakt |
|---|---|---|
| Sprach-ID | 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 |
| Intelligente Antwort | 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 |
Klassennamen aktualisieren
Wenn Ihre Klasse in dieser Tabelle aufgeführt ist, nehmen Sie die angegebene Änderung vor:
| Alte Klasse | Neue Klasse |
|---|---|
| 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 Erfordert manuellen Download. In Firebase gehostete Remote-Modelle sind veraltet. Weitere Informationen finden Sie in der Migrationsanleitung von Firebase ML zu 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 |
Für andere Klassen gelten die folgenden Regeln:
- Entfernen Sie das Präfix
FirebaseVisionaus dem Klassennamen. - Entfernen Sie andere Präfixe, die mit dem Präfix
Firebasebeginnen, aus dem Klassennamen.
Ersetzen Sie außerdem in Paketnamen das Präfix com.google.firebase.ml durch com.google.mlkit.
Methodennamen aktualisieren
Hier sind nur geringfügige Codeänderungen erforderlich:
- Die Instanziierung von Detektor, Scanner, Labeler, Übersetzer usw. wurde geändert. Jedes Feature hat jetzt einen eigenen Einstiegspunkt. Beispiel:
BarcodeScanning,TextRecognition,ImageLabeling,Translation. Aufrufe vongetInstance()des Firebase-Dienstes werden durch Aufrufe der MethodegetClient()des Einstiegspunkts des Features ersetzt. - Die Standardinstanziierung für
TextRecognizerwurde entfernt, da wir zusätzliche Bibliotheken für die Erkennung anderer Schriftsysteme wie Chinesisch und Koreanisch eingeführt haben. Wenn Sie Standardoptionen mit dem Texterkennungsmodell für lateinische Schrift verwenden möchten, deklarieren Sie eine Abhängigkeit voncom.google.android.gms:play-services-mlkit-text-recognitionund verwenden SieTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - Die Standardinstanziierung für
ImageLabelerundObjectDetectorwurde entfernt, da wir die Unterstützung für benutzerdefinierte Modelle für diese beiden Features eingeführt haben. Wenn Sie beispielsweise Standardoptionen mit dem Basismodell inImageLabeling, deklarieren Sie eine Abhängigkeit voncom.google.mlkit:image-labelingund verwenden SieImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)in Java. - Alle Handles (Detektor, Scanner, Labeler, Übersetzer usw.) können geschlossen werden. Achten Sie darauf,
dass die
close()Methode aufgerufen wird, wenn diese Objekte nicht mehr verwendet werden. Wenn Sie sie in einemFragmentoderAppCompatActivityverwenden, können Sie dazu einfachLifecycleOwner.getLifecycle()für dasFragmentoderAppCompatActivityund dannLifecycle.addObserveraufrufen. processImage()unddetectInImage()in den Vision APIs wurden aus Konsistenzgründen inprocess()umbenannt.- Die Natural Language APIs verwenden jetzt den Begriff „Sprach-Tag“ (gemäß dem BCP 47-Standard) anstelle von „Sprachcode“.
- Getter-Methoden in
xxxOptions-Klassen wurden entfernt. - Die Methode
getBitmap()in der KlasseInputImage(ersetztFirebaseVisionImage) wird im Rahmen der öffentlichen Schnittstelle nicht mehr unterstützt. Informationen zum Konvertieren von Bitmaps aus verschiedenen Eingaben finden Sie unterBitmapUtils.javain ML Kit-Schnellstartbeispiel. FirebaseVisionImageMetadatawurde entfernt. Sie können einfach Bildmetadaten wiewidth,height,rotationDegreesundformatan die Konstruktionsmethoden vonInputImageübergeben.
Hier sind einige Beispiele für alte und neue Kotlin-Methoden:
Alt
// 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() )
Neu
// 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())
Hier sind einige Beispiele für alte und neue Java-Methoden:
Alt
// 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());
Neu
// 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());
API-spezifische Änderungen
Barcode-Scanning
Für die Barcode Scanning API gibt es jetzt zwei Möglichkeiten, die Modelle bereitzustellen:
- Über die Google Play-Dienste, also als „schlanke“ Version (empfohlen) : Dadurch wird die App-Größe reduziert und das Modell wird von mehreren Anwendungen gemeinsam genutzt. Entwickler müssen jedoch dafür sorgen, dass das Modell heruntergeladen wird, bevor es zum ersten Mal verwendet wird.
- Mit dem APK Ihrer App, also als „gebündelte“ Version : Dadurch wird die App-Größe erhöht, aber das Modell ist sofort einsatzbereit.
Die beiden Implementierungen unterscheiden sich leicht. Die „gebündelte“ Version bietet einige Verbesserungen gegenüber der „schlanken“ Version. Details zu diesen Unterschieden finden Sie in den Richtlinien zur Barcode Scanning API.
Gesichtserkennung
Für die Face Detection API gibt es zwei Möglichkeiten, die Modelle bereitzustellen:
- Über die Google Play-Dienste, also als „schlanke“ Version (empfohlen) : Dadurch wird die App-Größe reduziert und das Modell wird von mehreren Anwendungen gemeinsam genutzt. Entwickler müssen jedoch dafür sorgen, dass das Modell heruntergeladen wird, bevor es zum ersten Mal verwendet wird.
- Mit dem APK Ihrer App, also als „gebündelte“ Version : Dadurch wird die Größe des App-Downloads erhöht, das Modell ist aber sofort einsatzbereit.
Das Verhalten der Implementierungen ist identisch.
Translation
TranslateLanguageverwendet jetzt lesbare Namen für seine Konstanten (z.B.ENGLISH) anstelle von Sprach-Tags (EN). Sie sind jetzt auch@StringDef, anstelle von@IntDef, und der Wert der Konstante ist das entsprechende BCP 47 Sprach-Tag.
AutoML Image Labeling (eingestellt)
Das Herunterladen benutzerdefinierter Modelle für die Bildlabeling mit AutoML ist eingestellt und wird am 15. Juni 2027 deaktiviert. Sie sollten stattdessen Cloud Storage verwenden, um Modelle zu hosten, und Ihrer App Downloadlogik hinzufügen, um die Modelle herunterzuladen. Weitere Informationen finden Sie in der Migrationsanleitung von Firebase ML zu Cloud Storage.
Objekterkennung und -tracking
Wenn Ihre App die Objekterkennung mit grober Klassifizierung verwendet, sollten Sie beachten, dass sich die Art und Weise geändert hat, wie das neue SDK die Klassifizierungskategorie für erkannte Objekte zurückgibt.
Die Klassifizierungskategorie wird als Instanz von DetectedObject.Label anstelle einer Ganzzahl zurückgegeben. In der Klasse PredefinedCategory sind alle möglichen Kategorien für den groben Klassifikator enthalten.
Hier ist ein Beispiel für den alten und neuen Kotlin-Code:
Alt
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Neu
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Hier ist ein Beispiel für den alten und neuen Java-Code:
Alt
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Neu
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) { ... }
Die Kategorie „Unbekannt“ wurde entfernt. Wenn die Konfidenz der Klassifizierung eines Objekts niedrig ist, geben wir kein Label zurück.
Firebase-Abhängigkeiten entfernen
Entfernen Sie nach der Migration die Firebase-Abhängigkeiten. Gehen Sie so vor:
- Entfernen Sie die Firebase-Konfigurationsdatei, indem Sie die Konfigurationsdatei
google-services.jsonim Modulverzeichnis Ihrer App (auf App-Ebene) löschen. - Ersetzen Sie das Gradle-Plug-in der Google-Dienste in der Gradle-Datei Ihres Moduls (in der Regel
app/build.gradle.kts, auf App-Ebene) durch das Strict Version Matcher-Plug-in:
Vorher
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Nachher
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Ersetzen Sie den Gradle-Plug-in-Klassenpfad der Google-Dienste in der Gradle-Datei Ihres Projekts (
build.gradle.kts, auf Stammebene) durch den des Strict Version Matcher-Plug-ins:
Vorher
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
Nachher
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
Löschen Sie Ihre Firebase-App in der Firebase Console gemäß der Anleitung auf der Firebase-Supportwebsite.
Hilfe erhalten
Bei Probleme finden Sie auf unserer Community-Seite weitere Informationen dazu, wie Sie uns kontaktieren können.