動画ラベル付けリクエストの送信

AI Platform Data Labeling Service では、次の 4 種類の動画ラベル付けタスクがサポートされています。

  • 分類タスク。ラベル付け担当者は各動画に 1 つ以上のラベルを割り当てます。各動画にラベルを付ける担当者の人数を指定できます。5 人以下にすることをおすすめします。Data Labeling Service では、担当者の多数決によって適切なラベルが決定されます。動画のショット検出を行うかどうかも指定できます。
  • オブジェクト検出タスク。ラベル付け担当者はラベルを選択した後、動画から抽出した画像内のそのラベルを適用する部分を 1 つ以上の境界ボックスで囲みます。さらに別のラベルを選択して同じプロセスを繰り返し、抽出した画像で識別する関心オブジェクトがなくなるまでこのプロセスを続けます。動画から何枚の画像を抽出するかを設定する抽出フレームレートを指定できます。
  • オブジェクト トラッキング タスク。ラベル付け担当者はラベルを選択した後、動画内の特定のオブジェクトが映っている部分を 1 つ以上の境界ボックスで囲み、各オブジェクトを動画全体を通して追跡します。
  • イベントタスク。ラベル付け担当者はラベルを選択した後、動画内のそのラベルを適用するセグメントまたはポイントを示す開始時間と終了時間を選択します。

動画分類

ウェブ UI

  1. Data Labeling Service UI を開きます。

  2. 左側のナビゲーションから [データセット] を選択します。

    [データセット] ページに、現在のプロジェクトでこれまでに作成されたデータセットのステータスが表示されます。

  3. ラベル付けサービスに送信するデータセットの名前をクリックします。

    ステータスが「インポート完了」になっているデータセットを送信できます。[データの種類] 列は、そのデータセットに画像、動画、テキストのいずれが含まれているかを示します。

  4. [データセットの詳細] ページで、タイトルバーにある [Create labeling task] ボタンをクリックします。

  5. [新しいラベル付けタスク] ページで、アノテーション付きデータセットの名前と説明を入力します。

    このアノテーション付きデータセットは、ラベル付け担当者がこのデータセットにラベルを付けた結果です。

  6. [目的] プルダウンから、このデータセットに対して行うラベル付けタスクの種類を選択します。

    このプルダウン リストには、選択したデータセット内のデータの種類に対して使用できる目的のみが含まれます。目的が表示されない場合は、異なる種類のデータセットを選択していると考えられます。[新しいラベル付けタスク] ページを閉じて、別のデータセットを選択します。

  7. [ラベルセット] プルダウンから、ラベル付け担当者がこのデータセット内のデータ項目に適用するラベルセットを選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべてのラベルセットが含まれます。いずれかのラベルセットを選択する必要があります。

  8. [手順] プルダウンから、このデータセットの作業を行うラベル付け担当者向けの指示を選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべての指示が含まれます。ラベル付けリクエストには必ず指示を含める必要があります。

  9. [labelers per data item] プルダウンから、データセット内の各項目を評価するラベル付け担当者の人数を指定します。

    デフォルトは 1 人ですが、3 人または 5 人のラベル付け担当者が各項目のラベル付けを行うようリクエストできます。

  10. チェックボックスをオンにして、ラベル付けの料金について理解したことを示します。

  11. [作成] をクリックします。

コマンドライン

次の環境変数を設定します。
  1. Google Cloud プロジェクト ID を示す PROJECT_ID 変数。
  2. データセットの ID を示す DATASET_ID 変数。データセットの ID はデータセットの作成時にレスポンスで返されます。この ID は完全なデータセット名の最後の部分です。

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. 指示リソースの名前を示す INSTRUCTION_RESOURCE_NAME
  4. ラベルセット リソースの名前を示す ANNOTATION_SPEC_SET_RESOURCE_NAME
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://datalabeling.googleapis.com/v1beta1/projects/${PROJECT_ID}/datasets/${DATASET_ID}/video:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "CLASSIFICATION",
  "videoClassificationConfig": {
    "annotationSpecSetConfigs": ["annotationSpecSet": "${ANNOTATION_SPEC_SET_RESOURCE_NAME}"],
  },
}'

出力は次のようになります。オペレーション ID を使用して、タスクのステータスを取得できます。たとえば、オペレーションのステータスを取得できます。

