Android の移行

Gradle インポートを更新する

新しい 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)内の 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.0.2
顔の輪郭 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.5
画像ラベル付け 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.7
オブジェクト検出 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.0

薄型モデル

API古いアーティファクト新しいアーティファクト
バーコード スキャン com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.1.0
顔検出 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:18.0.2

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:16.0.0-beta4
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:16.0.0-beta4
com.google.mlkit:linkfirebase:17.0.0

Natural Language API

バンドルモデルは、アプリケーションの一部として提供されます。すべての言語 API はバンドルモデルとして提供されます。新しいアーティファクト名は次のとおりです。

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.4
スマート リプライ 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.2

クラス名を更新

クラスがこの表に表示されている場合は、次の変更を加えます。

以前のクラス新しいクラス
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml.vision.common.BookmarkImage com.google.mlkit.vision.common.InputImage
com.google.firebase.ml.vision.barcode.BookmarkBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.labeler.\\ImageLabel com.google.mlkit.vision.label.ImageLabeler
com.google.firebase.ml.vision.barcode.BookmarkBarcodeDetector 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.CustomRemoteModel
com.google.firebase.ml.vision.label.\\OnDeviceImageLabelerOptions com.google.mlkit.vision.label.defaults.ImageLabelerOptions
com.google.firebase.ml.vision.label.\\ImageLabel com.google.mlkit.vision.label.ImageLabel
com.google.firebase.ml.vision.label.\\OnDeviceAutoMLImageLabelerOptions com.google.mlkit.vision.label.custom.CustomImageLabelerOptions
com.google.firebase.ml.vision.objects.\\ObjectDetectorOptions 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 クラスの getBitmap() メソッド(FirebaseVisionImage の代わり)は、パブリック インターフェースの一部としてサポートされなくなりました。ML Kit クイックスタート サンプルBitmapUtils.java を参照して、さまざまな入力からビットマップを変換してください。
  • nofollowImageMetadata が削除されました。これは、幅、高さ、ローテーション ディグリーなどの画像メタデータを InputImages の構成メソッドに渡すだけで済みます。

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 life cycle 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 life cycle 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 固有の変更

バーコード スキャン

Barcode Scanning API の場合、次の 2 つの方法でモデルを提供できます。

  • Google Play 開発者サービス(別名「シン」)(推奨) - アプリのサイズが小さくなり、モデルがアプリ間で共有されます。ただし、初めて使用する前に、モデルがダウンロードされていることを確認する必要があります。
  • アプリの APK(別名「バンドル」) - アプリのサイズが増加しますが、モデルはすぐに使用できます。

これら 2 つの実装は若干異なり、「バンドル」バージョンでは「シン」バージョンに対して多くの改善が行われています。これらの違いについて詳しくは、Barcode Scanning API のガイドラインをご覧ください。

顔検出

Face Detection API については、次の 2 つの方法でモデルを提供できます。

  • Google Play 開発者サービス(別名「シン」)(推奨) - アプリのサイズが小さくなり、モデルがアプリ間で共有されます。ただし、初めて使用する前に、モデルがダウンロードされていることを確認する必要があります。
  • アプリの APK(別名「バンドル」) - アプリのダウンロード サイズが増加しますが、モデルはすぐに使用できます。

実装の動作は同じです。

翻訳

  • TranslateLanguage で、言語タグ(EN など)の代わりに読み取り可能な定数名( ENGLISH など)が使用されるようになりました。また、@IntDef ではなく @StringDef も使用されるようになりました。定数の値は、対応する BCP 47 言語タグです。

  • アプリで「デバイス アイドル状態」のダウンロード条件オプションを使用している場合、このオプションは削除されており、使用できなくなっています。[デバイスの充電] オプションは引き続きご利用いただけます。より複雑な動作が必要な場合は、独自のロジックで RemoteModelManager.download の呼び出しを遅らせることができます。

AutoML 画像のラベル付け

アプリで「デバイス アイドル状態」のダウンロード条件オプションを使用している場合、このオプションは削除されており、使用できなくなっています。「デバイスの充電」オプションは引き続き使用できます。

より複雑な動作が必要な場合は、独自のロジックで RemoteModelManager.download を呼び出すことをおすすめします。

オブジェクトの検出とトラッキング

大まかな分類でオブジェクト検出を使用するアプリの場合、新しい SDK では、検出されたオブジェクトの分類カテゴリを返す方法が変更されていることに注意してください。

分類カテゴリは、整数ではなく DetectedObject.Label のインスタンスとして返されます。粗い分類器に使用できるカテゴリはすべて PredefinedCategory クラスに含まれています。

以下に、古い Kotlin コードと新しい 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 ML Kit は、使用する唯一の Firebase コンポーネントです。
  • オンデバイス API のみを使用する。
  • モデル配信を使用しません。

その場合は、移行後に Firebase の依存関係を削除できます。手順は次のとおりです。

  • アプリのモジュール(アプリレベル)ディレクトリにある google-services.json 構成ファイルを削除して、Firebase 構成ファイルを削除します。
  • モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle)にある Google サービスの Gradle プラグインを、Strict Version Matcher プラグインに置き換えます。

これまで

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

変更後

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • プロジェクト(ルートレベル)の Gradle ファイル(build.gradle)の Google サービスの Gradle プラグイン クラスパスを、厳密なバージョン マッチャー プラグインのクラスパスに置き換えます。

これまで

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

変更後

buildscript {
  dependencies {
    // ...

    classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
  }
}

Firebase サポートサイトの手順に沿って、Firebase コンソールで Firebase アプリを削除します。

ヘルプ

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