Como enviar solicitações de rotulagem de imagens

O serviço de rotulagem de dados do AI Platform é compatível com seis tipos de tarefas de rotulagem de imagens:

  • Classificação, em que os rotuladores atribuem um ou mais rótulos a cada imagem.
  • Caixas delimitadoras, em que os rotuladores escolhem um rótulo e desenham uma ou mais caixas delimitadoras para aplicar o rótulo às partes da imagem.
  • Tarefa de caixa delimitadora orientada, semelhante às tarefas de caixa delimitadora, em que as caixas delimitadoras são alinhadas no eixo x, enquanto a caixa delimitadora orientada pode estar em qualquer direção.
  • Polígono delimitador, semelhante à caixa delimitadora, em que os rotuladores escolhem um rótulo e desenham polígonos fechados para aplicar o rótulo às partes da imagem.
  • Tarefas de polilinha, semelhantes à caixa delimitadora, em que os rotuladores escolhem um rótulo e desenham polilinhas para aplicar o rótulo às partes da imagem. Uma polilinha consiste em uma lista com pelo menos dois pontos conectados de ponta a ponta por segmentos de linha.
  • Tarefas de segmentação, em que o rotulador gera uma máscara para cada rótulo. A saída é uma tabela de mapeamento de cores, que mapeia o rótulo na cor.

Tarefas de classificação de imagens

IU da Web

  1. Abra a IU do serviço de rotulagem de dados.

  2. Selecione Conjuntos de dados na navegação à esquerda.

    A página Conjuntos de dados mostra o status de conjuntos de dados criados anteriormente para o projeto atual.

  3. Clique no nome do conjunto de dados que você quer enviar para rotulagem.

    Os conjuntos de dados com status Importação concluída estão disponíveis para envio. A coluna Tipo de dados mostra se o conjunto de dados inclui imagens, vídeos ou texto.

  4. Na página Detalhes do conjunto de dados, clique no botão Criar tarefa de rotulagem na barra de título.

  5. Na página Nova tarefa de rotulagem, insira um nome e uma descrição para o conjunto de dados anotado.

    O conjunto de dados anotado é a versão desse conjunto de dados depois de rotuladores humanos o terem rotulado.

  6. Na lista suspensa Objetivo, selecione o tipo de tarefa de rotulagem que você quer executar nesse conjunto de dados.

    A lista suspensa inclui apenas os objetivos disponíveis para o tipo de dados nesse conjunto de dados. Se você não vê o objetivo desejado, provavelmente selecionou um conjunto de dados com um tipo diferente de dados. Feche a página Nova tarefa de rotulagem e selecione um conjunto de dados diferente.

  7. Na lista suspensa Conjunto de rótulos, escolha o conjunto de rótulos que você quer que os rotuladores apliquem aos itens de dados neste conjunto.

    A lista suspensa inclui todos os conjuntos de rótulos associados a esse projeto. Selecione um conjunto de dados.

  8. Na lista suspensa Instrução, escolha as instruções que você quer fornecer aos rotuladores que trabalham com esse conjunto de dados.

    A lista suspensa inclui instructions associadas a esse projeto. Você precisa incluir instruções na solicitação de rotulagem.

  9. Na lista suspensa de rotuladores por item de dados, especifique quantos rotuladores você quer que revisem cada item no conjunto de dados.

    O padrão é um, mas é possível solicitar que três ou cinco rotuladores trabalhem em cada item.

  10. Clique na caixa de seleção para confirmar que você entendeu como a rotulagem será cobrada.

  11. Clique em Criar.

Linha de comando

Defina as variáveis de ambiente a seguir:
  1. Variável PROJECT_ID para o ID do projeto do Google Cloud.
  2. Variável DATASET_ID para o ID do conjunto de dados, a partir da resposta de quando você criou o conjunto de dados. O ID é exibido no fim do nome completo do conjunto de dados:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME, que é o nome do seu recurso de instrução.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME, que é o nome do seu recurso de conjunto de rótulos.
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}",
  },
}'

Será exibido um código semelhante a este. É possível usar o ID da operação para saber o status da tarefa. Veja um exemplo nas informações sobre como receber o status de uma operação.

{
  "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

Antes de executar este código de exemplo, você precisa instalar as bibliotecas de cliente do 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

Antes de executar este código de exemplo, é preciso instalar as bibliotecas de cliente do 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();
    }
  }
}

Caixas delimitadoras

IU da Web

  1. Abra a IU do serviço de rotulagem de dados.

  2. Selecione Conjuntos de dados na navegação à esquerda.

    A página Conjuntos de dados mostra o status de conjuntos de dados criados anteriormente para o projeto atual.

  3. Clique no nome do conjunto de dados que você quer enviar para rotulagem.

    Os conjuntos de dados com status Importação concluída estão disponíveis para envio. A coluna Tipo de dados mostra se o conjunto de dados inclui imagens, vídeos ou texto.

  4. Na página Detalhes do conjunto de dados, clique no botão Criar tarefa de rotulagem na barra de título.

  5. Na página Nova tarefa de rotulagem, insira um nome e uma descrição para o conjunto de dados anotado.

    O conjunto de dados anotado é a versão desse conjunto de dados depois de rotuladores humanos o terem rotulado.

  6. Na lista suspensa Objetivo, selecione o tipo de tarefa de rotulagem que você quer executar nesse conjunto de dados.

    A lista suspensa inclui apenas os objetivos disponíveis para o tipo de dados nesse conjunto de dados. Se você não vê o objetivo desejado, provavelmente selecionou um conjunto de dados com um tipo diferente de dados. Feche a página Nova tarefa de rotulagem e selecione um conjunto de dados diferente.

  7. Na lista suspensa Conjunto de rótulos, escolha o conjunto de rótulos que você quer que os rotuladores apliquem aos itens de dados neste conjunto.

    A lista suspensa inclui todos os conjuntos de rótulos associados a esse projeto. Selecione um conjunto de dados.

  8. Na lista suspensa Instrução, escolha as instruções que você quer fornecer aos rotuladores que trabalham com esse conjunto de dados.

    A lista suspensa inclui instructions associadas a esse projeto. Você precisa incluir instruções na solicitação de rotulagem.

  9. Na lista suspensa de rotuladores por item de dados, especifique quantos rotuladores você quer que revisem cada item no conjunto de dados.

    O padrão é um, mas é possível solicitar que três ou cinco rotuladores trabalhem em cada item.

  10. Clique na caixa de seleção para confirmar que você entendeu como a rotulagem será cobrada.

  11. Clique em Criar.

Linha de comando

Defina as variáveis de ambiente a seguir:
  1. Variável PROJECT_ID para o ID do projeto do Google Cloud.
  2. Variável DATASET_ID para o ID do conjunto de dados, a partir da resposta de quando você criou o conjunto de dados. O ID é exibido no fim do nome completo do conjunto de dados:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME, que é o nome do seu recurso de instrução.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME, que é o nome do seu recurso de conjunto de rótulos.
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}",
  },
}'

Será exibido um código semelhante a este. É possível usar o ID da operação para saber o status da tarefa. Veja um exemplo nas informações sobre como receber o status de uma operação.

{
  "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"
  }
}