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:
API | Alte 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
undFIR
durchMLK
ersetzen
Diese allgemeine Regel gilt für einige Klassennamen und -typen nicht:
Swift
Alte Klasse oder alter Typ | Neuer 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 Typ | Neuer 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 EnumVisionDetectorImageOrientation
entfernt. Mit der Eigenschaftorientation
vonVisionImage
kannst du die Anzeigeausrichtung eines Bildes angeben.Die Methode
onDeviceTextRecognizer
, die eine neueTextRecognizer
-Instanz abruft, wurde intextRecognizer
umbenannt.Das Konfidenzattribut 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 Methode
objectDetector
zum Abrufen einer neuenObjectDetector
-Instanz wurde entfernt. Verwenden Sie stattdessenobjectDetector(options:)
.Das Attribut
type
wurde ausImageLabeler
entfernt und das AttributentityID
wurde aus der ErgebnisklasseImageLabel
für das Bild-Labeling entfernt.Die Barcode Scan API
detect(in _:, completion:)
wurde zur Vereinheitlichung mit anderen Vision APIs inprocess(_:, 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.