Anfragen zur Labelerstellung für Bilder senden

Der AI Platform Data Labeling Service unterstützt sechs Aufgabentypen zur Erstellung von Labels für Bilder:

  • Klassifizierung, wobei Labelersteller jedem Bild ein oder mehrere Labels zuweisen.
  • Begrenzungsrahmen, bei denen Labelersteller ein Label auswählen und dann einen oder mehrere Begrenzungsrahmen zeichnen, um das Label auf die Teile des Bildes anzuwenden.
  • Ausgerichteter Begrenzungsrahmen, wie bei Aufgaben für Begrenzungsrahmen, wobei die Begrenzungsrahmen an der x-Achse ausgerichtet werden und der ausgerichtete Begrenzungsrahmen in eine beliebige Richtung weisen kann.
  • Begrenzungspolygone, die ähnlich wie Begrenzungsrahmen sind, wobei Labelersteller ein Label auswählen und geschlossene Polygone zeichnen, um das Label auf die Teile des Bildes anzuwenden.
  • Polylinienaufgaben, ähnlich wie Begrenzungsrahmen, wobei Labelersteller ein Label auswählen und Polylinien zeichnen, um das Label auf den jeweiligen Abschnitt bzw. die jeweiligen Abschnitte des Bildes anzuwenden. Eine Polylinie besteht aus einer Liste von mindestens zwei Punkten, die durchgängig durch Liniensegmente verbunden sind.
  • Segmentierungsaufgaben, bei denen Labelersteller Masken für jedes Label generieren. Als Ausgabe erhalten Sie eine Farbzuordnungstabelle, die ein Label einer Farbe zuordnet.

Bildklassifizierungsaufgaben

Web-UI

  1. Rufen Sie die Data Labeling Service-UI auf.

  2. Wählen Sie im linken Navigationsbereich Datasets aus.

    Auf der Seite Datasets wird der Status zuvor erstellter Datasets für das aktuelle Projekt angezeigt.

  3. Klicken Sie auf den Namen des Datasets, das Sie für die Labelerstellung senden möchten.

    Es können alle Datasets mit dem Status Import complete (Import abgeschlossen) gesendet werden. In der Spalte Datentyp wird angezeigt, ob das Dataset Bilder, Videos oder Text enthält.

  4. Klicken Sie in der Titelleiste der Seite Dataset-Detail auf die Schaltfläche Labeling-Aufgabe erstellen.

  5. Geben Sie auf der Seite New labeling task (Neue Labeling-Aufgabe) einen Namen und eine Beschreibung für das annotierte Dataset ein.

    Das annotierte Dataset ist die Version des Datasets, nachdem menschliche Labelersteller es mit Labels versehen haben.

  6. Wählen Sie in der Drop-down-Liste Objective (Ziel) den gewünschten Typ der Aufgabe zur Labelerstellung aus.

    Die Drop-down-Liste enthält nur die Ziele, die für den Datentyp in diesem Dataset verfügbar sind. Wenn das gewünschte Ziel nicht angezeigt wird, liegt dies wahrscheinlich daran, dass Sie ein Dataset mit Daten eines anderen Typs ausgewählt haben. Schließen Sie in diesem Fall die Seite Neue Labeling-Aufgabe und wählen Sie ein anderes Dataset aus.

  7. Wählen Sie in der Drop-down-Liste Labelsatz den Labelsatz aus, der von den Labelerstellern auf die Datenelemente in diesem Satz angewendet werden soll.

    Die Drop-down-Liste enthält alle Labelsätze, die diesem Projekt zugeordnet sind. Sie müssen einen Labelsatz auswählen.

  8. Wählen Sie in der Drop-down-Liste Instruction (Anleitung) die Anleitung aus, die Sie den Labelerstellern für dieses Dataset zur Verfügung stellen möchten.

    Die Drop-down-Liste enthält alle instructions, die diesem Projekt zugeordnet sind. In der Anfrage zur Labelerstellung muss immer eine Anleitung enthalten sein.

  9. Geben Sie in der Drop-down-Liste Labelersteller pro Datenelement an, wie viele Labelersteller die einzelnen Elemente im Dataset jeweils mit Labels versehen sollen.

    Die Standardeinstellung ist ein Labelersteller. Sie können aber auch drei oder fünf Labelersteller für jedes Element anfordern.

  10. Klicken Sie auf das Kästchen, um zu bestätigen, dass Sie nachvollziehen können, wie Ihnen die Labelerstellung in Rechnung gestellt wird.

  11. Klicken Sie auf Create (Erstellen).

Befehlszeile

