遷移 iOS 裝置

必要條件

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

  • ML Kit 支援 Xcode 13.2.1 以上版本。
  • ML Kit 支援 iOS 10 以上版本。
  • ML Kit 不支援 32 位元架構 (i386 和 armv7)。ML Kit 支援 64 位元架構 (x86_64 和 arm64)。
  • ML Kit 程式庫是以 Cocoapods 的形式提供。您無法混用架構和 Cocoapod,因此,如要使用這個程式庫,您必須先遷移以便使用 Cocoapods。

更新 Cocoapods

在應用程式的 Podfile 中,更新 ML Kit iOS Cocoapods 的依附元件:

API舊 Pod 名稱新 Pod 名稱
條碼掃描 Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/條碼掃描
臉部偵測 Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
為圖片加上標籤 Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/圖片標籤
物件偵測和追蹤 Firebase/MLVisionObjectDetection GoogleMLKit/物件偵測
文字辨識 Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/文字辨識
AutoML 圖片標籤 (組合模型) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML 圖片標籤 (從 Firebase 下載模型) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
語言 ID Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/語言 ID
智慧回覆 Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Google 翻譯 Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/翻譯

更新類別、列舉和類型的名稱

一般來說,類別、列舉和型別必須重新命名,如下所示:

  • Swift:從類別名稱和列舉中移除 Vision 前置字串
  • Objective-C:以 MLK 取代 FIRVisionFIR 類別名稱和列舉前置字串

部分類別名稱和類型不適用這項一般規則:

Swift

舊類別或類型新增課程或類型
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage Vision 圖片 (不變更)
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

更新方法名稱

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

  • 網域進入點類別 (VisionNaturalLanguage) 已不存在。這些類別已由工作特定類別取代。替換各種工廠方法的呼叫,以便取得偵測工具,並直接呼叫每個偵測工具的工廠方法。

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

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

  • 已將信心屬性從文字辨識結果類別中移除,包括 TextElementTextLineTextBlock

  • 取得新 ImageLabeler 例項的 onDeviceImageLabeleronDeviceImageLabeler(options:) 方法已合併,並重新命名為 imageLabeler(options:)

  • 取得新 ObjectDetector 執行個體的 objectDetector 方法已移除,請改用 objectDetector(options:)

  • 已從 ImageLabeler 中移除 type 屬性,並將 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 Kit 是您唯一使用的 Firebase 元件
  • 您只會使用裝置端 API
  • 您並未使用提供模型

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

  • 從應用程式目錄和 Xcode 專案中刪除 GoogleService-Info.plist 檔案,藉此移除 Firebase 設定檔。
  • 從 Podfile 移除所有 Firebase Cocoapod,例如 pod 'Firebase/Analytics'
  • 從程式碼中移除所有 FirebaseApp 初始化,例如 FirebaseApp.configure()
  • 前往 Firebase 支援網站上的instructions,在 Firebase 控制台中刪除 Firebase 應用程式。

取得協助

如果您遇到任何問題,請參閱社群頁面,簡單介紹可與我們聯繫的頻道。