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 com.google.android.gms
-Namespace für Bibliotheken, die von Google Play-Diensten abhängig sind.
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 schmaler Form verfügbar, andere nur in einer Form oder in einer anderen:
API | Gebündelt | Dünn |
---|---|---|
Texterkennung | x (Beta) | x |
Gesichtserkennung | x | x |
Barcode-Scan | x | x |
Bildlabels | x | x |
Objekterkennung und -tracking | x | - |
Aktualisieren Sie die Abhängigkeiten für die ML Kit-Android-Bibliotheken in der Gradle-Datei des Moduls (auf App-Ebene, normalerweise app/build.gradle
) gemäß den folgenden Tabellen:
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.0.3 |
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.5 |
Bildlabels | 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.7 |
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.0 |
Dünne 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.1.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:18.0.2 |
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 |
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.1 com.google.mlkit:linkfirebase:17.0.0 |
Natural Language APIs
Gebündelte Modelle werden im Rahmen Ihrer Anwendung bereitgestellt. Thin Models 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 des Moduls (auf App-Ebene, normalerweise app/build.gradle
) 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.4 |
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.2 |
Dünne 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 |
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 angezeigt wird, nehmen Sie die angegebene Ä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.FirebaseVisionOnDeviceAutoMLImageLabelerOptionen | com.google.mlkit.vision.label.custom.CustomImageLabelerOptions |
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions | com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions |
Beachten Sie bei anderen Kursen 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 außerdem in den Paketnamen das Präfix com.google.firebase.ml
durch com.google.mlkit
.
Methodennamen aktualisieren
Es gibt nur minimale Änderungen am Code:
- Detektor/Scanner/Labeler/Übersetzer... hat die Instanziierung geändert. Jedes Feature hat jetzt einen eigenen Einstiegspunkt. Zum Beispiel: BarcodeScanning, TextRecognition, ImageLabeling, Translation... Aufrufe an den Firebase-Dienst
getInstance()
werden durch Aufrufe der MethodegetClient()
des Feature-Einstiegspunkts ersetzt. - Die Standardinstanziierung für TextRecognition wurde entfernt, da wir zusätzliche Bibliotheken für die Erkennung anderer Skripts wie Chinesisch und Koreanisch eingeführt haben. Wenn Sie Standardoptionen mit dem Texterkennungsmodell mit lateinischer Schrift verwenden möchten, deklarieren Sie eine Abhängigkeit von
com.google.android.gms:play-services-mlkit-text-recognition
und verwenden SieTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - Die Standardinstanziierung für ImageLabeler und ObjectDetector wurde entfernt, da wir diese beiden Features jetzt unterstützen. 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 (Detektor/Scanner/Labeler/Übersetzer...) 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 in einer AppCompatActivity verwenden, können Sie einfach LifecycleOwner.getLifecycle() für das Fragment oder AppCompatActivity aufrufen und dann Lifecycle.addObserver aufrufen. processImage()
unddetectInImage()
wurden in den Vision APIs aus Konsistenzgründen inprocess()
umbenannt.- Die Natural Language APIs verwenden jetzt den Begriff „Sprach-Tag“ (gemäß BCP 47-Standard) anstelle von „Sprachcode“.
- 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. InBitmapUtils.java
im ML Kit-Schnellstartbeispiel finden Sie Informationen dazu, wie Sie die Bitmap aus verschiedenen Eingaben konvertieren. - FirebaseVisionImageMetadata wurde entfernt. Sie können lediglich Bildmetadaten wie Breite, Höhe und RotationGrad in die Konstruktionsmethoden von InputImages übergeben.
Hier 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 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 die Google Play-Dienste (dünn) (empfohlen): Dadurch wird die App-Größe verringert und das Modell wird zwischen Apps geteilt. Entwickler müssen jedoch darauf achten, dass das Modell heruntergeladen wird, bevor es zum ersten Mal verwendet wird.
- Wenn die APK-Datei Ihrer App „gebündelt“ ist, wird die App vergrößert, das Modell kann jedoch sofort verwendet werden.
Die beiden Implementierungen unterscheiden sich leicht voneinander. Die gebündelte Version weist im Vergleich zur „dünnen“ Version eine Reihe von Verbesserungen auf. Details zu diesen Unterschieden finden Sie in den Richtlinien der Barcode Scanning API.
Gesichtserkennung
Für die Gesichtserkennungs-API gibt es zwei Möglichkeiten, wie die Modelle bereitgestellt werden können:
- Über die Google Play-Dienste (dünn) (empfohlen): Dadurch wird die App-Größe verringert und das Modell wird zwischen Apps geteilt. Entwickler müssen jedoch darauf achten, dass das Modell heruntergeladen wird, bevor es zum ersten Mal verwendet wird.
- Wenn das APK Ihrer App „Bundle“ ist, wird dadurch die Downloadgröße der App erhöht, das Modell kann jedoch sofort verwendet werden.
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 übereinstimmende BCP 47-Sprach-Tag.Wenn in Ihrer App die Downloadbedingung „Geräte inaktiv“ verwendet wird, wurde diese Option entfernt und kann nicht mehr verwendet werden. Sie können weiterhin die Option zum Aufladen des Geräts verwenden. Wenn Sie komplexeres Verhalten wünschen, können Sie das Aufrufen von
RemoteModelManager.download
hinter Ihrer eigenen Logik verzögern.
AutoML-Image-Labeling
Wenn in Ihrer App die Downloadbedingung „Geräte 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 das Aufrufen von RemoteModelManager.download
hinter Ihrer eigenen Logik verzögern.
Objekterkennung und -tracking
Wenn in Ihrer App die Objekterkennung mit grober Klassifizierung verwendet wird, hat das neue SDK die Klassifizierungskategorie für erkannte Objekte geändert.
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 kein Label zurückgegeben.
Firebase-Abhängigkeiten entfernen (optional)
Dieser Schritt gilt nur, wenn folgende Bedingungen erfüllt sind:
- Firebase ML Kit ist die einzige von Ihnen verwendete Firebase-Komponente.
- Sie verwenden nur APIs auf dem Gerät.
- Sie verwenden keine Modellbereitstellung.
In diesem Fall können Sie die Firebase-Abhängigkeiten nach der Migration entfernen. Gehen Sie so vor:
- Entfernen Sie die Firebase-Konfigurationsdatei, indem Sie die google-services.json-Konfigurationsdatei im Modulverzeichnis (App-Ebene) Ihrer App löschen.
- Ersetzen Sie das Gradle-Plug-in für Google-Dienste in Ihrer Gradle-Datei des Moduls (auf App-Ebene) (normalerweise app/build.gradle) durch das Strict Versions-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 Ihrem Projekt (Stammebene) Gradle-Datei (build.gradle) durch die des Strict Version Matcher-Plug-ins:
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 Ihre Firebase-App in der Firebase Console. Folgen Sie dabei der Anleitung auf der Firebase-Supportwebsite.
Hilfe erhalten
Falls Probleme auftreten, findest du auf unserer Community-Seite eine Übersicht der verfügbaren Kanäle für die Kontaktaufnahme.