Migration für iOS

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-Version 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 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 Ihrer App:

APIAlter Pod-Name(n)Name(n) des neuen Pods
Barcode-Scan Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Gesichtserkennung Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Bildlabel Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Objekterkennung und -tracking Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Texterkennung Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
AutoML-Bilderlabelung (kombiniertes Modell) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML-Bilderlabelung (Modelldownload aus Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
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, Enumerationen und Typen aktualisieren

Im Allgemeinen müssen Klassen, Enumerationen und Typen so umbenannt werden:

  • Swift: Entfernen Sie das Präfix Vision aus Klassennamen und Enumerationen.
  • Objective-C: Ersetzen Sie sowohl den Klassennamen als auch die FIRVision- und FIR-Präfixe für Enumerationen 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 CustomRemoteModel
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 MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

Methodennamen aktualisieren

Aktualisieren Sie die Methodennamen gemäß diesen Regeln:

  • Domain-Einstiegspunktklassen (Vision, NaturalLanguage) gibt es nicht mehr. Sie wurden durch aufgabenspezifische Kurse ersetzt. Ersetzen Sie Aufrufe der verschiedenen Methoden zum Abrufen von Sensoren durch direkte Aufrufe der jeweiligen Methoden.

  • Die Klasse VisionImageMetadata und das Enum VisionDetectorImageOrientation wurden entfernt. Verwenden Sie das Attribut orientation von VisionImage, um die Anzeigeausrichtung eines Bildes anzugeben.

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

  • Die Property „confidence“ wurde aus den Ergebnisklassen der Texterkennung 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:).

  • Das Attribut type wurde aus ImageLabeler entfernt und das Attribut entityID aus der Ergebnisklasse für die Bildbeschriftung ImageLabel.

  • Die Barcode-Scan-API detect(in _:, completion:) wurde in process(_:, completion:) umbenannt, um sie mit anderen Vision APIs in Einklang zu bringen.

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

  • In TranslateLanguage werden jetzt lesbare Namen (z. B. .english) für Konstanten anstelle von Sprach-Tags ( z. B. .en) verwendet.

Hier 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 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, beachten Sie, dass das neue SDK die Rückgabe der Klassifizierungskategorie für erkannte Objekte geändert hat.

VisionObjectCategory in VisionObject wird als text in einem ObjectLabel-Objekt zurückgegeben, anstatt als Ganzzahl. Die Enum-Liste DetectedObjectLabel enthält alle möglichen Stringkategorien.

Die Kategorie .unknown wurde entfernt. Wenn die Konfidenz bei der Klassifizierung eines Objekts niedrig ist, gibt der Klassifikator gar kein Label zurück.

Hier ein Beispiel für den alten und den 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 ein Beispiel für den alten und den 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 (optional)

Dieser Schritt gilt nur, wenn folgende 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 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 aus Ihrem Xcode-Projekt löschen.
  • Entfernen Sie alle Firebase-Cocoapods, z. B. pod 'Firebase/Analytics', aus Ihrer Podfile.
  • Entfernen Sie aus Ihrem Code alle FirebaseApp-Initialisierungen, z. B. FirebaseApp.configure().
  • Löschen Sie Ihre Firebase-App in der Firebase Console gemäß der Anleitung auf der Firebase-Supportwebsite.

Hilfe erhalten

Wenn Probleme auftreten, findest du auf unserer Community-Seite Informationen dazu, wie du dich mit uns in Verbindung setzen kannst.