{
  "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.LabelVideoClassificationOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

Java

このサンプルコードを実行するには、あらかじめ Java クライアント ライブラリをインストールしておく必要があります。
import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.datalabeling.v1beta1.AnnotatedDataset;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceClient;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceSettings;
import com.google.cloud.datalabeling.v1beta1.HumanAnnotationConfig;
import com.google.cloud.datalabeling.v1beta1.LabelOperationMetadata;
import com.google.cloud.datalabeling.v1beta1.LabelVideoRequest;
import com.google.cloud.datalabeling.v1beta1.LabelVideoRequest.Feature;
import com.google.cloud.datalabeling.v1beta1.VideoClassificationConfig;
import com.google.cloud.datalabeling.v1beta1.VideoClassificationConfig.AnnotationSpecSetConfig;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

class LabelVideo {

  // Start a Video Labeling Task
  static void labelVideo(
      String formattedInstructionName,
      String formattedAnnotationSpecSetName,
      String formattedDatasetName)
      throws IOException {
    // String formattedInstructionName = DataLabelingServiceClient.formatInstructionName(
    //      "YOUR_PROJECT_ID", "YOUR_INSTRUCTION_UUID");
    // String formattedAnnotationSpecSetName =
    //     DataLabelingServiceClient.formatAnnotationSpecSetName(
    //         "YOUR_PROJECT_ID", "YOUR_ANNOTATION_SPEC_SET_UUID");
    // String formattedDatasetName = DataLabelingServiceClient.formatDatasetName(
    //      "YOUR_PROJECT_ID", "YOUR_DATASET_UUID");

    DataLabelingServiceSettings settings =
        DataLabelingServiceSettings.newBuilder()
            .build();
    try (DataLabelingServiceClient dataLabelingServiceClient =
        DataLabelingServiceClient.create(settings)) {
      HumanAnnotationConfig humanAnnotationConfig =
          HumanAnnotationConfig.newBuilder()
              .setAnnotatedDatasetDisplayName("annotated_displayname")
              .setAnnotatedDatasetDescription("annotated_description")
              .setInstruction(formattedInstructionName)
              .build();

      AnnotationSpecSetConfig annotationSpecSetConfig =
          AnnotationSpecSetConfig.newBuilder()
              .setAnnotationSpecSet(formattedAnnotationSpecSetName)
              .setAllowMultiLabel(true)
              .build();

      VideoClassificationConfig videoClassificationConfig =
          VideoClassificationConfig.newBuilder()
              .setApplyShotDetection(true)
              .addAnnotationSpecSetConfigs(annotationSpecSetConfig)
              .build();

      LabelVideoRequest labelVideoRequest =
          LabelVideoRequest.newBuilder()
              .setParent(formattedDatasetName)
              .setBasicConfig(humanAnnotationConfig)
              .setVideoClassificationConfig(videoClassificationConfig)
              .setFeature(Feature.CLASSIFICATION)
              .build();

      OperationFuture<AnnotatedDataset, LabelOperationMetadata> operation =
          dataLabelingServiceClient.labelVideoAsync(labelVideoRequest);

      // You'll want to save this for later to retrieve your completed operation.
      System.out.format("Operation Name: %s\n", operation.getName());

      // Cancel the operation to avoid charges when testing.
      dataLabelingServiceClient.getOperationsClient().cancelOperation(operation.getName());
    } catch (IOException | InterruptedException | ExecutionException e) {
      e.printStackTrace();
    }
  }
}

動画オブジェクト検出

ウェブ UI

  1. Data Labeling Service UI を開きます。

  2. 左側のナビゲーションから [データセット] を選択します。

    [データセット] ページに、現在のプロジェクトでこれまでに作成されたデータセットのステータスが表示されます。

  3. ラベル付けサービスに送信するデータセットの名前をクリックします。

    ステータスが「インポート完了」になっているデータセットを送信できます。[データの種類] 列は、そのデータセットに画像、動画、テキストのいずれが含まれているかを示します。

  4. [データセットの詳細] ページで、タイトルバーにある [Create labeling task] ボタンをクリックします。

  5. [新しいラベル付けタスク] ページで、アノテーション付きデータセットの名前と説明を入力します。

    このアノテーション付きデータセットは、ラベル付け担当者がこのデータセットにラベルを付けた結果です。

  6. [目的] プルダウンから、このデータセットに対して行うラベル付けタスクの種類を選択します。

    このプルダウン リストには、選択したデータセット内のデータの種類に対して使用できる目的のみが含まれます。目的が表示されない場合は、異なる種類のデータセットを選択していると考えられます。[新しいラベル付けタスク] ページを閉じて、別のデータセットを選択します。

  7. [ラベルセット] プルダウンから、ラベル付け担当者がこのデータセット内のデータ項目に適用するラベルセットを選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべてのラベルセットが含まれます。いずれかのラベルセットを選択する必要があります。

  8. [手順] プルダウンから、このデータセットの作業を行うラベル付け担当者向けの指示を選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべての指示が含まれます。ラベル付けリクエストには必ず指示を含める必要があります。

  9. [labelers per data item] プルダウンから、データセット内の各項目を評価するラベル付け担当者の人数を指定します。

    デフォルトは 1 人ですが、3 人または 5 人のラベル付け担当者が各項目のラベル付けを行うようリクエストできます。

  10. チェックボックスをオンにして、ラベル付けの料金について理解したことを示します。

  11. [作成] をクリックします。

コマンドライン

次の環境変数を設定します。
  1. Google Cloud プロジェクト ID を示す PROJECT_ID 変数。
  2. データセットの ID を示す DATASET_ID 変数。データセットの ID はデータセットの作成時にレスポンスで返されます。この ID は完全なデータセット名の最後の部分です。

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. 指示リソースの名前を示す INSTRUCTION_RESOURCE_NAME
  4. ラベルセット リソースの名前を示す ANNOTATION_SPEC_SET_RESOURCE_NAME
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://datalabeling.googleapis.com/v1beta1/projects/${PROJECT_ID}/datasets/${DATASET_ID}/video:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "OBJECT_DETECTION",
  "objectDetectionConfig": {
    "annotationSpecSet": "${ANNOTATION_SPEC_SET_RESOURCE_NAME}",
    "instructionMessage": "Detect an object",
    "extractionFrameRate": 4
  },
}'

