Inviare richieste di etichettatura delle immagini

AI Platform Data Labeling Service supporta sei tipi di attività di etichettatura delle immagini:

  • Classificazione, in cui gli etichettatori assegnano una o più etichette a ogni immagine.
  • Riquadri di delimitazione, in cui gli etichettatori scelgono un'etichetta, poi disegnano uno o più riquadri di delimitazione per applicare l'etichetta alle parti dell'immagine.
  • Attività del riquadro di delimitazione orientato, simile alle attività dei riquadri di delimitazione in cui i riquadri di delimitazione sono allineati all'asse X, mentre il riquadro di delimitazione orientato può essere in qualsiasi direzione
  • Poligono di delimitazione, simile al riquadro di delimitazione, in cui gli etichettatori scelgono un'etichetta e disegnano poligoni chiusi per applicare l'etichetta alle parti dell'immagine.
  • Attività relative alla polilinea, come nel caso del riquadro di delimitazione, in cui gli etichettatori scelgono un'etichetta e tracciano polilinee per applicarla alle parti dell'immagine. Una polilinea è composta da un elenco di almeno due punti collegati end-to-end da segmenti di linea.
  • Attività di segmentazione, in cui gli etichettatori generano maschere per ogni etichetta. L'output è una tabella di mappatura dei colori, che mappa le etichette ai colori.

Attività di classificazione delle immagini

UI web

  1. Apri l'interfaccia utente di Data Labeling Service.

  2. Seleziona Set di dati nel menu di navigazione a sinistra.

    La pagina Set di dati mostra lo stato dei set di dati creati in precedenza per il progetto attuale.

  3. Fai clic sul nome del set di dati che vuoi inviare per l'etichettatura.

    Puoi inviare set di dati con stato Importazione completata. La colonna Tipo di dati mostra se il set di dati include immagini, video o testo.

  4. Nella pagina Dettagli set di dati, fai clic sul pulsante Crea attività di etichettatura nella barra del titolo.

  5. Nella pagina Nuova attività di etichettatura, inserisci un nome e una descrizione per il set di dati annotato.

    Il set di dati annotato è la versione di questo set di dati dopo che gli etichettatori umani lo hanno etichettato.

  6. Dal menu a discesa Obiettivo, seleziona il tipo di attività di etichettatura che vuoi eseguire su questo set di dati.

    L'elenco a discesa include solo gli obiettivi disponibili per il tipo di dati in questo set di dati. Se non vedi l'obiettivo che cerchi, è probabile che tu abbia selezionato un set di dati con un tipo diverso di dati al suo interno. Chiudi la pagina Nuova attività di etichettatura e seleziona un set di dati diverso.

  7. Nel menu a discesa Set di etichette, seleziona il set di etichette che desideri applicare agli etichettatori agli elementi di dati di questo set.

    L'elenco a discesa include tutti i set di etichette associati a questo progetto. Devi selezionare un set di etichette.

  8. Dal menu a discesa Istruzioni, scegli le istruzioni che vuoi fornire agli etichettatori che lavorano con questo set di dati.

    L'elenco a discesa include tutte le instructions associate a questo progetto. Devi includere istruzioni nella richiesta di etichettatura.

  9. Nel menu a discesa etichettatori per elemento di dati, specifica quanti etichettatori devono poter esaminare ogni elemento nel set di dati.

    Il valore predefinito è uno, ma puoi richiedere a tre o cinque etichettatori di etichettare ogni elemento.

  10. Fai clic sulla casella di controllo per confermare di aver compreso le modalità di addebito dell'etichettatura.

  11. Fai clic su Crea.

Riga di comando

Imposta le seguenti variabili di ambiente:
  1. PROJECT_ID all'ID progetto Google Cloud.
  2. DATASET_ID all'ID del tuo set di dati, dalla risposta al momento della creazione del set di dati. L'ID si trova alla fine del nome completo del set di dati:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME al nome della tua risorsa di istruzione.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME al nome della risorsa del set di etichette.
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}",
  },
}'

Dovresti vedere un output simile al seguente. Puoi utilizzare l'ID operazione per conoscere lo stato dell'attività. Recupero dello stato di un'operazione è un esempio.

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

Prima di poter eseguire questo esempio di codice, devi installare le librerie client di 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

Prima di poter eseguire questo esempio di codice, devi installare le librerie client 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();
    }
  }
}

Riquadri di delimitazione

UI web

  1. Apri l'interfaccia utente di Data Labeling Service.

  2. Seleziona Set di dati nel menu di navigazione a sinistra.

    La pagina Set di dati mostra lo stato dei set di dati creati in precedenza per il progetto attuale.

  3. Fai clic sul nome del set di dati che vuoi inviare per l'etichettatura.

    Puoi inviare set di dati con stato Importazione completata. La colonna Tipo di dati mostra se il set di dati include immagini, video o testo.

  4. Nella pagina Dettagli set di dati, fai clic sul pulsante Crea attività di etichettatura nella barra del titolo.

  5. Nella pagina Nuova attività di etichettatura, inserisci un nome e una descrizione per il set di dati annotato.

    Il set di dati annotato è la versione di questo set di dati dopo che gli etichettatori umani lo hanno etichettato.

  6. Dal menu a discesa Obiettivo, seleziona il tipo di attività di etichettatura che vuoi eseguire su questo set di dati.

    L'elenco a discesa include solo gli obiettivi disponibili per il tipo di dati in questo set di dati. Se non vedi l'obiettivo che cerchi, è probabile che tu abbia selezionato un set di dati con un tipo diverso di dati al suo interno. Chiudi la pagina Nuova attività di etichettatura e seleziona un set di dati diverso.

  7. Nel menu a discesa Set di etichette, seleziona il set di etichette che desideri applicare agli etichettatori agli elementi di dati di questo set.

    L'elenco a discesa include tutti i set di etichette associati a questo progetto. Devi selezionare un set di etichette.

  8. Dal menu a discesa Istruzioni, scegli le istruzioni che vuoi fornire agli etichettatori che lavorano con questo set di dati.

    L'elenco a discesa include tutte le instructions associate a questo progetto. Devi includere istruzioni nella richiesta di etichettatura.

  9. Nel menu a discesa etichettatori per elemento di dati, specifica quanti etichettatori devono poter esaminare ogni elemento nel set di dati.

    Il valore predefinito è uno, ma puoi richiedere a tre o cinque etichettatori di etichettare ogni elemento.

  10. Fai clic sulla casella di controllo per confermare di aver compreso le modalità di addebito dell'etichettatura.

  11. Fai clic su Crea.

Riga di comando

Imposta le seguenti variabili di ambiente:
  1. PROJECT_ID all'ID progetto Google Cloud.
  2. DATASET_ID all'ID del tuo set di dati, dalla risposta al momento della creazione del set di dati. L'ID si trova alla fine del nome completo del set di dati:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME al nome della tua risorsa di istruzione.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME al nome della risorsa del set di etichette.
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}",
  },
}'

Dovresti vedere un output simile al seguente. Puoi utilizzare l'ID operazione per conoscere lo stato dell'attività. Recupero dello stato di un'operazione è un esempio.

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