Migration für iOS

Voraussetzungen

Stellen Sie vor der Migration des 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 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 keine Frameworks und CocoaPods kombinieren. Wenn Sie diese Bibliothek verwenden möchten, müssen Sie daher zuerst eine Migration durchführen, um CocoaPods zu verwenden.

CocoaPods aktualisieren

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

APIAlte Pod-NamenNeuer Pod-Name(n)
Barcode-Scan 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
Google MLKit/Texterkennung
AutoML-Bildlabel (gebündeltes Modell) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML-Bildlabel (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
Übersetzer Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Namen von Klassen, Enums und Typen aktualisieren

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

  • Swift: Entfernen Sie das Präfix Vision aus Klassennamen und Enums.
  • Objective-C: Die Klassennamen FIRVision und FIR sowie die enum-Präfixe werden durch MLK ersetzt.

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

Swift

Alter Kurs oder TypNeuer Kurs 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

Alter Kurs oder TypNeuer Kurs 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 Methodennamen gemäß diesen Regeln:

  • Domain-Einstiegspunktklassen (Vision, NaturalLanguage) sind nicht mehr vorhanden. Sie wurden durch aufgabenspezifische Klassen ersetzt. Ersetzen Sie die Aufrufe der verschiedenen Factory-Methoden zum Abrufen von Detektoren durch direkte Aufrufe der Factory-Methode der einzelnen Detektoren.

  • Die Klasse VisionImageMetadata und die Enum VisionDetectorImageOrientation wurden entfernt. Verwenden Sie die Eigenschaft orientation von VisionImage, um die Bildschirmausrichtung eines Bilds anzugeben.

  • Die Methode onDeviceTextRecognizer, mit der eine neue TextRecognizer-Instanz abgerufen wird, 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 und das Attribut entityID aus der Ergebnisklasse ImageLabel für das Labeling von Bildern entfernt.

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

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

  • TranslateLanguage verwendet für seine Konstanten jetzt lesbare Namen (z. B. „.english“) 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 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 die Methode, mit der die Klassifizierungskategorie für erkannte Objekte zurückgegeben wird, durch das neue SDK geändert wurde.

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 Zuverlässigkeit eines Objekts gering ist, gibt der Klassifikator 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 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 die Firebase-Abhängigkeiten nach der Migration entfernen. Gehen Sie hierzu so vor:

  • Entfernen Sie die Firebase-Konfigurationsdatei, indem Sie die Datei „GoogleService-Info.plist“ aus dem Verzeichnis Ihrer Anwendung 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 wie FirebaseApp.configure() aus dem Code.
  • Löschen Sie die 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 mit uns Kontakt aufnehmen kannst.