Migration für iOS

Voraussetzungen

Bevor Sie mit der Migration Ihres Codes beginnen, sollten Sie sich vergewissern, dass die folgenden Anforderungen erfüllt sind:

  • ML Kit unterstützt Xcode 13.2.1 oder höher.
  • ML Kit unterstützt iOS 10 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 zur Verfügung gestellt. Sie können Frameworks und CocoaPods nicht mischen. Um diese Bibliothek verwenden zu können, müssen Sie also zuerst migrieren, um CocoaPods zu verwenden.

CocoaPods aktualisieren

Aktualisieren Sie die Abhängigkeiten für die ML Kit iOS-CocoaPods in der Podfile-Datei Ihrer App:

APIAlte Pod-Name(n)Neuer Pod-Name(n)
Barcode-Scan Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/Barcode-Scanning
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/Texterkennung
AutoML-Bild-Labeling (gebündeltes Modell) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML-Bild-Labeling (Modelldownload aus Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
Sprach-ID Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/Sprach-ID
Intelligente Antwort Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Übersetzen Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Übersetzer

Namen von Klassen, Enums und Typen aktualisieren

Im Allgemeinen müssen die Klassen , enums und Typen wie folgt umbenannt werden:

  • Swift: Das Präfix Vision aus Klassennamen und Enums entfernen
  • Objective-C: Klassennamen sowie Enum-Präfixe FIRVision und FIR durch MLK ersetzen

Diese allgemeine Regel gilt für einige Klassennamen und -typen nicht:

Swift

Alte Klasse oder alter TypNeuer Kurs oder 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 TypNeuer Kurs oder 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 Methodennamen gemäß den folgenden Regeln:

  • Klassen des Domaineinstiegspunkts (Vision, NaturalLanguage) sind nicht mehr vorhanden. Sie wurden durch aufgabenspezifische Klassen ersetzt. Ersetzen Sie Aufrufe der verschiedenen Fabrikmethoden des jeweiligen Detektors durch direkte Aufrufe der Factory-Methode jedes Detektors.

  • Die Klasse VisionImageMetadata wurde zusammen mit der Enum VisionDetectorImageOrientation entfernt. Mit der Eigenschaft orientation von VisionImage kannst du die Anzeigeausrichtung eines Bildes angeben.

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

  • Das Konfidenzattribut 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 Methode objectDetector zum Abrufen einer neuen ObjectDetector-Instanz wurde entfernt. Verwenden Sie stattdessen objectDetector(options:).

  • Das Attribut type wurde aus ImageLabeler entfernt und das Attribut entityID wurde aus der Ergebnisklasse ImageLabel für das Bild-Labeling entfernt.

  • Die Barcode Scan API detect(in _:, completion:) wurde zur Vereinheitlichung mit anderen Vision APIs in process(_:, completion:) umbenannt.

  • Die Natural Language APIs verwenden jetzt den Begriff "Sprachtag" (wie durch den BCP-47-Standard definiert) anstelle von "Sprachcode".

  • TranslateLanguage verwendet jetzt lesbare Namen (z. B. .english) für seine Konstanten anstelle von Sprachtags ( 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 in Ihrer App die Objektklassifizierung verwendet wird, beachten Sie, dass durch das neue SDK die Rückgabe der Klassifizierungskategorie für erkannte Objekte durch das neue SDK geändert wurde.

VisionObjectCategory in VisionObject wird in einem ObjectLabel-Objekt als text anstelle einer Ganzzahl zurückgegeben. Alle möglichen Stringkategorien sind in der Aufzählung DetectedObjectLabel enthalten.

Beachten Sie, dass die Kategorie .unknown entfernt wurde. Wenn die Konfidenz für die Klassifizierung eines Objekts niedrig ist, gibt der Klassifikator überhaupt kein Label zurück.

Hier ist 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 ist 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 ist nur möglich, 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 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 wie pod 'Firebase/Analytics' aus Ihrer Podfile-Datei.
  • Entfernen Sie alle FirebaseApp-Initialisierungen, wie z. B. FirebaseApp.configure(), aus Ihrem Code.
  • Löschen Sie Ihre 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 dich mit uns in Verbindung setzen kannst.