Migration für iOS

In diesem Leitfaden wird beschrieben, wie Sie von ML Kit for Firebase für iOS migrieren.

Vorbereitung

Bevor Sie mit der Migration Ihres Codes beginnen, müssen Sie die folgenden Anforderungen erfüllen:

  • ML Kit unterstützt Xcode 13.2.1 oder höher.
  • ML Kit unterstützt iOS 15.5 oder höher.
  • 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 Cocoapod 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:

APIAlte Pod-NamenName(n) des neuen Pods
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-Bildlabeling (gebündeltes Modell) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML-Bildlabeling (Modell heruntergeladen) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Wenn Sie benutzerdefinierte Modelle hosten und herunterladen möchten, verschieben Sie Ihre Modelle in Cloud Storage und fügen Sie Ihrer App Download-Logik 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 Vision aus Klassennamen und Enums.
  • Objective-C: Ersetzen Sie sowohl FIRVision als auch FIR (Klassennamen und Enum-Präfixe) durch MLK.

Für einige Klassennamen und ‑typen gilt diese allgemeine Regel nicht:

Swift

Alte Klasse oder alter TypNeue Klasse oder neuer Typ
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Muss manuell heruntergeladen werden. Remote-Modelle, die in Firebase gehostet werden, sind nicht mehr verfügbar. Weitere Informationen finden Sie in der Migrationsanleitung für 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 TypNeue Klasse oder neuer Typ
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Erfordert manuellen Download. Remote-Modelle, die in Firebase gehostet werden, sind nicht mehr verfügbar. Weitere Informationen finden Sie in der Migrationsanleitung für Firebase ML zu Cloud Storage.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

Methodennamen aktualisieren

Aktualisieren Sie die Methodennamen gemäß diesen Regeln:

  • Die Klassen für Domain-Einstiegspunkte (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 jedes Detektors.

  • Die Klasse VisionImageMetadata wurde zusammen mit dem Enum VisionDetectorImageOrientation entfernt. Verwenden Sie das Attribut orientation von VisionImage, um die Ausrichtung eines Bildes festzulegen.

  • Die Methode onDeviceTextRecognizer, die eine neue TextRecognizer-Instanz abruft, wurde in textRecognizer umbenannt.

  • Die Eigenschaft „confidence“ wurde aus den Klassen für Texterkennungsergebnisse entfernt, einschließlich TextElement, TextLine und TextBlock.

  • Die Methoden onDeviceImageLabeler und onDeviceImageLabeler(options:) zum Abrufen einer neuen ImageLabeler-Instanz wurden zusammengeführt und in imageLabeler(options:) umbenannt.

  • Die objectDetector-Methode zum Abrufen einer neuen ObjectDetector-Instanz wurde entfernt. Verwenden Sie stattdessen objectDetector(options:).

  • Die Property type wurde aus ImageLabeler entfernt und die Property entityID wurde aus der Bildlabeling-Ergebnisklasse ImageLabel entfernt.

  • Die Barcode-Scanning-API detect(in _:, completion:) wurde in process(_:, completion:) umbenannt, um sie an andere Vision APIs anzugleichen.

  • In den Natural Language APIs wird jetzt der Begriff „Sprach-Tag“ (wie im BCP-47-Standard definiert) anstelle von „Sprachcode“ verwendet.

  • TranslateLanguage verwendet 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. Alle möglichen Stringkategorien sind im Enum DetectedObjectLabel enthalten.

Die Kategorie .unknown wurde entfernt. Wenn die Konfidenz für die Klassifizierung eines Objekts gering ist, gibt der Classifier ü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

Firebase-Abhängigkeiten nach der Migration entfernen Gehen Sie so vor:

  • Entfernen Sie die Firebase-Konfigurationsdatei, indem Sie die Datei GoogleService-Info.plist aus dem Verzeichnis Ihrer App und Ihrem Xcode-Projekt löschen.
  • Entfernen Sie alle Firebase-Cocoapods, z. B. pod 'Firebase/Analytics', aus Ihrer Podfile-Datei.
  • Entfernen Sie alle FirebaseApp-Initialisierungen, z. B. 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.