本指南說明如何停用 iOS 適用的 Firebase ML Kit。
必要條件
開始遷移程式碼前,請確認您符合下列需求條件:
- ML Kit 支援 Xcode 13.2.1 以上版本。
- ML Kit 支援 iOS 15.5 以上版本。
- ML Kit 不支援 32 位元架構 (i386 和 armv7)。ML Kit 支援 64 位元架構 (x86_64 和 arm64)。
- ML Kit 程式庫僅以 cocoapods 形式提供。您無法混合使用架構和 cocoapods,因此如要使用這個程式庫,必須先改用 cocoapods。
更新 Cocoapods
在應用程式的 Podfile 中,更新 ML Kit iOS CocoaPods 的依附元件:
| 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 Image 標籤 (套裝組合模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| AutoML Image 標籤 (已下載模型) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom 如要託管及下載自訂模型,請將模型移至 Cloud Storage,並在應用程式中加入下載邏輯,將模型載入為本機模型。詳情請參閱 從 Firebase ML 遷移至 Cloud Storage 的遷移指南。 |
| 語言 ID | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| 智慧回覆 | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| Google 翻譯 | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
更新類別、列舉和類型的名稱
一般來說,類別、列舉和類型必須重新命名,如下所示:
- Swift:從類別名稱和列舉中移除
Vision前置字串 - Objective-C:將
FIRVision和FIR類別名稱和列舉前置字元替換為MLK
部分類別名稱和類型不適用這項一般規則:
Swift
| 舊類別或類型 | 新類別或類型 |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel 需要手動下載。Firebase 託管的遠端模型已淘汰。詳情請參閱 Firebase ML 遷移至 Cloud Storage 遷移指南。 |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (不變) |
| VisionPoint | VisionPoint (不變) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| 舊類別或類型 | 新類別或類型 |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel 需要手動下載。Firebase 託管的遠端模型已淘汰。詳情請參閱 Firebase ML 遷移至 Cloud Storage 遷移指南。 |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
更新方法名稱
請按照下列規則更新方法名稱:
網域進入點類別 (
Vision、NaturalLanguage) 已不存在。並由特定任務類別取代。將取得偵測工具的各種工廠方法呼叫,替換為直接呼叫各偵測工具的工廠方法。VisionImageMetadata類別和VisionDetectorImageOrientation列舉已移除。使用VisionImage的orientation屬性,指定圖片的顯示方向。取得新
TextRecognizer執行個體的onDeviceTextRecognizer方法已重新命名為textRecognizer。信賴度屬性已從文字辨識結果類別中移除,包括
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 依附元件。步驟如下:
- 從應用程式目錄和 Xcode 專案中刪除
GoogleService-Info.plist檔案,即可移除 Firebase 設定檔。 - 從 Podfile 中移除任何 Firebase CocoaPod,例如
pod 'Firebase/Analytics'。 - 從程式碼中移除任何 FirebaseApp 初始化,例如
FirebaseApp.configure()。 - 請按照 Firebase 支援網站上的操作說明,在 Firebase 控制台中刪除 Firebase 應用程式。
取得協助
如果遇到任何問題,請前往社群頁面,查看與我們聯絡的管道。