Envoyer des demandes d'étiquetage des vidéos

Le service d'étiquetage des données AI Platform est compatible avec quatre types de tâches d'étiquetage des vidéos :

  • Les tâches de classification, où les étiqueteurs attribuent une ou plusieurs étiquettes à chaque vidéo. Vous spécifiez le nombre d'étiqueteurs associés à chaque vidéo. Nous vous recommandons de ne pas en avoir plus de cinq. Le service d'étiquetage des données effectue ensuite un vote majoritaire pour déterminer quelles étiquettes sont appropriées. Vous pouvez également spécifier s'il faut appliquer la détection des plans sur la vidéo.
  • Les tâches de détection d'objets, où les étiqueteurs choisissent une étiquette, puis tracent un ou plusieurs cadres de délimitation à appliquer aux parties de l'image extraite de la vidéo. Les étiqueteurs peuvent choisir une autre étiquette et répéter le processus jusqu'à ce qu'il n'y ait plus aucun objet d'intérêt à identifier dans l'image extraite. Vous pouvez spécifier la fréquence d'images d'extraction pour déterminer le nombre d'images à extraire de la vidéo.
  • Les tâches de suivi d'objet, où les étiqueteurs choisissent une étiquette, puis tracent un ou plusieurs cadres de délimitation pour indiquer quelles parties de la vidéo s'appliquent à certains objets, et pour faire un suivi de chaque objet dans la vidéo complète.
  • Les tâches d'événement, où les étiqueteurs choisissent une étiquette, puis sélectionnent une heure de début et de fin pour appliquer des étiquettes au segment ou au point de la vidéo.

Classification de vidéos

UI Web

  1. Ouvrez l'interface utilisateur du service d'ajout d'étiquettes aux données.

  2. Sélectionnez Ensembles de données dans le menu de navigation de gauche.

    La page Ensembles de données indique l'état des ensembles de données créés précédemment pour le projet en cours.

  3. Cliquez sur le nom de l'ensemble de données pour lequel vous souhaitez demander un ajout d'étiquettes.

    Les ensembles de données dont l'état est Importation terminée peuvent être envoyés. La colonne Type de données indique si l'ensemble de données inclut des images, des vidéos ou du texte.

  4. Sur la page Détails relatifs à l'ensemble de données, cliquez sur le bouton Créer une tâche d'étiquetage dans la barre de titre.

  5. Sur la page Nouvelle tâche d'étiquetage, saisissez un nom et une description pour l'ensemble de données annoté.

    L'ensemble de données annoté correspond à la version de cet ensemble de données une fois qu'il a été étiqueté manuellement.

  6. Dans le menu déroulant Objectif, sélectionnez le type de tâche d'ajout d'étiquettes que vous souhaitez appliquer à cet ensemble de données.

    La liste déroulante n'inclut que les objectifs disponibles pour le type des données contenues dans cet ensemble de données. Si vous ne trouvez pas l'objectif que vous souhaitez, vous avez probablement sélectionné un ensemble de données contenant un type de données différent. Fermez la page Nouvelle tâche d'ajout d'étiquettes et sélectionnez un autre ensemble de données.

  7. Dans le menu déroulant Ensemble d'étiquettes, choisissez l'ensemble d'étiquettes que les étiqueteurs devront appliquer aux éléments de données de cet ensemble.

    La liste déroulante inclut tous les ensembles d'étiquettes associés à ce projet. Vous devez choisir un ensemble.

  8. Dans le menu déroulant Instruction, choisissez les instructions que vous souhaitez fournir aux étiqueteurs travaillant sur cet ensemble de données.

    La liste déroulante inclut toutes les instructions associées à ce projet. Vous devez inclure des instructions dans la demande d'ajout d'étiquettes.

  9. Dans le menu déroulant étiqueteurs par élément de données, spécifiez le nombre d'étiqueteurs qui devront réviser chaque élément de l'ensemble de données.

    La valeur par défaut est d'un étiqueteur par élément, mais vous pouvez demander à ce que trois ou cinq étiqueteurs travaillent sur chaque élément.

  10. Cochez la case pour confirmer que vous comprenez comment l'étiquetage vous sera facturé.

  11. Cliquez sur Créer.

