遷移 iOS 裝置

必要條件

開始遷移程式碼前,請確認您符合下列需求條件:

  • 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:將 FIRVisionFIR 類別名稱和列舉前置字串都替換為 MLK

以下是不適用於部分類別名稱和類型的一般規則:

舊類別或類型新類別或類型
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (不變)
VisionPoint VisionPoint (無變更)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions
舊類別或類型新類別或類型
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

更新方法名稱

請根據下列規則更新方法名稱:

  • 網域進入點類別 (VisionNaturalLanguage) 已不復存在。已由特定工作類別取代。將各工廠方法的呼叫 (用於取得偵測器) 替換為直接呼叫各偵測器的工廠方法。

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

  • 取得新 TextRecognizer 例項的 onDeviceTextRecognizer 方法已重新命名為 textRecognizer

  • 已從文字辨識結果類別 (包括 TextElementTextLineTextBlock) 中移除 confidence 屬性。

  • 用於取得新 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 ML 套件
  • 您只使用裝置端 API
  • 未使用模型服務

在這種情況下,您可以在遷移完成後移除 Firebase 依附元件。請按照下列步驟操作:

  • 從應用程式目錄和 Xcode 專案中刪除 GoogleService-Info.plist 檔案,即可移除 Firebase 設定檔。
  • 從 Podfile 中移除所有 Firebase cocoapod,例如 pod 'Firebase/Analytics'
  • 從程式碼中移除任何 FirebaseApp 初始化作業,例如 FirebaseApp.configure()
  • 請按照 Firebase 支援網站上的操作說明,在 Firebase 主控台刪除 Firebase 應用程式。

取得協助

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