出力は次のようになります。オペレーション ID を使用して、タスクのステータスを取得できます。たとえば、オペレーションのステータスを取得できます。

{
  "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.LabelVideoObjectDetectionOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

動画オブジェクト トラッキング

ウェブ UI

  1. Data Labeling Service UI を開きます。

  2. 左側のナビゲーションから [データセット] を選択します。

    [データセット] ページに、現在のプロジェクトでこれまでに作成されたデータセットのステータスが表示されます。

  3. ラベル付けサービスに送信するデータセットの名前をクリックします。

    ステータスが「インポート完了」になっているデータセットを送信できます。[データの種類] 列は、そのデータセットに画像、動画、テキストのいずれが含まれているかを示します。

  4. [データセットの詳細] ページで、タイトルバーにある [Create labeling task] ボタンをクリックします。

  5. [新しいラベル付けタスク] ページで、アノテーション付きデータセットの名前と説明を入力します。

    このアノテーション付きデータセットは、ラベル付け担当者がこのデータセットにラベルを付けた結果です。

  6. [目的] プルダウンから、このデータセットに対して行うラベル付けタスクの種類を選択します。

    このプルダウン リストには、選択したデータセット内のデータの種類に対して使用できる目的のみが含まれます。目的が表示されない場合は、異なる種類のデータセットを選択していると考えられます。[新しいラベル付けタスク] ページを閉じて、別のデータセットを選択します。

  7. [ラベルセット] プルダウンから、ラベル付け担当者がこのデータセット内のデータ項目に適用するラベルセットを選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべてのラベルセットが含まれます。いずれかのラベルセットを選択する必要があります。

  8. [手順] プルダウンから、このデータセットの作業を行うラベル付け担当者向けの指示を選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべての指示が含まれます。ラベル付けリクエストには必ず指示を含める必要があります。

  9. [labelers per data item] プルダウンから、データセット内の各項目を評価するラベル付け担当者の人数を指定します。

    デフォルトは 1 人ですが、3 人または 5 人のラベル付け担当者が各項目のラベル付けを行うようリクエストできます。

  10. チェックボックスをオンにして、ラベル付けの料金について理解したことを示します。

  11. [作成] をクリックします。

コマンドライン

次の環境変数を設定します。
  1. Google Cloud プロジェクト ID を示す PROJECT_ID 変数。
  2. データセットの ID を示す DATASET_ID 変数。データセットの ID はデータセットの作成時にレスポンスで返されます。この ID は完全なデータセット名の最後の部分です。

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. 指示リソースの名前を示す INSTRUCTION_RESOURCE_NAME
  4. ラベルセット リソースの名前を示す ANNOTATION_SPEC_SET_RESOURCE_NAME
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://datalabeling.googleapis.com/v1beta1/projects/${PROJECT_ID}/datasets/${DATASET_ID}/video:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "OBJECT_TRACKING",
  "objectTrackingConfig": {
    "annotationSpecSet": "${ANNOTATION_SPEC_SET_RESOURCE_NAME}"
  },
}'

