In diesem Leitfaden wird erläutert, wie Sie von ML Kit für Firebase für iOS migrieren.
Vorbereitung
Bevor Sie mit der Migration Ihres Codes beginnen, müssen die folgenden Anforderungen erfüllt sein:
- ML Kit unterstützt Xcode 13.2.1 oder höher.
- ML Kit unterstützt iOS-Versionen ab 15.5.
- ML Kit unterstützt keine 32-Bit-Architekturen (i386 und armv7). ML Kit unterstützt 64-Bit-Architekturen (x86_64 und arm64).
- Die ML Kit-Bibliothek wird nur als Cocoapods bereitgestellt. Frameworks und CocoaPods können nicht kombiniert werden. Wenn Sie diese Bibliothek verwenden möchten, müssen Sie zuerst zu CocoaPods migrieren.
CocoaPods aktualisieren
Aktualisieren Sie die Abhängigkeiten für die ML Kit-iOS-CocoaPods in der Podfile-Datei Ihrer App:
| API | Alte(r) Pod-Name(n) | Neue(r) Pod-Name(n) |
|---|---|---|
| Scannen von Barcodes | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| Gesichtserkennung | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| Bildbeschriftung | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
| Objekterkennung und -tracking | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| Texterkennung | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| AutoML Image-Labeling (gebündeltes Modell) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| AutoML-Bild-Labeling (Modell heruntergeladen) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Wenn Sie benutzerdefinierte Modelle hosten und herunterladen möchten, verschieben Sie sie in Cloud Storage und fügen Sie Ihrer App Downloadlogik hinzu, um sie als lokale Modelle zu laden. Weitere Informationen finden Sie in der Migrationsanleitung für Firebase ML zu Cloud Storage. |
| Sprach-ID | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| Intelligente Antwort | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| Übersetzen | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
Namen von Klassen, Enums und Typen aktualisieren
Im Allgemeinen müssen Klassen, Enums und Typen so umbenannt werden:
- Swift: Entfernen Sie das Präfix
Visionaus Klassennamen und Enums. - Objective-C: Ersetzen Sie die Klassennamen- und Enum-Präfixe
FIRVisionundFIRdurchMLK.
Für einige Klassennamen und ‑typen gilt diese allgemeine Regel nicht:
Swift
| Alte Klasse oder alter Typ | Neue Klasse oder neuer Typ |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Erfordert manuellen Download. Von Firebase gehostete Remote-Modelle werden eingestellt. Weitere Informationen finden Sie im Leitfaden zur Migration von Firebase ML zu Cloud Storage. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (keine Änderung) |
| VisionPoint | VisionPoint (keine Änderung) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| Alte Klasse oder alter Typ | Neue Klasse oder neuer Typ |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel Erfordert manuellen Download. Von Firebase gehostete Remote-Modelle werden eingestellt. Weitere Informationen finden Sie im Leitfaden zur Migration von Firebase ML zu Cloud Storage. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
Methodennamen aktualisieren
Aktualisieren Sie Methodennamen gemäß den folgenden Regeln:
Die Domain-Einstiegspunktklassen (
Vision,NaturalLanguage) sind nicht mehr vorhanden. Sie wurden durch aufgabenspezifische Klassen ersetzt. Ersetzen Sie Aufrufe der verschiedenen Factory-Methoden zum Abrufen von Detektoren durch direkte Aufrufe der Factory-Methode des jeweiligen Detektors.Die Klasse
VisionImageMetadatawurde zusammen mit dem EnumVisionDetectorImageOrientationentfernt. Verwenden Sie das AttributorientationvonVisionImage, um die Anzeigeausrichtung eines Bildes anzugeben.Die Methode
onDeviceTextRecognizer, die eine neueTextRecognizer-Instanz abruft, wurde intextRecognizerumbenannt.Das Attribut „confidence“ wurde aus den Ergebnisklassen der Texterkennung entfernt, einschließlich
TextElement,TextLineundTextBlock.Die Methoden
onDeviceImageLabelerundonDeviceImageLabeler(options:)zum Abrufen einer neuenImageLabeler-Instanz wurden zusammengeführt und inimageLabeler(options:)umbenannt.Die Methode
objectDetectorzum Abrufen einer neuenObjectDetector-Instanz wurde entfernt. Verwenden Sie stattdessenobjectDetector(options:).Das Attribut
typewurde ausImageLabelerund das AttributentityIDaus der Ergebnisklasse für die Bildlabelerstellung,ImageLabel, entfernt.Die Barcode-Scanning-API
detect(in _:, completion:)wurde inprocess(_:, completion:)umbenannt, um mit anderen Vision APIs konsistent zu sein.Die Natural Language APIs verwenden jetzt den Begriff „Sprach-Tag“ (wie im BCP-47-Standard definiert) anstelle von „Sprachcode“.
TranslateLanguageverwendet jetzt lesbare Namen (z. B..english) für seine Konstanten anstelle von Sprach-Tags (z. B..en).
Hier sind einige Beispiele für alte und neue Swift-Methoden:
Alt
let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)
let detector = Vision.vision().faceDetector(options: options)
let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)
let detector = Vision.vision().objectDetector()
Neu
let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = FaceDetector.faceDetector(options: options)
let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
Hier sind einige Beispiele für alte und neue Objective-C-Methoden:
Alt
FIRVisionOnDeviceImageLabelerOptions *options = [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; options.confidenceThreshold = 0.75; FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabelerWithOptions:options]; FIRVisionFaceDetector *detector = [[FIRVision vision] faceDetectorWithOptions: options]; FIRAutoMLLocalModel *localModel = [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; FIRVisionOnDeviceAutoMLImageLabelerOptions *options = [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc] initWithLocalModel: localModel]; options.confidenceThreshold = 0.75 FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options]; FIRVisionObjectDetector *detector = [[FIRVision vision] objectDetector];
Neu
MLKImageLabelerOptions *options = [[MLKImageLabelerOptions alloc] init]; options.confidenceThreshold = @(0.75); MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKFaceDetector *detector = [MLKFaceDetector faceDetectorWithOptions:options]; MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; MLKCustomImageLabelerOptions *options = [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.75) MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init]; MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
API-spezifische Änderungen
Objekterkennung und -tracking
Wenn Ihre App die Objektklassifizierung 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.
VisionObjectCategory in VisionObject wird als text in einem ObjectLabel-Objekt anstelle einer Ganzzahl zurückgegeben. In der Aufzählung DetectedObjectLabel sind alle möglichen Stringkategorien enthalten.
Die Kategorie .unknown wurde entfernt. Wenn die Konfidenz bei der Klassifizierung eines Objekts niedrig ist, gibt der Klassifikator überhaupt kein Label zurück.
Hier ist ein Beispiel für den alten und neuen Swift-Code:
Alt
if (object.classificationCategory == .food) {
...
}Neu
if let label = object.labels.first {
if (label.text == DetectedObjectLabel.food.rawValue) {
...
}
}
// or
if let label = object.labels.first {
if (label.index == DetectedObjectLabelIndex.food.rawValue) {
...
}
}Hier ist ein Beispiel für den alten und neuen Objective-C-Code:
Alt
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}Neu
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}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 Datei
GoogleService-Info.plistaus dem Verzeichnis Ihrer App und Ihrem Xcode-Projekt löschen. - Entfernen Sie alle Firebase-Cocoapods wie
pod 'Firebase/Analytics'aus Ihrem Podfile. - Entfernen Sie alle FirebaseApp-Initialisierungen wie
FirebaseApp.configure()aus Ihrem Code. - 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.