画像へのアノテーション付け

モデルを作成(トレーニング)したら、predict メソッドを使用して画像の予測をリクエストできます。predict メソッドは、モデルが予測する画像内の主な物体に基づいて画像にラベルを適用します。

カスタムモデルの最大寿命は 2 年です。その時間が経過した後もコンテンツを分類し続けるには、新しいモデルを作成してトレーニングする必要があります。

curl の使用

このトピックの curl のサンプルを簡単に実行できるようにするには、次の環境変数を設定します。project-id は GCP プロジェクトの名前に置き換えます。

export PROJECT_ID="project-id"

予測の例

ウェブ UI

  1. AutoML Translation UI を開き、左側のナビゲーション バーにある電球アイコンをクリックして使用可能なモデルを表示します。

    別のプロジェクトのモデルを表示するには、タイトルバーの右上にあるプルダウン リストからプロジェクトを選択します。

  2. 画像のラベル付けに使用するモデルの行をクリックします。

  3. タイトルバーのすぐ下にある [予測] タブをクリックします。

  4. [Upload Images] をクリックして、ラベルを付ける画像をアップロードします。

コマンドライン

画像の予測を行うには、imageBytes フィールドに画像のコンテンツを指定します。画像のコンテンツは、base64 でエンコードされている必要があります。Base64 を使用した画像コンテンツのエンコードについては、Base64 エンコードをご覧ください。

次の例では、画像の予測をリクエストします。

  • model-id をモデルの ID に置き換えます。この ID は、モデルの名前の最後の要素です。たとえば、モデルの名前が projects/434039606874/locations/us-central1/models/3745331181667467569 の場合、モデルの ID は 3745331181667467569 です。
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/model-id:predict \
  -d '{
        "payload" : {
          "image": {
            "imageBytes" : "/9j/4AAQSkZJRgABAQAAAQ … "
          },
        }
      }'

出力は次のようになります。

{
  "payload": [
    {
      "displayName": "Lily",
      "classification": {
        "score": 0.8989502
      }
    },
    {
      "displayName": "Daisy",
      "classification": {
        "score": 0.10098731
      }
    },
    {
      "displayName": "--other--",
      "classification": {
        "score": 6.2490464e-05
      }
    }
  ]
}

AutoML Vision モデルからの予測は、payload フィールドに含まれています。

  • displayName は、AutoML Vision モデルによって予測されたラベルです。
  • score は、指定されたラベルが画像に適用される信頼度を表します。この範囲は 0(信頼できない)~1(信頼度が高い)です。

Python

このサンプルコードを実行するには、あらかじめ Python クライアント ライブラリをインストールしておく必要があります。

  • model_full_id パラメータはモデルの完全な名前です。たとえば、projects/434039606874/locations/us-central1/models/3745331181667467569 のようになります。
# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# model_id = 'MODEL_ID_HERE'
# file_path = '/local/path/to/file'
# score_threshold = 'value from 0.0 to 0.5'

from google.cloud import automl_v1beta1 as automl

automl_client = automl.AutoMlClient()

# Get the full path of the model.
model_full_id = automl_client.model_path(
    project_id, compute_region, model_id
)

# Create client for prediction service.
prediction_client = automl.PredictionServiceClient()

# Read the image and assign to payload.
with open(file_path, "rb") as image_file:
    content = image_file.read()
payload = {"image": {"image_bytes": content}}

# params is additional domain-specific parameters.
# score_threshold is used to filter the result
# Initialize params
params = {}
if score_threshold:
    params = {"score_threshold": score_threshold}

response = prediction_client.predict(model_full_id, payload, params)
print("Prediction results:")
for result in response.payload:
    print("Predicted class name: {}".format(result.display_name))
    print("Predicted class score: {}".format(result.classification.score))

Java

/**
 * Demonstrates using the AutoML client to predict an image.
 *
 * @param projectId the Id of the project.
 * @param computeRegion the Region name.
 * @param modelId the Id of the model which will be used for text classification.
 * @param filePath the Local text file path of the content to be classified.
 * @param scoreThreshold the Confidence score. Only classifications with confidence score above
 *     scoreThreshold are displayed.
 * @throws IOException on Input/Output errors.
 */
public static void predict(
    String projectId,
    String computeRegion,
    String modelId,
    String filePath,
    String scoreThreshold)
    throws IOException {

  // Instantiate client for prediction service.
  PredictionServiceClient predictionClient = PredictionServiceClient.create();

  // Get the full path of the model.
  ModelName name = ModelName.of(projectId, computeRegion, modelId);

  // Read the image and assign to payload.
  ByteString content = ByteString.copyFrom(Files.readAllBytes(Paths.get(filePath)));
  Image image = Image.newBuilder().setImageBytes(content).build();
  ExamplePayload examplePayload = ExamplePayload.newBuilder().setImage(image).build();

  // Additional parameters that can be provided for prediction e.g. Score Threshold
  Map<String, String> params = new HashMap<>();
  if (scoreThreshold != null) {
    params.put("score_threshold", scoreThreshold);
  }
  // Perform the AutoML Prediction request
  PredictResponse response = predictionClient.predict(name, examplePayload, params);

  System.out.println("Prediction results:");
  for (AnnotationPayload annotationPayload : response.getPayloadList()) {
    System.out.println("Predicted class name :" + annotationPayload.getDisplayName());
    System.out.println(
        "Predicted class score :" + annotationPayload.getClassification().getScore());
  }
}

Node.js

  const automl = require('@google-cloud/automl').v1beta1;
  const fs = require('fs');

  // Create client for prediction service.
  const client = new automl.PredictionServiceClient();

  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = `The GCLOUD_PROJECT string, e.g. "my-gcloud-project"`;
  // const computeRegion = `region-name, e.g. "us-central1"`;
  // const modelId = `id of the model, e.g. “ICN12345”`;
  // const filePath = `local text file path of content to be classified, e.g. "./resources/test.txt"`;
  // const scoreThreshold = `value between 0.0 and 1.0, e.g. "0.5"';

  // Get the full path of the model.
  const modelFullId = client.modelPath(projectId, computeRegion, modelId);

  // Read the file content for prediction.
  const content = fs.readFileSync(filePath, 'base64');

  const params = {};

  if (scoreThreshold) {
    params.scoreThreshold = scoreThreshold;
  }

  // Set the payload by giving the content and type of the file.
  const payload = {};
  payload.image = {imageBytes: content};

  // params is additional domain-specific parameters.
  // currently there is no additional parameters supported.
  client
    .predict({name: modelFullId, payload: payload, params: params})
    .then(responses => {
      console.log(`Prediction results:`);
      responses[0].payload.forEach(result => {
        console.log(`Predicted class name: ${result.displayName}`);
        console.log(`Predicted class score: ${result.classification.score}`);
      });
    })
    .catch(err => {
      console.error(err);
    });

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。