遷移 iOS 裝置

本指南說明如何停用 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 應用程式。

取得協助

如果遇到任何問題,請前往社群頁面,查看與我們聯絡的管道。