遷移 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 圖片標籤 (組合模型) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML 圖片標籤 (已下載模型) 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:將 FIRVisionFIR 類別名稱和列舉前置字串替換為 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

更新方法名稱

請按照下列規則更新方法名稱:

  • 網域進入點類別 (VisionNaturalLanguage) 不再存在。 而是以特定工作類別替代。將對各種工廠方法的呼叫,替換為對每個偵測器工廠方法的直接呼叫,以取得偵測器。

  • 已移除 VisionImageMetadata 類別和 VisionDetectorImageOrientation 列舉。使用 VisionImageorientation 屬性,指定圖片的顯示方向。

  • 取得新 TextRecognizer 執行個體的 onDeviceTextRecognizer 方法已重新命名為 textRecognizer

  • 文字辨識結果類別 (包括 TextElementTextLineTextBlock) 已移除信賴度屬性。

  • 取得新 ImageLabeler 執行個體的 onDeviceImageLabeleronDeviceImageLabeler(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 應用程式。

取得協助

如有任何問題,請前往社群頁面,瞭解可與我們聯絡的管道。