Ligne de commande

Définissez les variables d'environnement suivantes :
  1. La variable PROJECT_ID à votre ID de projet Google Cloud
  2. La variable DATASET_ID à l'ID de votre ensemble de données, issue de la réponse obtenue lorsque vous avez créé l'ensemble de données. L'ID apparaît à la fin du nom complet de l'ensemble de données :

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. La variable INSTRUCTION_RESOURCE_NAME au nom de votre ressource d'instruction.
  4. La variable ANNOTATION_SPEC_SET_RESOURCE_NAME sur le nom de votre ressource d'ensemble d'étiquettes.
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}"],
  },
}'

Des résultats semblables aux lignes suivantes devraient s'afficher : Vous pouvez obtenir l'état de la tâche à l'aide de l'ID d'opération. Obtenir l'état d'une opération en est un exemple.

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

Avant de pouvoir exécuter cet exemple de code, vous devez installer les bibliothèques clientes 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();
    }
  }
}

Détection d'objet vidéo

UI Web

  1. Ouvrez l'interface utilisateur du service d'ajout d'étiquettes aux données.

  2. Sélectionnez Ensembles de données dans le menu de navigation de gauche.

    La page Ensembles de données indique l'état des ensembles de données créés précédemment pour le projet en cours.

  3. Cliquez sur le nom de l'ensemble de données pour lequel vous souhaitez demander un ajout d'étiquettes.

    Les ensembles de données dont l'état est Importation terminée peuvent être envoyés. La colonne Type de données indique si l'ensemble de données inclut des images, des vidéos ou du texte.

  4. Sur la page Détails relatifs à l'ensemble de données, cliquez sur le bouton Créer une tâche d'étiquetage dans la barre de titre.

  5. Sur la page Nouvelle tâche d'étiquetage, saisissez un nom et une description pour l'ensemble de données annoté.

    L'ensemble de données annoté correspond à la version de cet ensemble de données une fois qu'il a été étiqueté manuellement.

  6. Dans le menu déroulant Objectif, sélectionnez le type de tâche d'ajout d'étiquettes que vous souhaitez appliquer à cet ensemble de données.

    La liste déroulante n'inclut que les objectifs disponibles pour le type des données contenues dans cet ensemble de données. Si vous ne trouvez pas l'objectif que vous souhaitez, vous avez probablement sélectionné un ensemble de données contenant un type de données différent. Fermez la page Nouvelle tâche d'ajout d'étiquettes et sélectionnez un autre ensemble de données.

  7. Dans le menu déroulant Ensemble d'étiquettes, choisissez l'ensemble d'étiquettes que les étiqueteurs devront appliquer aux éléments de données de cet ensemble.

    La liste déroulante inclut tous les ensembles d'étiquettes associés à ce projet. Vous devez choisir un ensemble.

  8. Dans le menu déroulant Instruction, choisissez les instructions que vous souhaitez fournir aux étiqueteurs travaillant sur cet ensemble de données.

    La liste déroulante inclut toutes les instructions associées à ce projet. Vous devez inclure des instructions dans la demande d'ajout d'étiquettes.

  9. Dans le menu déroulant étiqueteurs par élément de données, spécifiez le nombre d'étiqueteurs qui devront réviser chaque élément de l'ensemble de données.

    La valeur par défaut est d'un étiqueteur par élément, mais vous pouvez demander à ce que trois ou cinq étiqueteurs travaillent sur chaque élément.

  10. Cochez la case pour confirmer que vous comprenez comment l'étiquetage vous sera facturé.

  11. Cliquez sur Créer.

Ligne de commande

