コンソールへ移動

ML Kit を使用してラベルを検出する(Android)

ML Kit を使って、画像内のオブジェクトにラベルを付けることができます。

始める前に

  1. Firebase プロジェクトを設定します。
    1. Firebase プロジェクトがまだない場合、Firebase コンソールで 一つ作成します。モバイルアプリに関連付けられた既存の Google プロジェクトがある場合は、[Google プロジェクトをインポート] をクリックします。それ以外の場合は、[プロジェクトを追加] をクリックします。
    2. [Android アプリに Firebase を追加] をクリックし、設定手順に沿って操作します。既存の Google プロジェクトをインポートする場合、このステップは自動的に行われることがあります。その場合は、構成ファイルをダウンロードするだけでかまいません。
    3. プロンプトが表示されたら、アプリのパッケージ名を入力します。必ずアプリで使用しているパッケージ名を入力してください。パッケージ名を設定できるのは、アプリを Firebase プロジェクトに追加するときだけです。
    4. google-services.json ファイルをダウンロードします。構成ファイルはいつでも再ダウンロードできます。
    5. このファイルをプロジェクトのモジュール フォルダ(通常は app/)にコピーしていない場合は、コピーします。
  2. EAP の担当者から受け取った SDK を抽出します。
    unzip -d $SDK_DIR 3p_sdk.m2repo.zip
    
  3. SDK の抽出先となるディレクトリとGoogle サービスのプラグインを、プロジェクト レベルの build.gradle に追加します。
    buildscript {
      // ...
      dependencies {
          // ...
          classpath 'com.google.gms:google-services:3.2.0' // google-services plugin
      }
    }
    
    allprojects {
      repositories {
        // Add this
        maven {
          url "$SDK_DIR"
        }
        // This should already be here
        jcenter()
    
        ...
      }
    }
    
  4. 次に、ML Kit の依存関係を含めて、アプリレベルの build.gradle ファイルに apply plugin 行を追加します。

    dependencies {
      // ...
      compile 'com.google.firebase:firebase-core:12.8.0-SNAPSHOT'
      compile 'com.google.firebase:firebase-ml-vision:12.8.0-SNAPSHOT'
    }
    
    // ADD THIS AT THE BOTTOM OF THE FILE
    apply plugin: 'com.google.gms.google-services'
    

ラベル検出ツールを設定する

デフォルトでは、Cloud 検出ツールは STABLE バージョンのモデルを使用して、最大 10 件の結果を返します。この設定を変更したい場合には、FirebaseVisionCloudDetectorOptions オブジェクトを使用して設定し直します。

たとえば、デフォルト設定を両方とも変更するには、次の例のように FirebaseVisionCloudDetectorOptions オブジェクトをビルドします。

FirebaseVisionCloudDetectorOptions options =
    new FirebaseVisionCloudDetectorOptions.Builder()
        .setModelType(FirebaseVisionCloudDetectorOptions.LATEST_MODEL)
        .setMaxResults(15)
        .build();

デフォルト設定を使用するには、次の手順で FirebaseVisionCloudDetectorOptions.DEFAULT を使用します。

ラベル検出ツールを実行する

画像内のオブジェクトにラベルを付けるには、画像を ByteBuffer オブジェクトとして FirebaseVisionCloudLabelDetectordetectInBuffer メソッドに渡すか、画像を android.graphics.Bitmap オブジェクトとして detectInImage メソッドに渡します。

  1. FirebaseVisionCloudLabelDetector のインスタンスを取得します。

    FirebaseVisionCloudLabelDetector detector = FirebaseVision.getInstance()
        .getVisionCloudLabelDetector(options);
    
  2. 画像のメタデータを含む FirebaseVisionImageMetadata オブジェクトを作成します。

    画像を ByteBuffer として渡す場合は、画像の高さ、幅、カラー エンコード形式、および向きを指定する必要があります。

    FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
        .setWidth(1280)
        .setHeight(720)
        .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
        .setRotation(FirebaseVisionImageMetadata.ROTATION_0)
        .build();
    

    画像を Bitmap として渡す場合は、画像の向きを指定するだけです。

    FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
        .setRotation(FirebaseVisionImageMetadata.ROTATION_0)
        .build();
    
  3. 最後に、画像を detectInBuffer または detectInImage メソッドに渡します。

    Task<SparseArray<FirebaseVisionCloudLabel>> result =
        detector.detectInImage(image, metadata)  // or detectInBuffer(buffer, metadata)
        .addOnSuccessListener(
            this,
            new OnSuccessListener<SparseArray<FirebaseVisionCloudLabel>>() {
              @Override
              public void onSuccess(SparseArray<FirebaseVisionCloudLabel> label) {
                // Task completed successfully
                // ...
              }
            })
        .addOnFailureListener(
            this,
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Task failed with an exception
                // ...
              }
            });
    

ラベル付きオブジェクトに関する情報を取得する

ラベル認識オペレーションが成功すると、FirebaseVisionCloudLabel オブジェクトの配列が成功リスナーに渡されます。各 FirebaseVisionCloudLabel オブジェクトは画像内でラベル付けされたものを表します。ラベルごとに、入力イメージの境界座標、ラベルのナレッジグラフ エンティティの ID(使用できる場合)、マッチの信頼スコアを取得できます。次に例を示します。

for(int i = 0; i < labels.size(); i++) {
  FirebaseVisionCloudLabel label = labels.valueAt(i);

  Rect bounds = label.getBoundingBox();
  String label = label.getLabel();
  String entityId = label.getEntityId();
  float confidence = label.getScore();
}