必要條件
開始遷移程式碼前,請確認您符合下列需求條件:
- 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 Cocoapods 的依附元件:
API | 舊 Pod 名稱 | 新 Pod 名稱 |
---|---|---|
條碼掃描 | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/條碼掃描 |
臉部偵測 | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
為圖片加上標籤 | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/圖片標籤 |
物件偵測和追蹤 | 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 | Vision 圖片 (不變更) |
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
。已將信心屬性從文字辨識結果類別中移除,包括
TextElement
、TextLine
和TextBlock
。取得新
ImageLabeler
例項的onDeviceImageLabeler
和onDeviceImageLabeler(options:)
方法已合併,並重新命名為imageLabeler(options:)
。取得新
ObjectDetector
執行個體的objectDetector
方法已移除,請改用objectDetector(options:)
。已從
ImageLabeler
中移除type
屬性,並將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 支援網站上的instructions,在 Firebase 控制台中刪除 Firebase 應用程式。
取得協助
如果您遇到任何問題,請參閱社群頁面,簡單介紹可與我們聯繫的頻道。