提交图片标签请求

AI Platform Data Labeling Service 支持六种类型的图片标签任务:

  • 分类任务:标签添加者为每张图片分配一个或多个标签。
  • 边界框任务:标签添加者选择标签,然后绘制一个或多个边界框,将该标签应用于图片中的特定部分。
  • 定向边界框任务 - 与边界框任务(其中边界框与 x 轴对齐)类似,但定向边界框可以朝向任何方向。
  • 边界多边形任务:与边界框任务类似,标签添加者选择标签,然后绘制闭合多边形,将该标签应用于图片中的特定部分。
  • 折线任务 - 与边界框任务类似,标签添加者选择标签并绘制折线,将该标签应用到图片中的特定部分。一条折线由一系列(至少两个)点组成,这些点按线段首尾相连。
  • 分割任务:标签添加者为每个标签生成遮罩。输出为颜色映射表,其中包含标签与颜色的映射关系。

图片分类任务

网页界面

  1. 打开数据标签服务界面

  2. 从左侧导航栏中选择数据集

    数据集页面会显示之前为当前项目创建的数据集的状态。

  3. 点击要提交以便加标签的数据集的名称。

    状态为“导入完成”的数据集可供提交。数据类型列显示数据集包含的是图片、视频还是文本。

  4. 数据集详情页面上,点击标题栏中的创建标签任务按钮。

  5. 新建标签任务页面上,为带有注释的数据集输入名称和描述。

    带有注释的数据集是人工标签添加者为数据集加了标签以后的版本。

  6. 目标下拉列表中,选择要对此数据集执行的标签任务类型。

    该下拉列表仅包含可用于此数据集中数据类型的目标。如果您没有看到所需的目标,则可能是因为您选择了包含其他类型数据的数据集。请关闭新建标签任务页面,然后选择其他数据集。

  7. 标签集下拉列表中,选择您希望标签添加者将其应用到此数据集所含数据项的标签集。

    该下拉列表包含与此项目关联的所有标签集。您必须选择一个标签集。

  8. 说明下拉列表中,选择要向处理此数据集的标签添加者提供的说明。

    该下拉列表包含与此项目关联的所有instructions。您必须在标签请求中添加说明。

  9. 处理每个数据项的标签添加者数下拉列表中,指定要查看该数据集中每一项的标签添加者数。

    默认值为一位,但您可以请求安排三位或五位标签添加者为每一项加标签。

  10. 点击复选框,以确认您了解系统会通过何种方式向您收取标签服务费用。

  11. 点击创建

命令行

设置以下环境变量:
  1. PROJECT_ID 变量设置为您的 Google Cloud 项目 ID。
  2. 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}/image:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "TEXT_CLASSIFICATION",
  "imageClassificationConfig": {
    "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.LabelImageClassificationOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

Python

在运行此代码示例之前,您必须先安装 Python 客户端库

def label_image(
    dataset_resource_name, instruction_resource_name, annotation_spec_set_resource_name
):
    """Labels an image 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.LabelImageRequest.Feature.CLASSIFICATION

    # annotation_spec_set_resource_name needs to be created beforehand.
    # See the examples in the following:
    # https://cloud.google.com/ai-platform/data-labeling/docs/label-sets
    config = datalabeling.ImageClassificationConfig(
        annotation_spec_set=annotation_spec_set_resource_name,
        allow_multi_label=False,
        answer_aggregation_type=datalabeling.StringAggregationType.MAJORITY_VOTE,
    )

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

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

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.ImageClassificationConfig;
import com.google.cloud.datalabeling.v1beta1.LabelImageRequest;
import com.google.cloud.datalabeling.v1beta1.LabelImageRequest.Feature;
import com.google.cloud.datalabeling.v1beta1.LabelOperationMetadata;
import com.google.cloud.datalabeling.v1beta1.StringAggregationType;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

class LabelImage {

  // Start an Image Labeling Task
  static void labelImage(
      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();

      ImageClassificationConfig imageClassificationConfig =
          ImageClassificationConfig.newBuilder()
              .setAllowMultiLabel(true)
              .setAnswerAggregationType(StringAggregationType.MAJORITY_VOTE)
              .setAnnotationSpecSet(formattedAnnotationSpecSetName)
              .build();

      LabelImageRequest labelImageRequest =
          LabelImageRequest.newBuilder()
              .setParent(formattedDatasetName)
              .setBasicConfig(humanAnnotationConfig)
              .setImageClassificationConfig(imageClassificationConfig)
              .setFeature(Feature.CLASSIFICATION)
              .build();

      OperationFuture<AnnotatedDataset, LabelOperationMetadata> operation =
          dataLabelingServiceClient.labelImageAsync(labelImageRequest);

      // 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();
    }
  }
}

边界框

网页界面

  1. 打开数据标签服务界面

  2. 从左侧导航栏中选择数据集

    数据集页面会显示之前为当前项目创建的数据集的状态。

  3. 点击要提交以便加标签的数据集的名称。

    状态为“导入完成”的数据集可供提交。数据类型列显示数据集包含的是图片、视频还是文本。

  4. 数据集详情页面上,点击标题栏中的创建标签任务按钮。

  5. 新建标签任务页面上,为带有注释的数据集输入名称和描述。

    带有注释的数据集是人工标签添加者为数据集加了标签以后的版本。

  6. 目标下拉列表中,选择要对此数据集执行的标签任务类型。

    该下拉列表仅包含可用于此数据集中数据类型的目标。如果您没有看到所需的目标,则可能是因为您选择了包含其他类型数据的数据集。请关闭新建标签任务页面,然后选择其他数据集。

  7. 标签集下拉列表中,选择您希望标签添加者将其应用到此数据集所含数据项的标签集。

    该下拉列表包含与此项目关联的所有标签集。您必须选择一个标签集。

  8. 说明下拉列表中,选择要向处理此数据集的标签添加者提供的说明。

    该下拉列表包含与此项目关联的所有instructions。您必须在标签请求中添加说明。

  9. 处理每个数据项的标签添加者数下拉列表中,指定要查看该数据集中每一项的标签添加者数。

    默认值为一位,但您可以请求安排三位或五位标签添加者为每一项加标签。

  10. 点击复选框,以确认您了解系统会通过何种方式向您收取标签服务费用。

  11. 点击创建

命令行

设置以下环境变量:
  1. PROJECT_ID 变量设置为您的 Google Cloud 项目 ID。
  2. 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}/image:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "BOUNDING_BOX",
  "boundingPolyConfig": {
    "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.LabelImageBoundingBoxOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}