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:
API | Alte Pod-Namen | Neuer 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
undFIR
sowie die enum-Präfixe werden durchMLK
ersetzt.
Für einige Klassennamen und -typen gilt diese allgemeine Regel nicht:
Swift
Alter Kurs oder Typ | Neuer 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 Typ | Neuer 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 EnumVisionDetectorImageOrientation
wurden entfernt. Verwenden Sie die Eigenschaftorientation
vonVisionImage
, um die Bildschirmausrichtung eines Bilds anzugeben.Die Methode
onDeviceTextRecognizer
, mit der eine neueTextRecognizer
-Instanz abgerufen wird, 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
und das AttributentityID
aus der ErgebnisklasseImageLabel
für das Labeling von Bildern entfernt.Die Barcode Scan API
detect(in _:, completion:)
wurde zur Anpassung mit anderen Vision APIs inprocess(_:, 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.