Android への移行

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

Gradle のインポートを更新する

ML Kit SDK では、ML Kit API ごとに 1 つの依存関係のみが必要です。firebase-ml-visionfirebase-ml-natural-language などの一般的なライブラリを指定する必要はありません。ML Kit は、Google Play 開発者サービスに依存するライブラリに com.google.android.gms 名前空間を使用します。

Vision API

バンドルされたモデルは、アプリケーションの一部として提供されます。シン モデルはダウンロードする必要があります。一部の API はバンドル形式とシン形式の両方で利用できますが、どちらか一方の形式でのみ利用できるものもあります。

APIバンドル細い
テキスト認識x(ベータ版)x
顔検出xx
バーコード スキャンxx
画像のラベル付けxx
オブジェクトの検出とトラッキング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バンドル細い
言語 IDxx
スマート リプライxx(ベータ版)

次の表に従って、モジュール(アプリレベル)の 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 に置き換えます。

メソッド名を更新する

コードの変更は最小限です。

  • 検出機能、スキャナ、ラベル付けツール、翻訳ツールなどのインスタンス化が変更されました。各機能に独自のエントリ ポイントが追加されました。たとえば、BarcodeScanningTextRecognitionImageLabelingTranslation... Firebase サービス getInstance() への呼び出しは、機能エントリ ポイントの getClient() メソッドへの呼び出しに置き換えられます。
  • 中国語や韓国語などの他のスクリプトを認識するためのライブラリが追加されたため、TextRecognizer のデフォルトのインスタンス化が削除されました。ラテン文字テキスト認識モデルでデフォルトのオプションを使用するには、com.google.android.gms:play-services-mlkit-text-recognition への依存関係を宣言し、TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) を使用します。
  • ImageLabelerObjectDetector のデフォルトのインスタンス化は、これらの 2 つの機能のカスタムモデルのサポートが導入されたため、削除されました。たとえば、ImageLabeling でベースモデルのデフォルト オプションを使用するには、com.google.mlkit:image-labeling への依存関係を宣言し、Java で ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) を使用します。
  • すべてのハンドル(検出機能、スキャナ、ラベル付けツール、翻訳ツールなど)は閉じることができます。これらのオブジェクトが使用されなくなったときに close() メソッドが呼び出されるようにします。Fragment または AppCompatActivity で使用している場合、その方法の 1 つは、Fragment または AppCompatActivityLifecycleOwner.getLifecycle() を呼び出し、次に Lifecycle.addObserver を呼び出すことです。
  • Vision API の processImage()detectInImage() の名前が、一貫性を保つために process() に変更されました。
  • Natural Language API では、言語コードではなく言語タグ(BCP 47 標準で定義されている)という用語が使用されるようになりました。
  • xxxOptions クラスのゲッター メソッドが削除されました。
  • InputImage クラスの getBitmap() メソッド(FirebaseVisionImage を置き換える)は、公開インターフェースの一部として対象外となりました。ML Kit クイックスタート サンプルBitmapUtils.java を参照して、さまざまな入力から変換されたビットマップを取得します。
  • FirebaseVisionImageMetadata が削除されたため、widthheightrotationDegreesformat などの画像メタデータを InputImage のコンストラクタ メソッドに渡すだけで済みます。

以下に、古い Kotlin メソッドと新しい 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 メソッドと新しい 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 のガイドラインをご覧ください。

顔検出

Face Detection 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 コードと新しい 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 プラグインを厳密なバージョン マッチャー プラグインに置き換えます。

変更前

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 アプリを削除します。

ヘルプ

問題が発生した場合は、コミュニティ ページで、お問い合わせいただけるチャネルをご確認ください。