iOS 向けの移行

このガイドでは、iOS 向け ML Kit for Firebase から移行する方法について説明します。

前提条件

コードの移行を開始する前に、以下の要件を満たしていることをご確認ください。

  • 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
翻訳 Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

クラス、enum、型の名前を更新する

一般に、クラス、enum、型は次のように名前を変更する必要があります。

  • Swift: クラス名と enum から Vision 接頭辞を削除します。
  • Objective-C: FIRVisionFIR の両方のクラス名と enum の接頭辞を 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)は存在しなくなりました。 タスク固有のクラスに置き換えられました。検出機能を取得するためのさまざまな Factory メソッドの呼び出しを、各検出機能の Factory メソッドへの直接呼び出しに置き換えます。

  • VisionImageMetadata クラスが VisionDetectorImageOrientation enum とともに削除されました。VisionImageorientation プロパティを使用して、画像の表示方向を指定します。

  • 新しい TextRecognizer インスタンスを取得する onDeviceTextRecognizer メソッドの名前が textRecognizer に変更されました。

  • 信頼度プロパティが、TextElementTextLineTextBlock などのテキスト認識結果クラスから削除されました。

  • 新しい 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 では、言語タグ(.en など)ではなく、 定数に読みやすい名前(.english など)が使用されるようになりました。

新旧の 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 では検出されたオブジェクトの分類カテゴリを返す方法が変更されています。

VisionObjectVisionObjectCategory は、整数ではなく ObjectLabel オブジェクトの text として返されます。可能な文字列カテゴリはすべて DetectedObjectLabel enum に含まれています。

.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 の依存関係を削除します。手順は次のとおりです。

  • Firebase 構成ファイルを削除します。アプリのディレクトリと Xcode プロジェクトから GoogleService-Info.plist ファイルを削除します。
  • Podfile から pod 'Firebase/Analytics' などの Firebase cocoapod を削除します。
  • コードから FirebaseApp.configure() などの FirebaseApp の初期化を削除します。
  • Firebase サポートサイトの手順に沿って 、Firebase コンソールで Firebase アプリを削除します。

ヘルプ

問題が発生した場合は、コミュニティ ページ で Google への連絡方法をご確認ください。