Gradle-Importe aktualisieren
Das neue SDK erfordert nur eine Abhängigkeit für jede ML Kit API. 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 im Rahmen Ihrer Anwendung bereitgestellt. Dünne Modelle müssen heruntergeladen werden. Einige APIs sind sowohl in gebündelter als auch in dünner Form verfügbar, andere nur in einer Form:
API | Gebündelt | Dünn |
---|---|---|
Texterkennung | x (Beta) | x |
Gesichtserkennung | x | x |
Barcode-Scan | x | x |
Bildbeschriftung | 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
), wie in den folgenden Tabellen dargestellt:
Gebündelte Modelle
API | Alte Artefakte | Neues Artefakt |
---|---|---|
Barcode-Scan | 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.2.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.6 |
Bildbeschriftung | 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.8 |
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.1 |
Schlanke Modelle
API | Alte Artefakte | Neues Artefakt |
---|---|---|
Barcode-Scan | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0 |
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.0 |
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.2 |
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.2
com.google.mlkit:linkfirebase:17.0.0 |
Natural Language APIs
Gebündelte Modelle werden im Rahmen Ihrer Anwendung bereitgestellt. Schlanke Modelle müssen heruntergeladen werden:
API | Gebündelt | Dünn |
---|---|---|
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
), wie in den folgenden Tabellen dargestellt:
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.5 |
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.3 |
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 |
Kursnamen aktualisieren
Wenn Ihr Kurs in dieser Tabelle angezeigt wird, nehmen Sie die entsprechende Änderung vor:
Alter Kurs | Neuer Kurs |
---|---|
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 |
Halten Sie sich bei anderen Klassen an die folgenden 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 in Paketnamen außerdem das Präfix com.google.firebase.ml
durch com.google.mlkit
.
Methodennamen aktualisieren
Es gibt nur geringfügige Änderungen am Code:
- Instanziierung von Detektor/Scanner/Labelersteller/Übersetzer... wurde geändert. Für jede Funktion gibt es jetzt einen eigenen Einstiegspunkt. Beispiele: BarcodeScanning, Texterkennung, ImageLabeling, Translation... Aufrufe des Firebase-Dienstes „
getInstance()
“ werden durch Aufrufe der MethodegetClient()
des Funktionseinstiegspunkts ersetzt. - Die Standardinstanziierung für TextDetectr wurde entfernt, seit wir zusätzliche Bibliotheken zur Erkennung anderer Skripte wie Chinesisch und Koreanisch eingeführt haben. Deklarieren Sie eine Abhängigkeit von
com.google.android.gms:play-services-mlkit-text-recognition
und verwenden SieTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
, um Standardoptionen mit dem Modell zur Texterkennung mit lateinischen Buchstaben zu verwenden. - Die Standardinstanziierung für ImageLabeler und ObjectDetector wurde entfernt, seit wir für diese beiden Funktionen die Unterstützung benutzerdefinierter Modelle 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 SieImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
in Java. - Alle Ziehpunkte (z. B. Detektor, Scanner, Labelersteller, Übersetzer usw.) können geschlossen werden. Die Methode
close()
muss aufgerufen werden, wenn diese Objekte nicht mehr verwendet werden. Wenn Sie sie in einem Fragment oder in einer AppCompatActivity verwenden, können Sie dies ganz einfach tun, indem Sie LifecycleOwner.getLifecycle() für das Fragment oder die AppCompatActivity und anschließend Lifecycle.addObserver aufrufen. processImage()
unddetectInImage()
in den Vision APIs wurden aus Konsistenzgründen inprocess()
umbenannt .- In den Natural Language APIs wird jetzt der Begriff „Sprachcode“ (gemäß BCP-47-Standard) anstelle von „Sprachcode“ verwendet.
- Getter-Methoden in xxxOptions-Klassen wurden entfernt.
- Die Methode „getBitmap()“ in der Klasse „InputImage“ (ersetzt
FirebaseVisionImage
) wird im Rahmen der öffentlichen Schnittstelle nicht mehr unterstützt. UnterBitmapUtils.java
im ML Kit-Kurzanleitungsbeispiel finden Sie eine Konvertierung der Bitmap aus verschiedenen Eingaben. - FirebaseVisionImageMetadata wurden entfernt. Sie können lediglich Bildmetadaten wie Breite, Höhe, RotationDegrees und Format an die Konstruktionsmethoden von InputImages ü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 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())
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 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());
API-spezifische Änderungen
Barcode scannen
Für die Barcode Scanning API gibt es jetzt zwei Möglichkeiten, die Modelle bereitzustellen:
- Über Google Play-Dienste (auch als „schlanke“ bezeichnet) (empfohlen): Dadurch wird die App-Größe verringert und das Modell wird von den Apps gemeinsam verwendet. Entwickler müssen das Modell jedoch herunterladen, bevor sie es zum ersten Mal verwenden.
- Mit dem APK Ihrer App, auch als „gebündelt“ bezeichnet, wird die App größer, aber das Modell kann sofort verwendet werden.
Die beiden Implementierungen unterscheiden sich geringfügig, wobei die gebündelte Version einige Verbesserungen gegenüber der schlanken Version bietet. 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 Google Play-Dienste (auch als „schlanke“ bezeichnet) (empfohlen): Dadurch wird die App-Größe verringert und das Modell wird von den Apps gemeinsam verwendet. Entwickler müssen das Modell jedoch herunterladen, bevor sie es zum ersten Mal verwenden.
- Mit dem APK Ihrer App, auch als „gebündelt“ bezeichnet, wird die Downloadgröße der App erhöht, aber das Modell kann sofort verwendet werden.
Das Verhalten der Implementierungen ist identisch.
Übersetzung
TranslateLanguage
verwendet für seine Konstanten jetzt lesbare Namen (z.B.ENGLISH
) anstelle von Sprach-Tags (EN
). Außerdem heißen sie jetzt @StringDef anstelle von @IntDef und der Wert der Konstante ist das entsprechende BCP 47-Sprachtag.Wenn in Ihrer App die Option „Gerät inaktiv“ als Downloadbedingung verwendet wird, wurde diese Option entfernt und kann nicht mehr verwendet werden. Du kannst die Option zum Aufladen des Geräts weiterhin verwenden. Wenn Sie ein komplexeres Verhalten wünschen, können Sie den Aufruf von
RemoteModelManager.download
hinter Ihrer eigenen Logik verzögern.
AutoML Image Labeling
Wenn in Ihrer App die Downloadbedingung „Gerät inaktiv“ verwendet wird, wurde diese Option entfernt und kann nicht mehr verwendet werden. Du kannst weiterhin die Option zum Aufladen des Geräts verwenden.
Wenn Sie ein komplexeres Verhalten wünschen, können Sie den Aufruf von RemoteModelManager.download
hinter Ihrer eigenen Logik verzögern.
Objekterkennung und -tracking
Wenn Ihre App die Objekterkennung mit grober Klassifizierung verwendet, beachten Sie, dass das neue SDK die Rückgabe der Klassifizierungskategorie für erkannte Objekte durch das neue SDK geändert hat.
Die Klassifizierungskategorie wird als Instanz von DetectedObject.Label
anstelle einer Ganzzahl zurückgegeben. Alle möglichen Kategorien für den groben Klassifikator sind in der Klasse PredefinedCategory
enthalten.
Hier ein Beispiel für den alten und den 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 ein Beispiel für den alten und den 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 Klassifizierung eines Objekts gering ist, wird einfach kein Label zurückgegeben.
Firebase-Abhängigkeiten entfernen (optional)
Dieser Schritt gilt nur, wenn die folgenden Bedingungen erfüllt sind:
- Firebase ML Kit ist die einzige Firebase-Komponente, die Sie verwenden.
- Sie verwenden nur On-Device-APIs.
- Sie verwenden keine Modellbereitstellung.
In diesem Fall können Sie die Firebase-Abhängigkeiten nach der Migration entfernen. Gehen Sie hierzu so vor:
- Entfernen Sie die Firebase-Konfigurationsdatei, indem Sie die Konfigurationsdatei „google-services.json“ im Modulverzeichnis (auf App-Ebene) Ihrer App löschen.
- Ersetzen Sie das Google Services-Gradle-Plug-in in der Gradle-Datei Ihres Moduls (auf App-Ebene) (in der Regel app/build.gradle) durch das Strict Version Matcher-Plug-in:
Vorher
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // … }
Nachher
apply plugin: 'com.android.application' apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' android { // … }
- Ersetzen Sie den Klassenpfad des Gradle-Plug-ins für Google-Dienste in der Gradle-Datei Ihres Projekts (auf Stammebene) (build.gradle) durch den Pfad für das Strict Version Matcher-Plug-in:
Vorher
buildscript { dependencies { // ... classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin } }
Nachher
buildscript { dependencies { // ... classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1' } }
Löschen Sie die Firebase-App in der Firebase Console gemäß der instructions auf der Firebase-Supportwebsite.
Hilfe erhalten
Falls Probleme auftreten, findest du auf unserer Community-Seite eine Übersicht über die Kanäle, über die du mit uns Kontakt aufnehmen kannst.