Migration für Android

In dieser Anleitung wird beschrieben, wie Sie von ML Kit for Firebase für Android migrieren.

Gradle-Importe aktualisieren

Für jede ML Kit API ist im ML Kit SDK nur eine Abhängigkeit erforderlich. Sie müssen keine gängigen 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 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:

APIGebündeltSchlank
Texterkennungx (Beta)x
Gesichtserkennungxx
Scannen von Barcodesxx
Hinzufügen von Bild-Labelsxx
Objekterkennung und -trackingx-

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

APIAlte ArtefakteNeues 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

APIAlte ArtefakteNeues 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

APIAltes ArtefaktNeues 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 zu Cloud Storage und fügen Sie Ihrer App Downloadlogik hinzu, um sie mit LocalModel zu laden. Weitere Informationen finden Sie im Migrationsleitfaden von Firebase ML zu Cloud Storage.

Natural Language APIs

Gebündelte Modelle werden als Teil Ihrer Anwendung bereitgestellt. Schlanke Modelle müssen heruntergeladen werden:

APIGebündeltSchlank
Sprach-IDxx
Intelligente Antwortxx (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

APIAlte ArtefakteNeues 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

APIAlte ArtefakteNeues 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 KlasseNeue 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

Muss manuell heruntergeladen werden. Remote-Modelle, die in Firebase gehostet werden, sind veraltet. Weitere Informationen finden Sie im Migrationsleitfaden 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 folgende Regeln:

  • Entfernen Sie das Präfix FirebaseVision aus dem Klassennamen.
  • Entfernen Sie andere Präfixe, die mit dem Präfix Firebase beginnen, aus dem Klassennamen.

Ersetzen Sie außerdem in Paketnamen das Präfix com.google.firebase.ml durch com.google.mlkit.

Methodennamen aktualisieren

Es sind nur geringfügige Codeänderungen erforderlich:

  • Die Instanziierung von Detektor/Scanner/Labeler/Übersetzer wurde geändert. Jede Funktion hat jetzt einen eigenen Einstiegspunkt, z. B. BarcodeScanning, TextRecognition, ImageLabeling, Translation. Aufrufe des Firebase-Dienstes getInstance() werden durch Aufrufe der getClient()-Methode des Funktionseinstiegspunkts ersetzt.
  • Die Standardinstanziierung für TextRecognizer wurde entfernt, da wir zusätzliche Bibliotheken zur Erkennung anderer Schriftsysteme wie Chinesisch und Koreanisch eingeführt haben. Wenn Sie Standardoptionen mit dem Modell für die Texterkennung im lateinischen Schriftsystem verwenden möchten, deklarieren Sie eine Abhängigkeit von com.google.android.gms:play-services-mlkit-text-recognition und verwenden Sie TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS).
  • Die Standardinstanziierung für ImageLabeler und ObjectDetector wurde entfernt, da wir die Unterstützung für benutzerdefinierte Modelle für diese beiden Funktionen eingeführt haben. Wenn Sie beispielsweise Standardoptionen mit dem Basismodell in ImageLabeling verwenden möchten, deklarieren Sie eine Abhängigkeit von com.google.mlkit:image-labeling und verwenden Sie ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) in Java.
  • Alle Handles (Detektor, Scanner, Labeler, Übersetzer usw.) können geschlossen werden. Achten Sie darauf, dass die Methode close() aufgerufen wird, wenn diese Objekte nicht mehr verwendet werden. Wenn Sie sie in einem Fragment oder AppCompatActivity verwenden, können Sie dazu einfach LifecycleOwner.getLifecycle() für das Fragment oder AppCompatActivity und dann Lifecycle.addObserver aufrufen.
  • processImage() und detectInImage() in den Vision APIs wurden aus Konsistenzgründen in process() umbenannt.
  • In den Natural Language APIs wird jetzt der Begriff „Sprachtag“ (wie im BCP 47-Standard definiert) anstelle von „Sprachcode“ verwendet.
  • Getter-Methoden in xxxOptions-Klassen wurden entfernt.
  • Die getBitmap()-Methode in der InputImage-Klasse (als Ersatz für FirebaseVisionImage) wird nicht mehr als Teil der öffentlichen Schnittstelle unterstützt. Im ML Kit-Schnellstartbeispiel finden Sie unter BitmapUtils.java Informationen zum Konvertieren von Bitmaps aus verschiedenen Eingaben.
  • FirebaseVisionImageMetadata wurde entfernt. Sie können einfach Bildmetadaten wie width, height, rotationDegrees und format in die Konstruktionsmethoden von InputImage einfügen.

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

Scannen von Barcodes

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 „gebündelt“: Dadurch wird die App-Größe erhöht, aber das Modell ist sofort einsatzbereit.

Die beiden Implementierungen unterscheiden sich geringfügig. 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 „gebündelt“: Dadurch wird die Größe des App-Downloads erhöht, das Modell ist aber sofort einsatzbereit.

Das Verhalten der Implementierungen ist identisch.

Translation

  • TranslateLanguage verwendet 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 Bildkennzeichnung mit AutoML ist eingestellt und wird am 15. Juni 2027 deaktiviert. Sie sollten Cloud Storage zum Hosten von Modellen verwenden und Ihrer App Downloadlogik hinzufügen, um die Modelle herunterzuladen. Weitere Informationen finden Sie im Migrationsleitfaden für 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, wird kein Label zurückgegeben.

Firebase-Abhängigkeiten entfernen

Entfernen Sie die Firebase-Abhängigkeiten nach der Migration. Gehen Sie so vor:

  • Entfernen Sie die Firebase-Konfigurationsdatei, indem Sie die Konfigurationsdatei google-services.json im Modulverzeichnis Ihrer App (auf App-Ebene) löschen.
  • Ersetzen Sie das Gradle-Plug-in der Google-Dienste in der Gradle-Datei Ihres Moduls (auf App-Ebene, in der Regel app/build.gradle.kts) durch das Strict Version Matcher-Plug-in:

Vorher

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

android {
  // …
}

Nach

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 Problemen finden Sie auf unserer Community-Seite weitere Informationen dazu, wie Sie uns kontaktieren können.