先備知識
開始遷移程式碼前,請確認您符合下列規定:
- ML Kit 支援 Xcode 13.2.1 以上版本。
- ML Kit 支援 iOS 10 以上版本。
- ML Kit 不支援 32 位元架構 (i386 和 armv7)。ML Kit 支援 64 位元架構 (x86_64 和 arm64)。
- ML Kit 程式庫僅提供 Cocoapods。不能混用架構和 Cocoapod,因此如要使用這個程式庫,您必須先改用 Cocoapods。
更新 Cocoapods
在應用程式的 Podfile 中,更新 ML Kit iOS Cocoapod 的依附元件:
API | 舊 Pod 名稱 | 新 Pod 名稱 |
---|---|---|
條碼掃描 | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/條碼掃描 |
臉部偵測 | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
為圖片加上標籤 | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
物件偵測和追蹤 | Firebase/MLVisionObjectDetection | GoogleMLKit/物件偵測 |
文字辨識 | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/文字辨識 |
AutoML 圖片標籤 (組合模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
AutoML 圖片標籤 (從 Firebase 下載模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
語言 ID | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/語言 ID |
智慧回覆 | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
Google 翻譯 | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/翻譯 |
更新類別、列舉和類型的名稱
一般來說,類別 、列舉和型別必須重新命名,如下所示:
- Swift:從類別名稱和列舉中移除
Vision
前置字串 - Objective-C:以
MLK
取代FIRVision
和FIR
類別名稱和列舉前置字串
這項一般規則不適用於部分類別名稱和類型:
Swift
舊類別或類型 | 新增類別或類型 |
---|---|
AutoMLLocalModel | LocalModel |
AutoMLRemoteModel | CustomRemoteModel |
VisionBarcodeDetectionCallback | BarcodeScanningCallback |
VisionBarcodeDetector | BarcodeScanner |
VisionBarcodeDetectorOptions | BarcodeScannerOptions |
VisionImage | 視覺輔助圖片 (無變更) |
VisionPoint | VisionPoint (無變更) |
VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
舊類別或類型 | 新增類別或類型 |
---|---|
FIRAutoMLLocalModel | MLKLocalModel |
FIRAutoMLRemoteModel | MLKCustomRemoteModel |
FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
FIRVisionBarcodeDetector | MLKBarcodeScanner |
FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
FIRVisionImage | MLKVisionImage |
FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
FIRVisionPoint | MLKVisionPoint |
Objective-C
更新方法名稱
根據下列規則更新方法名稱:
網域進入點類別 (
Vision
、NaturalLanguage
) 已不存在。已由工作專屬類別取代。替換針對各種工廠方法的呼叫,透過直接呼叫每個偵測工具的工廠方法。移除
VisionImageMetadata
類別和VisionDetectorImageOrientation
列舉。請使用VisionImage
的orientation
屬性指定圖片的顯示方向。取得新
TextRecognizer
執行個體的onDeviceTextRecognizer
方法已重新命名為textRecognizer
。此 confence 屬性已從文字辨識結果類別中移除,包括
TextElement
、TextLine
和TextBlock
。用於取得新
ImageLabeler
例項的onDeviceImageLabeler
和onDeviceImageLabeler(options:)
方法已合併並重新命名為imageLabeler(options:)
。已移除取得新
ObjectDetector
執行個體的objectDetector
方法。 請改用objectDetector(options:)
。type
屬性已從ImageLabeler
中移除,且entityID
屬性已從圖片標籤結果類別ImageLabel
中移除。條碼掃描 API
detect(in _:, completion:)
已重新命名為process(_:, completion:)
,與其他 Vision API 保持一致。Natural Language API 現在使用「語言標記」(由 BCP-47 標準定義),而非「語言代碼」。
TranslateLanguage
現在使用可讀的名稱 (例如「.english」) 做為常數,而不是語言標記 ( 例如 .en)。
以下列舉幾種 Swift 方法:
舊優惠
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()
新品
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())
以下提供一些新舊 Objective-C 方法的範例:
舊優惠
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];
新品
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 專屬變更
物件偵測和追蹤
請注意,如果您的應用程式使用物件分類,請注意,新的 SDK 已變更傳回物件分類類別的方式。
VisionObject
中的 VisionObjectCategory
會在 ObjectLabel
物件中以 text
的形式傳回,而非整數。所有可能的字串類別都會包含在 DetectedObjectLabel
列舉中。
請注意,.unknown
類別已移除。如果物件的分類可信度較低,分類器就不會傳回任何標籤。
以下是新舊款 Swift 代碼的範例:
舊優惠
if (object.classificationCategory == .food) { ... }
新品
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) { ... } }
以下是新舊 Objective-C 程式碼的範例:
舊優惠
if (object.classificationCategory == FIRVisionObjectCategoryFood) { ... }
新品
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) { ... } // or if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) { ... }
移除 Firebase 依附元件 (選用)
只有在符合下列條件時,才適用這個步驟:
- Firebase ML Kit 是您唯一會用到的 Firebase 元件
- 您只會使用裝置端 API
- 您並未使用模型提供功能
如果是這種情況,您可以在遷移後移除 Firebase 依附元件。請按照下列步驟操作:
- 從應用程式目錄和 Xcode 專案刪除 GoogleService-Info.plist 檔案,藉此移除 Firebase 設定檔。
- 從 Podfile 中移除任何 Firebase Cocoapod,例如
pod 'Firebase/Analytics'
。 - 移除程式碼中所有 FirebaseApp 初始化作業,例如
FirebaseApp.configure()
。 - 在 Firebase 控制台中,按照 Firebase 支援網站的instructions刪除 Firebase 應用程式。
取得協助
如果遇到任何問題,請查看社群頁面,其中會列出可透過哪些管道與我們聯絡。