Legen Sie die folgenden Umgebungsvariablen fest:
  1. PROJECT_ID für Ihre Google Cloud-Projekt-ID.
  2. DATASET_ID für die ID Ihres Datasets aus der Antwort, die Sie beim Erstellen des Datasets erhalten haben. Die ID wird am Ende des vollständigen Dataset-Namens angezeigt:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME für den Namen Ihrer Anleitungsressource.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME für den Namen Ihrer Labelsatz-Ressource.
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}",
  },
}'

Die Ausgabe sieht in etwa so aus: Sie können den Status der Aufgabe anhand der Vorgangs-ID abrufen. Hier finden Sie ein Beispiel dafür, wie Sie den Status eines Vorgangs abrufen.

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

Für dieses Codebeispiel müssen die Python-Clientbibliotheken installiert sein.

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

Für dieses Codebeispiel müssen die Java-Clientbibliotheken installiert sein.
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();
    }
  }
}

Begrenzungsrahmen

Web-UI

  1. Rufen Sie die Data Labeling Service-UI auf.

  2. Wählen Sie im linken Navigationsbereich Datasets aus.

    Auf der Seite Datasets wird der Status zuvor erstellter Datasets für das aktuelle Projekt angezeigt.

  3. Klicken Sie auf den Namen des Datasets, das Sie für die Labelerstellung senden möchten.

    Es können alle Datasets mit dem Status Import complete (Import abgeschlossen) gesendet werden. In der Spalte Datentyp wird angezeigt, ob das Dataset Bilder, Videos oder Text enthält.

  4. Klicken Sie in der Titelleiste der Seite Dataset-Detail auf die Schaltfläche Labeling-Aufgabe erstellen.

  5. Geben Sie auf der Seite New labeling task (Neue Labeling-Aufgabe) einen Namen und eine Beschreibung für das annotierte Dataset ein.

    Das annotierte Dataset ist die Version des Datasets, nachdem menschliche Labelersteller es mit Labels versehen haben.

  6. Wählen Sie in der Drop-down-Liste Objective (Ziel) den gewünschten Typ der Aufgabe zur Labelerstellung aus.

    Die Drop-down-Liste enthält nur die Ziele, die für den Datentyp in diesem Dataset verfügbar sind. Wenn das gewünschte Ziel nicht angezeigt wird, liegt dies wahrscheinlich daran, dass Sie ein Dataset mit Daten eines anderen Typs ausgewählt haben. Schließen Sie in diesem Fall die Seite Neue Labeling-Aufgabe und wählen Sie ein anderes Dataset aus.

  7. Wählen Sie in der Drop-down-Liste Labelsatz den Labelsatz aus, der von den Labelerstellern auf die Datenelemente in diesem Satz angewendet werden soll.

    Die Drop-down-Liste enthält alle Labelsätze, die diesem Projekt zugeordnet sind. Sie müssen einen Labelsatz auswählen.

  8. Wählen Sie in der Drop-down-Liste Instruction (Anleitung) die Anleitung aus, die Sie den Labelerstellern für dieses Dataset zur Verfügung stellen möchten.

    Die Drop-down-Liste enthält alle instructions, die diesem Projekt zugeordnet sind. In der Anfrage zur Labelerstellung muss immer eine Anleitung enthalten sein.

  9. Geben Sie in der Drop-down-Liste Labelersteller pro Datenelement an, wie viele Labelersteller die einzelnen Elemente im Dataset jeweils mit Labels versehen sollen.

    Die Standardeinstellung ist ein Labelersteller. Sie können aber auch drei oder fünf Labelersteller für jedes Element anfordern.

  10. Klicken Sie auf das Kästchen, um zu bestätigen, dass Sie nachvollziehen können, wie Ihnen die Labelerstellung in Rechnung gestellt wird.

  11. Klicken Sie auf Create (Erstellen).

Befehlszeile

Legen Sie die folgenden Umgebungsvariablen fest:
  1. PROJECT_ID für Ihre Google Cloud-Projekt-ID.
  2. DATASET_ID für die ID Ihres Datasets aus der Antwort, die Sie beim Erstellen des Datasets erhalten haben. Die ID wird am Ende des vollständigen Dataset-Namens angezeigt:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME für den Namen Ihrer Anleitungsressource.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME für den Namen Ihrer Labelsatz-Ressource.
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}",
  },
}'

Die Ausgabe sieht in etwa so aus: Sie können den Status der Aufgabe anhand der Vorgangs-ID abrufen. Hier finden Sie ein Beispiel dafür, wie Sie den Status eines Vorgangs abrufen.

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