出力は次のようになります。オペレーション ID を使用して、タスクのステータスを取得できます。たとえば、オペレーションのステータスを取得できます。

{
  "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.LabelVideoObjectTrackingOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

Python

このサンプルコードを実行するには、あらかじめ Python クライアント ライブラリをインストールしておく必要があります。
def label_video(
    dataset_resource_name, instruction_resource_name, annotation_spec_set_resource_name
):
    """Labels a video dataset."""
    from google.cloud import datalabeling_v1beta1 as datalabeling

    client = datalabeling.DataLabelingServiceClient()

    basic_config = datalabeling.HumanAnnotationConfig(
        instruction=instruction_resource_name,
        annotated_dataset_display_name="YOUR_ANNOTATED_DATASET_DISPLAY_NAME",
        label_group="YOUR_LABEL_GROUP",
        replica_count=1,
    )

    feature = datalabeling.LabelVideoRequest.Feature.OBJECT_TRACKING

    config = datalabeling.ObjectTrackingConfig(
        annotation_spec_set=annotation_spec_set_resource_name
    )

    response = client.label_video(
        request={
            "parent": dataset_resource_name,
            "basic_config": basic_config,
            "feature": feature,
            "object_tracking_config": config,
        }
    )

    print(f"Label_video operation name: {response.operation.name}")
    return response

動画イベント

ウェブ UI

  1. Data Labeling Service UI を開きます。

  2. 左側のナビゲーションから [データセット] を選択します。

    [データセット] ページに、現在のプロジェクトでこれまでに作成されたデータセットのステータスが表示されます。

  3. ラベル付けサービスに送信するデータセットの名前をクリックします。

    ステータスが「インポート完了」になっているデータセットを送信できます。[データの種類] 列は、そのデータセットに画像、動画、テキストのいずれが含まれているかを示します。

  4. [データセットの詳細] ページで、タイトルバーにある [Create labeling task] ボタンをクリックします。

  5. [新しいラベル付けタスク] ページで、アノテーション付きデータセットの名前と説明を入力します。

    このアノテーション付きデータセットは、ラベル付け担当者がこのデータセットにラベルを付けた結果です。

  6. [目的] プルダウンから、このデータセットに対して行うラベル付けタスクの種類を選択します。

    このプルダウン リストには、選択したデータセット内のデータの種類に対して使用できる目的のみが含まれます。目的が表示されない場合は、異なる種類のデータセットを選択していると考えられます。[新しいラベル付けタスク] ページを閉じて、別のデータセットを選択します。

  7. [ラベルセット] プルダウンから、ラベル付け担当者がこのデータセット内のデータ項目に適用するラベルセットを選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべてのラベルセットが含まれます。いずれかのラベルセットを選択する必要があります。

  8. [手順] プルダウンから、このデータセットの作業を行うラベル付け担当者向けの指示を選択します。

    このプルダウン リストには、現在のプロジェクトに関連付けられているすべての指示が含まれます。ラベル付けリクエストには必ず指示を含める必要があります。

  9. [labelers per data item] プルダウンから、データセット内の各項目を評価するラベル付け担当者の人数を指定します。

    デフォルトは 1 人ですが、3 人または 5 人のラベル付け担当者が各項目のラベル付けを行うようリクエストできます。

  10. チェックボックスをオンにして、ラベル付けの料金について理解したことを示します。

  11. [作成] をクリックします。

コマンドライン

次の環境変数を設定します。
  1. Google Cloud プロジェクト ID を示す PROJECT_ID 変数。
  2. データセットの ID を示す DATASET_ID 変数。データセットの ID はデータセットの作成時にレスポンスで返されます。この ID は完全なデータセット名の最後の部分です。

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. 指示リソースの名前を示す INSTRUCTION_RESOURCE_NAME
  4. ラベルセット リソースの名前を示す ANNOTATION_SPEC_SET_RESOURCE_NAME
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://datalabeling.googleapis.com/v1beta1/projects/${PROJECT_ID}/datasets/${DATASET_ID}/video:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "EVENT",
  "eventConfig": {
    "annotationSpecSets": ["${ANNOTATION_SPEC_SET_RESOURCE_NAME}]"
  },
}'

出力は次のようになります。オペレーション ID を使用して、タスクのステータスを取得できます。たとえば、オペレーションのステータスを取得できます。

{
  "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.LabelVideoEventOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}