Migration für iOS

Voraussetzungen

Stellen Sie vor der Migration Ihres Codes sicher, dass Sie die folgenden Anforderungen erfüllen:

  • ML Kit unterstützt Xcode 13.2.1 oder höher.
  • ML Kit unterstützt iOS-Version 10 oder höher.
  • Das 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. Frameworks und CocoaPods können nicht miteinander gemischt werden. Wenn du also diese Bibliothek verwenden möchtest, musst du zuerst zu CocoaPods migrieren.

CocoaPods aktualisieren

Aktualisieren Sie die Abhängigkeiten für die CocoaPods von ML Kit iOS 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/Gesichtserkennung
Bildbeschriftung Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Objekterkennung und -tracking Firebase/MLVisionObjectDetection GoogleMLKit/Objekterkennung
Texterkennung Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/Texterkennung
AutoML-Bildlabels (Set) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML-Bildlabels (Modelldownload von Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
Sprach-ID Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/Sprach-ID
Intelligente Antwort Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/Intelligente Antwort
Übersetzen Firebase/MLNaturalLanguage
Firebase/MLNLÜbersetzen
GoogleMLKit/Übersetzen

Namen von Klassen, Enums und Typen aktualisieren

Im Allgemeinen müssen Klassen , Enums und Typen folgendermaßen umbenannt werden:

  • Swift: Das Präfix Vision aus Klassennamen und Aufzählungen entfernen
  • Ziel-C: FIRVision- und FIR-Klassennamen und Aufzählungspräfixe durch MLK ersetzen

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

Swift

Alte Klasse oder TypNeue Klasse oder neuer Typ
AutoMLLocalModel Lokalmodell
AutoML-Remote-Modell Benutzerdefiniertes Remote-Modell
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcode-Detektor Barcode-Scanner
Optionen für VisionBarcode-Detektoren Optionen für BarcodeScanner
Vision-Bild Vision-Bild (keine Änderung)
Logo: VisionPoint VisionPoint (keine Änderung)
VisionOnDeviceAutoMLImageLabelerOptions Optionen für benutzerdefinierte Bildlabels
Optionen für VisionOnDeviceImageLabeler Optionen für ImageLabeler

Objective-C

Alte Klasse oder TypNeue Klasse oder neuer Typ
FIRAutoMLLocalModel MLKLokales Modell
FIRAutoMLRemoteModel MLKBenutzerdefiniertes Remote-Modell
FIRVisionBarcode-Erkennungsrückruf MLKBarcodeScanningCallback
FIRVisionBarcode-Detektor MLKBarcode-Scanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptionen
FIRVision-Bild MLKVision-Bild
FIRVisionOnDeviceAutoMLImageLabelerOptionen MLKCustomImageLabelerOptions
Optionen für FIRVisionOnDeviceImageLabeler MLKImageLabelerOptions
Logo: FIRVisionPoint MLKVision

Objective-C

Methodennamen aktualisieren

Aktualisieren Sie Methodennamen gemäß den folgenden Regeln:

  • Die Einstiegsklassen für Domains (Vision, NaturalLanguage) sind nicht mehr vorhanden. Sie wurden durch aufgabenspezifische Klassen ersetzt. Ersetze Aufrufe an die verschiedenen Factory-Methoden, um Detektoren durch direkte Aufrufe an die Factory-Methode jedes Detektors zu erhalten.

  • Die Klasse VisionImageMetadata mit der Aufzählung VisionDetectorImageOrientation wurde entfernt. Mit dem Attribut orientation von VisionImage gibst du die Anzeigeausrichtung eines Bildes an.

  • Die Methode onDeviceTextRecognizer zum Abrufen einer neuen TextRecognizer-Instanz wurde in textRecognizer umbenannt.

  • Das Konfidenzattribut wurde aus den Ergebnisklassen der Texterkennung entfernt, darunter 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 und das Attribut entityID aus der Ergebnisklasse ImageLabel des Bildlabels entfernt.

  • Die Barcode Scan API detect(in _:, completion:) wurde in process(_:, completion:) umbenannt, um mit anderen Vision APIs konsistent zu sein.

  • Die Natural Language APIs verwenden jetzt den Begriff „Sprach-Tag“ (gemäß BCP-47-Standard) anstelle von „Sprachcode“.

  • TranslateLanguage verwendet für seine Konstanten jetzt lesbare Namen wie .english und keine Sprach-Tags wie .en.

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 bitte, dass sich das neue SDK auf die Art und Weise auswirkt, mit der die Klassifizierungskategorie für erkannte Objekte zurückgegeben wird.

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

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

Hier 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 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 (optional)

Dieser Schritt gilt nur, 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 die Modellbereitstellung nicht.

In diesem Fall können Sie die Firebase-Abhängigkeiten nach der Migration entfernen. Gehen Sie so vor:

  • Entfernen Sie die Firebase-Konfigurationsdatei. Löschen Sie dazu die Datei „GoogleService-Info.plist“ aus dem Verzeichnis Ihrer Anwendung und Ihrem Xcode-Projekt.
  • Entfernen Sie alle Firebase-CocoaPods wie pod 'Firebase/Analytics' aus Ihrer Podfile-Datei.
  • Entfernen Sie alle FirebaseApp-Initialisierungen wie FirebaseApp.configure() aus Ihrem Code.
  • Löschen Sie Ihre Firebase-App gemäß der Anleitung auf der Firebase-Supportwebsite in der Firebase Console.

Hilfe erhalten

Solltest du Probleme haben, findest du auf der Community-Seite eine Übersicht der Kanäle, über die du dich an uns wenden kannst.