このガイドでは、Firebase 向け ML Kit for Android から移行する方法について説明します。
Gradle のインポートを更新する
ML Kit SDK では、ML Kit API ごとに 1 つの依存関係のみが必要です。firebase-ml-vision や firebase-ml-natural-language などの共通ライブラリを指定する必要はありません。ML Kit では、Google Play 開発者サービスに依存するライブラリに com.google.android.gms 名前空間を使用します。
Vision API
バンドルモデルは、アプリケーションの一部として配信されます。シンモデルはダウンロードする必要があります。一部の API はバンドル形式とシン形式の両方で利用できますが、どちらか一方のみで利用できるものもあります。
| API | バンドル | シン |
|---|---|---|
| テキスト認識 | x(ベータ版) | x |
| 顔検出 | x | x |
| バーコード スキャン | x | x |
| 画像のラベル付け | x | x |
| オブジェクト検出とトラッキング | x | - |
次の表に従って、モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle.kts)で ML Kit Android ライブラリの依存関係を更新します。
バンドルモデル
| API | 古いアーティファクト | 新しいアーティファクト |
|---|---|---|
| バーコード スキャン | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 |
com.google.mlkit:barcode-scanning:17.3.0 |
| 顔の輪郭 | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-face-model:19.0.0 |
com.google.mlkit:face-detection:16.1.7 |
| 画像のラベル付け | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-image-label-model:19.0.0 |
com.google.mlkit:image-labeling:17.0.9 |
| オブジェクト検出 | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3 |
com.google.mlkit:object-detection:17.0.2 |
シンモデル
| API | 古いアーティファクト | 新しいアーティファクト |
|---|---|---|
| バーコード スキャン | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| 顔検出 | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| テキスト認識 | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
AutoMLVision Edge
| API | 古いアーティファクト | 新しいアーティファクト |
|---|---|---|
| ダウンロードなしの AutoML | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3 |
| ダウンロードありの AutoML | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3
カスタムモデルをホストしてダウンロードするには、モデルを Cloud Storage に移動し、 LocalModel を使用してモデルを読み込むダウンロード ロジックをアプリに追加します。詳細については、
Firebase ML から Cloud Storage への移行ガイドをご覧ください。 |
Natural Language API
バンドルモデルは、アプリケーションの一部として配信されます。シンモデルはダウンロードする必要があります。
| API | バンドル | シン |
|---|---|---|
| 言語 ID | x | x |
| スマート リプライ | x | x(ベータ版) |
次の表に従って、モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle.kts)で ML Kit Android ライブラリの依存関係を更新します。
バンドルモデル
| API | 古いアーティファクト | 新しいアーティファクト |
|---|---|---|
| 言語 ID | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.mlkit:language-id:17.0.6 |
| スマート リプライ | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.mlkit:smart-reply:17.0.4 |
シンモデル
| API | 古いアーティファクト | 新しいアーティファクト |
|---|---|---|
| 言語 ID | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.android.gms:play-services-mlkit-language-id:17.0.0 |
| スマート リプライ | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1 |
クラス名を更新する
クラスが次の表に記載されている場合は、示されている変更を行います。
| 古いクラス | 新しいクラス |
|---|---|
| com.google.firebase.ml.common.FirebaseMLException | com.google.mlkit.common.MlKitException |
| com.google.firebase.ml.vision.common.FirebaseVisionImage | com.google.mlkit.vision.common.InputImage |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabeler |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel | com.google.mlkit.common.model.LocalModel |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel | com.google.mlkit.common.model.LocalModel 手動でダウンロードする必要があります。Firebase ホストのリモートモデルは非推奨になりました。詳細については、 Firebase ML から Cloud Storage への移行ガイドをご覧ください。 |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions | com.google.mlkit.vision.label.defaults.ImageLabelerOptions |
| com.google.firebase.ml.vision.label.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabel |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions | com.google.mlkit.vision.label.custom.CustomImageLabelerOptions |
| com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions | com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions |
他のクラスについては、次のルールに従ってください。
- クラス名から
FirebaseVision接頭辞を削除します。 - クラス名から
Firebase接頭辞で始まる他の接頭辞を削除します。
また、パッケージ名では、com.google.firebase.ml 接頭辞を com.google.mlkit に置き換えます。
メソッド名を更新する
コードの変更は最小限に抑えられます。
- 検出機能、スキャナ、ラベラー、翻訳ツールなどのインスタンス化が変更されました。各機能に独自のエントリ ポイントが追加されました。たとえば、
BarcodeScanning、TextRecognition、ImageLabeling、Translationなどです。Firebase サービスのgetInstance()の呼び出しは、機能のエントリ ポイントのgetClient()メソッドの呼び出しに置き換えられます。 TextRecognizerのデフォルトのインスタンス化は削除されました。これは、中国語や韓国語などの他のスクリプトを認識するための追加ライブラリが導入されたためです。ラテン文字のテキスト認識モデルでデフォルト オプションを使用するには、com.google.android.gms:play-services-mlkit-text-recognitionの依存関係を宣言し、TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)を使用します。ImageLabelerとObjectDetectorのデフォルトのインスタンス化は削除されました。これは、これらの 2 つの機能でカスタムモデルのサポートが導入されたためです。たとえば、ImageLabelingのベースモデルでデフォルト オプションを使用するには、com.google.mlkit:image-labelingの依存関係を宣言し、Java でImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)を使用します。- すべてのハンドル(検出機能、スキャナ、ラベラー、翻訳ツールなど)は閉じることができます。これらのオブジェクトが不要になったら、
close()メソッドが呼び出されるようにしてください。FragmentまたはAppCompatActivityで使用している場合は、FragmentまたはAppCompatActivityでLifecycleOwner.getLifecycle()を呼び出し、Lifecycle.addObserverを呼び出すことで実現できます。 - Vision API の
processImage()とdetectInImage()の名前が、一貫性を保つためにprocess()に変更されました。 - Natural Language API では、「言語コード」ではなく「言語タグ」( BCP 47 標準で定義)という用語が使用されるようになりました。
xxxOptionsクラスのゲッター メソッドが削除されました。InputImageクラス(FirebaseVisionImageの代わり)のgetBitmap()メソッドは、公開インターフェースの一部として対象外となりました。さまざまな入力から変換されたビットマップを取得するには、BitmapUtils.javaML Kit クイックスタート サンプルを参照してください。FirebaseVisionImageMetadataが削除されました。width、height、rotationDegrees、formatなどの画像メタデータをInputImageのコンストラクタ メソッドに渡すだけで済みます。
新旧の Kotlin メソッドの例を次に示します。
旧
// Construct image labeler with base model and default options. val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler // Construct object detector with base model and default options. val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector // Construct face detector with given options val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options) // Construct image labeler with local AutoML model val localModel = FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build() val autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build() )
新規
// Construct image labeler with base model and default options. val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) // Optional: add lifecycle observer lifecycle.addObserver(imageLabeler) // Construct object detector with base model and default options. val objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ) // Construct face detector with given options val faceDetector = FaceDetection.getClient(options) // Construct image labeler with local AutoML model val localModel = LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build() val autoMLImageLabeler = ImageLabeling.getClient( CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build())
新旧の Java メソッドの例を次に示します。
旧
// Construct image labeler with base model and default options. FirebaseVisionImageLabeler imagelLabeler = FirebaseVision.getInstance().getOnDeviceImageLabeler(); // Construct object detector with base model and default options. FirebaseVisionObjectDetector objectDetector = FirebaseVision.getInstance().getOnDeviceObjectDetector(); // Construct face detector with given options FirebaseVisionFaceDetector faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options); // Construct image labeler with local AutoML model FirebaseAutoMLLocalModel localModel = new FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build(); FirebaseVisionImageLabeler autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build());
新規
// Construct image labeler with base model and default options. ImageLabeler imageLabeler = ImageLabeling.getClient( ImageLabelerOptions.DEFAULT_OPTIONS ); // Optional: add lifecycle observer getLifecycle().addObserver(imageLabeler); // Construct object detector with base model and default options. ObjectDetector objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ); // Construct face detector with given options FaceDetector faceDetector = FaceDetection.getClient(options); // Construct image labeler with local AutoML model LocalModel localModel = new LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build(); ImageLabeler autoMLImageLabeler = ImageLabeling.getClient( new CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build());
API 固有の変更
バーコード スキャン
バーコード スキャン API では、モデルを配信する方法が 2 つになりました。
- Google Play 開発者サービス経由(シン)(推奨) - これにより、 アプリのサイズが縮小され、モデルがアプリケーション間で共有されます。ただし、デベロッパーは、モデルを初めて使用する前にダウンロードされていることを確認する必要があります。
- アプリの APK(バンドル) - これにより、アプリのサイズは大きくなりますが、 モデルをすぐに使用できます。
2 つの実装はわずかに異なり、「バンドル」バージョンには「シン」バージョンよりも多くの改善が加えられています。これらの 違いについて詳しくは、 バーコード スキャン API のガイドラインをご覧ください。
顔検出
顔検出 API では、モデルを配信する方法が 2 つあります。
- Google Play 開発者サービス経由(シン)(推奨) - これにより、 アプリのサイズが縮小され、モデルがアプリケーション間で共有されます。ただし、デベロッパーは、モデルを初めて使用する前にダウンロードされていることを確認する必要があります。
- アプリの APK(バンドル) - これにより、アプリのダウンロード サイズは大きくなりますが、モデルをすぐに使用できます。
実装の動作は同じです。
翻訳
TranslateLanguageでは、言語タグ(EN)ではなく、定数に読みやすい名前(ENGLISHなど)が使用されるようになりました。また、@IntDefではなく@StringDefになり、定数の値は一致する BCP 47 言語タグになります。
AutoML Image Labeling(非推奨)
AutoML を使用した画像のラベル付け用のカスタムモデルのダウンロードは非推奨となり、2027 年 6 月 15 日に廃止されます。代わりに、Cloud Storage を使用してモデルをホストし、モデルをダウンロードするダウンロード ロジックをアプリに追加する必要があります。詳細については、 Firebase ML から Cloud Storage への移行ガイドをご覧ください。
オブジェクトの検出とトラッキング
アプリで粗分類によるオブジェクト検出を使用している場合、新しい SDK では、検出されたオブジェクトの分類カテゴリを返す方法が変更されています。
分類カテゴリは、整数ではなく DetectedObject.Label のインスタンスとして返されます。粗分類器で使用できるすべてのカテゴリは、PredefinedCategory クラスに含まれています。
新旧の Kotlin コードの例を次に示します。
旧
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
新規
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
新旧の Java コードの例を次に示します。
旧
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
新規
if (!object.getLabels().isEmpty() && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) { ... } // or if (!object.getLabels().isEmpty() && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) { ... }
「不明」カテゴリが削除されました。オブジェクトの分類の信頼度が低い場合は、ラベルを返しません。
Firebase の依存関係を削除する
移行後に Firebase の依存関係を削除します。手順は次のとおりです。
- アプリのモジュール(アプリレベル)ディレクトリにある
google-services.json構成ファイルを削除して、Firebase 構成ファイルを削除します。 - モジュール(アプリレベル)の Gradle ファイル(通常は
app/build.gradle.kts)の Google サービスの Gradle プラグインを Strict Version Matcher プラグインに置き換えます。
変更前
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
変更後
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- プロジェクト(ルートレベル)の Gradle ファイル(
build.gradle.kts)の Google サービスの Gradle プラグインのクラスパスを、Strict Version Matcher プラグインのクラスパスに置き換えます。
変更前
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
変更後
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
Firebase サポートサイトの手順に沿って 、Firebase コンソールで Firebase アプリを削除します。
ヘルプ
問題が発生した場合は、コミュニティ ページ で Google への連絡方法をご確認ください。