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-CocoaPods für iOS in der Podfile-Datei Ihrer App:
| API | Alte Pod-Namen | Name(n) des neuen Pods |
|---|---|---|
| Barcode-Scanning | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| Gesichtserkennung | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| Bildlabeling | 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-Download 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, Enums und Typen aktualisieren
Im Allgemeinen müssen Klassen, Enums und Typen so umbenannt werden:
- Swift: Entfernen Sie das Präfix
Visionaus Klassennamen und Enums. - Objective-C: Ersetzen Sie sowohl
FIRVisionals auchFIRdurch den Klassennamen und die Enum-PräfixeMLK.
Für einige Klassennamen und ‑typen gilt diese allgemeine Regel nicht:
Swift
| Alte Klasse oder alter Typ | Neue 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 Typ | Neue 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äß den folgenden Regeln:
Die Klassen für den Domain-Einstiegspunkt (
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
VisionImageMetadatawurde zusammen mit dem EnumVisionDetectorImageOrientationentfernt. Verwenden Sie das AttributorientationvonVisionImage, um die Ausrichtung eines Bildes festzulegen.Die Methode
onDeviceTextRecognizer, mit der eine neueTextRecognizer-Instanz abgerufen wird, wurde intextRecognizerumbenannt.Die Property „confidence“ wurde aus den Ergebnisklassen für die Texterkennung entfernt, darunter
TextElement,TextLineundTextBlock.Die Methoden
onDeviceImageLabelerundonDeviceImageLabeler(options:)zum Abrufen einer neuenImageLabeler-Instanz wurden zusammengeführt und inimageLabeler(options:)umbenannt.Die
objectDetector-Methode zum Abrufen einer neuenObjectDetector-Instanz wurde entfernt. Verwenden Sie stattdessenobjectDetector(options:).Das Attribut
typewurde ausImageLabelerentfernt und das AttributentityIDwurde aus der BildkennzeichnungsergebnisklasseImageLabelentfernt.Die Barcode-Scanning-API
detect(in _:, completion:)wurde inprocess(_:, completion:)umbenannt, um sie an andere Vision-APIs anzugleichen.In den Natural Language APIs wird jetzt der Begriff „Sprachtag“ (gemäß BCP-47-Standard) anstelle von „Sprachcode“ verwendet.
TranslateLanguageverwendet jetzt lesbare Namen (z. B. .english) für seine Konstanten anstelle von Sprach-Tags ( z. B. .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 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 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 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 APIs auf dem Gerät.
- Sie verwenden keine Modellbereitstellung
Wenn dies der Fall ist, 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 alle FirebaseApp-Initialisierungen wie
FirebaseApp.configure()aus Ihrem Code. - Löschen Sie Ihre Firebase-App in der Firebase Console gemäß der Anleitung auf der Firebase-Supportwebsite.
Hilfe erhalten
Sollten Probleme auftreten, findest du auf unserer Community-Seite Informationen dazu, wie du uns kontaktieren kannst.