Définissez les variables d'environnement suivantes :
  1. La variable PROJECT_ID à votre ID de projet Google Cloud
  2. La variable DATASET_ID à l'ID de votre ensemble de données, issue de la réponse obtenue lorsque vous avez créé l'ensemble de données. L'ID apparaît à la fin du nom complet de l'ensemble de données :

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. La variable INSTRUCTION_RESOURCE_NAME au nom de votre ressource d'instruction.
  4. La variable ANNOTATION_SPEC_SET_RESOURCE_NAME sur le nom de votre ressource d'ensemble d'étiquettes.
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
  },
}'

Des résultats semblables aux lignes suivantes devraient s'afficher : Vous pouvez obtenir l'état de la tâche à l'aide de l'ID d'opération. Obtenir l'état d'une opération en est un exemple.

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

Suivi des objets vidéo

UI Web

  1. Ouvrez l'interface utilisateur du service d'ajout d'étiquettes aux données.

  2. Sélectionnez Ensembles de données dans le menu de navigation de gauche.

    La page Ensembles de données indique l'état des ensembles de données créés précédemment pour le projet en cours.

  3. Cliquez sur le nom de l'ensemble de données pour lequel vous souhaitez demander un ajout d'étiquettes.

    Les ensembles de données dont l'état est Importation terminée peuvent être envoyés. La colonne Type de données indique si l'ensemble de données inclut des images, des vidéos ou du texte.

  4. Sur la page Détails relatifs à l'ensemble de données, cliquez sur le bouton Créer une tâche d'étiquetage dans la barre de titre.

  5. Sur la page Nouvelle tâche d'étiquetage, saisissez un nom et une description pour l'ensemble de données annoté.

    L'ensemble de données annoté correspond à la version de cet ensemble de données une fois qu'il a été étiqueté manuellement.

  6. Dans le menu déroulant Objectif, sélectionnez le type de tâche d'ajout d'étiquettes que vous souhaitez appliquer à cet ensemble de données.

    La liste déroulante n'inclut que les objectifs disponibles pour le type des données contenues dans cet ensemble de données. Si vous ne trouvez pas l'objectif que vous souhaitez, vous avez probablement sélectionné un ensemble de données contenant un type de données différent. Fermez la page Nouvelle tâche d'ajout d'étiquettes et sélectionnez un autre ensemble de données.

  7. Dans le menu déroulant Ensemble d'étiquettes, choisissez l'ensemble d'étiquettes que les étiqueteurs devront appliquer aux éléments de données de cet ensemble.

    La liste déroulante inclut tous les ensembles d'étiquettes associés à ce projet. Vous devez choisir un ensemble.

  8. Dans le menu déroulant Instruction, choisissez les instructions que vous souhaitez fournir aux étiqueteurs travaillant sur cet ensemble de données.

    La liste déroulante inclut toutes les instructions associées à ce projet. Vous devez inclure des instructions dans la demande d'ajout d'étiquettes.

  9. Dans le menu déroulant étiqueteurs par élément de données, spécifiez le nombre d'étiqueteurs qui devront réviser chaque élément de l'ensemble de données.

    La valeur par défaut est d'un étiqueteur par élément, mais vous pouvez demander à ce que trois ou cinq étiqueteurs travaillent sur chaque élément.

  10. Cochez la case pour confirmer que vous comprenez comment l'étiquetage vous sera facturé.

  11. Cliquez sur Créer.

Ligne de commande

Définissez les variables d'environnement suivantes :
  1. La variable PROJECT_ID à votre ID de projet Google Cloud
  2. La variable DATASET_ID à l'ID de votre ensemble de données, issue de la réponse obtenue lorsque vous avez créé l'ensemble de données. L'ID apparaît à la fin du nom complet de l'ensemble de données :

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. La variable INSTRUCTION_RESOURCE_NAME au nom de votre ressource d'instruction.
  4. La variable ANNOTATION_SPEC_SET_RESOURCE_NAME sur le nom de votre ressource d'ensemble d'étiquettes.
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}"
  },
}'

