Envía solicitudes de etiquetado de imágenes

El Servicio de etiquetado de datos de AI Platform admite seis tipos de tareas de etiquetado de imágenes:

  • Clasificación: Los etiquetadores asignan una o más etiquetas a cada imagen.
  • Cuadros de límite: Los etiquetadores eligen una etiqueta y, luego, dibujan uno o más cuadros de límite para aplicar la etiqueta a las partes de la imagen.
  • Tarea de cuadros de límite orientados: Es similar a las tareas de cuadros de límite, pero la diferencia es que los cuadros son ejes X alineados, mientras que los cuadros orientados pueden estar en cualquier dirección.
  • Polígono de límite: Es similar a los cuadros de límite; los etiquetadores eligen una etiqueta y dibujan polígonos cerrados para aplicar la etiqueta a las partes de la imagen.
  • Tareas de polilínea: Son similares a los cuadros de límite; los etiquetadores eligen una etiqueta y dibujan polilíneas para aplicar la etiqueta a las partes de la imagen. Una polilínea consiste en una lista de al menos dos puntos conectados de extremo a extremo por segmentos de línea.
  • Tareas de segmentación: Los etiquetadores generan máscaras para cada etiqueta. El resultado es una tabla de mapa de colores, en la que se asignan etiquetas a colores.

Tareas de clasificación de imágenes

IU web

  1. Abre la IU del Servicio de etiquetado de datos.

  2. Selecciona Conjuntos de datos en el panel de navegación izquierdo.

    En la página Conjuntos de datos, se muestra el estado de los conjuntos de datos creados anteriormente para el proyecto actual.

  3. Haz clic en el nombre del conjunto de datos que deseas enviar para el etiquetado.

    Los conjuntos de datos con el estado Importación completa están disponibles para enviarse. En la columna Tipo de datos, se muestra si el conjunto de datos incluye imágenes, videos o texto.

  4. En la página Detalle del conjunto de datos, haz clic en el botón Crear tarea de etiquetado en la barra de título.

  5. En la página Nueva tarea de etiquetado, ingresa un nombre y una descripción para el conjunto de datos anotado.

    El conjunto de datos anotado es la versión de este conjunto de datos después de que los etiquetadores manuales lo hayan etiquetado.

  6. En el menú desplegable Objetivo, selecciona el tipo de tarea de etiquetado que deseas realizar en este conjunto de datos.

    La lista desplegable incluye solo los objetivos disponibles para el tipo de datos de este conjunto de datos. Si no ves el objetivo que deseas, probablemente significa que seleccionaste un conjunto de datos con un tipo de datos diferente. Cierra la página Tarea de etiquetado nueva y selecciona un conjunto de datos diferente.

  7. En el menú desplegable Conjunto de etiquetas, elige el conjunto de etiquetas que quieres que los etiquetadores apliquen en los elementos de datos de este conjunto.

    La lista desplegable incluye todos los conjuntos de etiquetas asociados con este proyecto. Debes seleccionar un conjunto de etiquetas.

  8. En el menú desplegable Instrucción, elige las instrucciones que deseas proporcionar a los etiquetadores que trabajen con este conjunto de datos.

    La lista desplegable incluye todas las instructions asociadas con este proyecto. Debes incluir instrucciones en la solicitud de etiquetado.

  9. En el menú desplegable Etiquetadores por elemento de datos, especifica cuántos etiquetadores quieres que revisen cada elemento del conjunto de datos.

    El valor predeterminado es uno, pero puedes solicitar que tres o cinco etiquetadores etiqueten cada elemento.

  10. Haz clic en la casilla de verificación para confirmar que entiendes cómo se te cobrará por el etiquetado.

  11. Haz clic en Crear.

Línea de comandos

Configura las siguientes variables de entorno:
  1. La variable PROJECT_ID para el ID de tu proyecto de Google Cloud
  2. La variable DATASET_ID para el ID del conjunto de datos, a partir de la respuesta obtenida cuando creaste el conjunto de datos. El ID aparece al final del nombre completo del conjunto de datos:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME para el nombre de tu recurso de instrucción
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME para el nombre del recurso de conjunto de etiquetas
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}",
  },
}'

Deberías ver un resultado similar al siguiente. Puedes usar el ID de operación para obtener el estado de la tarea. Un ejemplo es obtener el estado de una operación.

{
  "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 que puedas ejecutar este ejemplo de código, debes instalar las bibliotecas cliente de 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 que puedas ejecutar este ejemplo de código, debes instalar las bibliotecas cliente de 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();
    }
  }
}

Cuadros de límite

IU web

  1. Abre la IU del Servicio de etiquetado de datos.

  2. Selecciona Conjuntos de datos en el panel de navegación izquierdo.

    En la página Conjuntos de datos, se muestra el estado de los conjuntos de datos creados anteriormente para el proyecto actual.

  3. Haz clic en el nombre del conjunto de datos que deseas enviar para el etiquetado.

    Los conjuntos de datos con el estado Importación completa están disponibles para enviarse. En la columna Tipo de datos, se muestra si el conjunto de datos incluye imágenes, videos o texto.

  4. En la página Detalle del conjunto de datos, haz clic en el botón Crear tarea de etiquetado en la barra de título.

  5. En la página Nueva tarea de etiquetado, ingresa un nombre y una descripción para el conjunto de datos anotado.

    El conjunto de datos anotado es la versión de este conjunto de datos después de que los etiquetadores manuales lo hayan etiquetado.

  6. En el menú desplegable Objetivo, selecciona el tipo de tarea de etiquetado que deseas realizar en este conjunto de datos.

    La lista desplegable incluye solo los objetivos disponibles para el tipo de datos de este conjunto de datos. Si no ves el objetivo que deseas, probablemente significa que seleccionaste un conjunto de datos con un tipo de datos diferente. Cierra la página Tarea de etiquetado nueva y selecciona un conjunto de datos diferente.

  7. En el menú desplegable Conjunto de etiquetas, elige el conjunto de etiquetas que quieres que los etiquetadores apliquen en los elementos de datos de este conjunto.

    La lista desplegable incluye todos los conjuntos de etiquetas asociados con este proyecto. Debes seleccionar un conjunto de etiquetas.

  8. En el menú desplegable Instrucción, elige las instrucciones que deseas proporcionar a los etiquetadores que trabajen con este conjunto de datos.

    La lista desplegable incluye todas las instructions asociadas con este proyecto. Debes incluir instrucciones en la solicitud de etiquetado.

  9. En el menú desplegable Etiquetadores por elemento de datos, especifica cuántos etiquetadores quieres que revisen cada elemento del conjunto de datos.

    El valor predeterminado es uno, pero puedes solicitar que tres o cinco etiquetadores etiqueten cada elemento.

  10. Haz clic en la casilla de verificación para confirmar que entiendes cómo se te cobrará por el etiquetado.

  11. Haz clic en Crear.

Línea de comandos

Configura las siguientes variables de entorno:
  1. La variable PROJECT_ID para el ID de tu proyecto de Google Cloud
  2. La variable DATASET_ID para el ID del conjunto de datos, a partir de la respuesta obtenida cuando creaste el conjunto de datos. El ID aparece al final del nombre completo del conjunto de datos:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME para el nombre de tu recurso de instrucción
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME para el nombre del recurso de conjunto de etiquetas
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}",
  },
}'

Deberías ver un resultado similar al siguiente. Puedes usar el ID de operación para obtener el estado de la tarea. Un ejemplo es obtener el estado de una operación.

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