必要條件
開始遷移程式碼前,請確認您符合下列規定:
- 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/BarcodeScanning |
臉部偵測 | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
為圖片加上標籤 | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
偵測及追蹤物件 | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
文字辨識 | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/文字辨識 |
AutoML 圖片標籤 (組合模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
AutoML 圖片標籤 (從 Firebase 下載模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
語言 ID | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
智慧回覆 | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
翻譯 | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/翻譯 |
更新類別、列舉和類型的名稱
一般來說,類別 、列舉和型別必須重新命名,如下所示:
- Swift:從類別名稱和列舉中移除
Vision
前置字串 - Objective-C:同時取代
FIRVision
和FIR
類別名稱和列舉前置字串 製作者:MLK
這項一般規則不適用於部分類別名稱和類型:
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
列舉。使用orientation
屬性VisionImage
可指定圖片的顯示方向。取得新
TextRecognizer
執行個體的onDeviceTextRecognizer
方法 已重新命名為textRecognizer
。已從文字中移除 confence 屬性 辨識結果類別,包括
TextElement
、TextLine
和TextBlock
。可透過
onDeviceImageLabeler
和onDeviceImageLabeler(options:)
方法取得 新的ImageLabeler
執行個體已合併並重新命名為imageLabeler(options:)
。已移除取得新
ObjectDetector
執行個體的objectDetector
方法。 請改用objectDetector(options:)
。type
屬性已從ImageLabeler
和 圖片標籤結果類別ImageLabel
已移除entityID
屬性。條碼掃描 API
detect(in _:, completion:)
已重新命名為process(_:, completion:)
與其他視覺 API 一致。Natural Language API 現在使用「語言標記」一詞(根據 BCP-47 Standard),而不是「語言代碼」。
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 依附元件。 請按照下列步驟操作:
- 刪除 GoogleService-Info.plist 來移除 Firebase 設定檔 檔案從應用程式目錄和 Xcode 專案匯入
- 從 Podfile 中移除任何 Firebase Cocoapod,例如
pod 'Firebase/Analytics'
。 - 移除程式碼中所有 FirebaseApp 初始化作業,例如
FirebaseApp.configure()
。 - 前往下列 Firebase 控制台刪除 Firebase 應用程式: 參閱 Firebase 支援網站上的操作說明。
取得協助
如果遇到任何問題,請瀏覽我們的社群頁面,其中列出相關說明 與我們聯絡