前提条件
コードの移行を開始する前に、次の要件を満たしていることを確認してください。
- 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 からのモデルのダウンロード) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
| 言語 ID | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| スマート リプライ | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| 翻訳 | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
クラス、列挙型、型の名前を更新する
一般に、クラス、列挙型、型は次のように名前を変更する必要があります。
- Swift: クラス名と列挙型から
Vision接頭辞を削除 - Objective-C:
FIRVisionとFIRの両方のクラス名と列挙型接頭辞をMLKに置き換え
一部のクラス名と型には、この一般的なルールは適用されません。
Swift
| 古いクラスまたは型 | 新しいクラスまたは型 |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | CustomRemoteModel |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage(変更なし) |
| 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
メソッド名を更新する
次のルールに従ってメソッド名を更新します。
ドメイン エントリ ポイント クラス(
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から削除されました。他の Vision API との整合性を保つため、バーコード スキャン API
detect(in _:, completion:)の名前をprocess(_:, completion:)に変更しました。Natural Language API では、言語コードではなく言語タグ(BCP-47 標準で定義されている)という用語が使用されるようになりました。
TranslateLanguageでは、言語タグ(.en など)ではなく、読み取り可能な名前(.english など)が定数に使用されるようになりました。
以下に、古い Swift メソッドと新しい 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 メソッドと新しい 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 コードと新しい 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 コードと新しい Objective-C コードの例を次に示します。
旧
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}新規
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}Firebase 依存関係を削除する(省略可)
この手順は、次の条件が満たされている場合にのみ適用されます。
- Firebase ML Kit のみが使用されている
- オンデバイス API のみを使用する
- モデル サービングを使用していない
この場合は、移行後に Firebase の依存関係を削除できます。手順は次のとおりです。
- アプリのディレクトリと Xcode プロジェクトから GoogleService-Info.plist ファイルを削除して、Firebase 構成ファイルを削除します。
- Podfile から
pod 'Firebase/Analytics'などの Firebase cocoapod を削除します。 - コードから
FirebaseApp.configure()などの FirebaseApp の初期化を削除します。 - Firebase サポートサイトの手順に沿って、Firebase コンソールで Firebase アプリを削除します。
ヘルプ
問題が発生した場合は、コミュニティ ページで、お問い合わせいただけるチャネルをご確認ください。