必要條件
開始遷移程式碼前,請確認您符合下列需求條件:
- ML Kit 支援 Xcode 13.2.1 以上版本。
- ML Kit 支援 iOS 15.5 以上版本。
- ML Kit 不支援 32 位元架構 (i386 和 armv7)。ML Kit 支援 64 位元架構 (x86_64 和 arm64)。
- 機器學習套件程式庫僅提供 cocoapods 版本。您無法混用架構和 cocoapods,因此如要使用這個程式庫,您必須先遷移至 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/TextRecognition |
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/智慧回覆 |
翻譯 | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
更新類別、列舉和類型的名稱
一般來說,類別、列舉和類型需要重新命名如下:
- Swift:從類別名稱和列舉中移除
Vision
前置字串 - Objective-C:將
FIRVision
和FIR
類別名稱和列舉前置字串都替換為MLK
以下是不適用於部分類別名稱和類型的一般規則:
Swift
舊類別或類型 | 新類別或類型 |
---|---|
AutoMLLocalModel | LocalModel |
AutoMLRemoteModel | CustomRemoteModel |
VisionBarcodeDetectionCallback | BarcodeScanningCallback |
VisionBarcodeDetector | BarcodeScanner |
VisionBarcodeDetectorOptions | BarcodeScannerOptions |
VisionImage | 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
。已從文字辨識結果類別 (包括
TextElement
、TextLine
和TextBlock
) 中移除 confidence 屬性。用於取得新
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 套件
- 您只使用裝置端 API
- 未使用模型服務
在這種情況下,您可以在遷移後移除 Firebase 依附元件。請按照下列步驟操作:
- 從應用程式目錄和 Xcode 專案中刪除 GoogleService-Info.plist 檔案,即可移除 Firebase 設定檔。
- 從 Podfile 中移除所有 Firebase cocoapod,例如
pod 'Firebase/Analytics'
。 - 從程式碼中移除任何 FirebaseApp 初始化作業,例如
FirebaseApp.configure()
。 - 請按照 Firebase 支援網站上的操作說明,在 Firebase 主控台刪除 Firebase 應用程式。
取得協助
如有任何問題,請參閱社群頁面,瞭解可用來與我們聯絡的管道。