Des résultats semblables aux lignes suivantes devraient s'afficher : Vous pouvez obtenir l'état de la tâche à l'aide de l'ID d'opération. Obtenir l'état d'une opération en est un exemple.

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

Avant de pouvoir exécuter cet exemple de code, vous devez installer les bibliothèques clientes 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("Label_video operation name: {}".format(response.operation.name))
    return response

Événement vidéo

UI Web

  1. Ouvrez l'interface utilisateur du service d'ajout d'étiquettes aux données.

  2. Sélectionnez Ensembles de données dans le menu de navigation de gauche.

    La page Ensembles de données indique l'état des ensembles de données créés précédemment pour le projet en cours.

  3. Cliquez sur le nom de l'ensemble de données pour lequel vous souhaitez demander un ajout d'étiquettes.

    Les ensembles de données dont l'état est Importation terminée peuvent être envoyés. La colonne Type de données indique si l'ensemble de données inclut des images, des vidéos ou du texte.

  4. Sur la page Détails relatifs à l'ensemble de données, cliquez sur le bouton Créer une tâche d'étiquetage dans la barre de titre.

  5. Sur la page Nouvelle tâche d'étiquetage, saisissez un nom et une description pour l'ensemble de données annoté.

    L'ensemble de données annoté correspond à la version de cet ensemble de données une fois qu'il a été étiqueté manuellement.

  6. Dans le menu déroulant Objectif, sélectionnez le type de tâche d'ajout d'étiquettes que vous souhaitez appliquer à cet ensemble de données.

    La liste déroulante n'inclut que les objectifs disponibles pour le type des données contenues dans cet ensemble de données. Si vous ne trouvez pas l'objectif que vous souhaitez, vous avez probablement sélectionné un ensemble de données contenant un type de données différent. Fermez la page Nouvelle tâche d'ajout d'étiquettes et sélectionnez un autre ensemble de données.

  7. Dans le menu déroulant Ensemble d'étiquettes, choisissez l'ensemble d'étiquettes que les étiqueteurs devront appliquer aux éléments de données de cet ensemble.

    La liste déroulante inclut tous les ensembles d'étiquettes associés à ce projet. Vous devez choisir un ensemble.

  8. Dans le menu déroulant Instruction, choisissez les instructions que vous souhaitez fournir aux étiqueteurs travaillant sur cet ensemble de données.

    La liste déroulante inclut toutes les instructions associées à ce projet. Vous devez inclure des instructions dans la demande d'ajout d'étiquettes.

  9. Dans le menu déroulant étiqueteurs par élément de données, spécifiez le nombre d'étiqueteurs qui devront réviser chaque élément de l'ensemble de données.

    La valeur par défaut est d'un étiqueteur par élément, mais vous pouvez demander à ce que trois ou cinq étiqueteurs travaillent sur chaque élément.

  10. Cochez la case pour confirmer que vous comprenez comment l'étiquetage vous sera facturé.

  11. Cliquez sur Créer.

Ligne de commande

Définissez les variables d'environnement suivantes :
  1. La variable PROJECT_ID à votre ID de projet Google Cloud
  2. La variable DATASET_ID à l'ID de votre ensemble de données, issue de la réponse obtenue lorsque vous avez créé l'ensemble de données. L'ID apparaît à la fin du nom complet de l'ensemble de données :

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. La variable INSTRUCTION_RESOURCE_NAME au nom de votre ressource d'instruction.
  4. La variable ANNOTATION_SPEC_SET_RESOURCE_NAME sur le nom de votre ressource d'ensemble d'étiquettes.
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}]"
  },
}'

Des résultats semblables aux lignes suivantes devraient s'afficher : Vous pouvez obtenir l'état de la tâche à l'aide de l'ID d'opération. Obtenir l'état d'une opération en est un exemple.

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