Como enviar solicitações de rotulagem de vídeo

O serviço de rotulagem de dados do AI Platform é compatível com quatro tipos de tarefas de rotulagem de vídeos:

  • Tarefas de classificação, em que os rotuladores atribuem um ou mais rótulos a cada vídeo. Você especifica o número de rotuladores para rotular cada vídeo. Recomendamos que o número seja cinco ou menos. O serviço de rotulagem de dados faz uma votação majoritária para determinar os rótulos adequados. Também é possível especificar se você quer aplicar a detecção de imagens no vídeo ou não.
  • Tarefas de detecção de objetos, em que os rotuladores escolhem um rótulo e desenham uma ou mais caixas delimitadoras para aplicar às partes da imagem extraída do vídeo. Eles podem escolher outro rótulo e repetir o processo até que não haja mais objetos interessantes para identificar na imagem extraída. Especifique o frame rate de extração para determinar quantas imagens você quer extrair do vídeo.
  • Tarefas de rastreamento de objeto, em que os rotuladores escolhem um rótulo e desenham uma ou mais caixas delimitadoras para indicar a(s) parte(s) do vídeo de determinado(s) objeto(s) e continuam rastreando cada objeto ao longo do vídeo.
  • Tarefas de evento, em que os rotuladores escolhem um rótulo e os horários de início e término para aplicar rótulos ao segmento ou ao ponto no vídeo.

Classificação do vídeo

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 encontrar o objetivo pretendido, isso provavelmente significa que você selecionou um conjunto com outro tipo 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. Você precisa escolher um conjunto.

  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 rotulem cada item.

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

  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}/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}"],
  },
}'

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.LabelVideoClassificationOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

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

Detecção de objetos de vídeo

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 encontrar o objetivo pretendido, isso provavelmente significa que você selecionou um conjunto com outro tipo 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. Você precisa escolher um conjunto.

  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 rotulem cada item.

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

  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}/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
  },
}'

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.LabelVideoObjectDetectionOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

Rastreamento de objetos de vídeo

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 encontrar o objetivo pretendido, isso provavelmente significa que você selecionou um conjunto com outro tipo 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. Você precisa escolher um conjunto.

  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 rotulem cada item.

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

  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}/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}"
  },
}'

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.LabelVideoObjectTrackingOperationMetadata",
    "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_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

Evento de vídeo

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 encontrar o objetivo pretendido, isso provavelmente significa que você selecionou um conjunto com outro tipo 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. Você precisa escolher um conjunto.

  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 rotulem cada item.

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

  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}/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}]"
  },
}'

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.LabelVideoEventOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}