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:
API | Alter 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
- undFIR
-Präfixe für Enumerationen durchMLK
.
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äß 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 EnumVisionDetectorImageOrientation
wurden entfernt. Verwenden Sie das Attributorientation
vonVisionImage
, um die Anzeigeausrichtung eines Bildes anzugeben.Die
onDeviceTextRecognizer
-Methode, die eine neueTextRecognizer
-Instanz zurückgibt, wurde intextRecognizer
umbenannt.Die Property „confidence“ wurde aus den Ergebnisklassen der Texterkennung entfernt, einschließlich
TextElement
,TextLine
undTextBlock
.Die Methoden
onDeviceImageLabeler
undonDeviceImageLabeler(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
type
wurde ausImageLabeler
entfernt und das AttributentityID
aus der Ergebnisklasse für die BildbeschriftungImageLabel
.Die Barcode-Scan-API
detect(in _:, completion:)
wurde inprocess(_:, 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.