Al termine dell'operazione di etichettatura, puoi esportare il set di dati annotato
nel tuo bucket Google Cloud Storage chiamando ExportData
.
ExportData
supporta il ritorno di un file .csv contenente una riga per ogni annotazione o elemento di dati. Il primo campo indica la categoria di utilizzo in ml di questa riga, che per impostazione predefinita è UNASSIGNED. ExportData
supporta anche un file JSONL in cui ogni riga rappresenta un esempio che include un elemento dati e tutte le annotazioni. Di seguito sono riportati alcuni esempi per ciascun tipo.
Classificazione delle immagini
riga csv:
UNASSIGNED,image_url,label_1,label_2,...
riga json:
{ "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "imagePayload":{ "mimeType":"IMAGE_PNG", "imageUri":"gs://sample_bucket/image.png" }, "annotations":[ { "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationValue":{ "imageClassificationAnnotation":{ "annotationSpec":{ "displayName":"tulip", } } } } ] }
Riquadro di delimitazione dell'immagine
riga csv: ogni riga contiene informazioni su un riquadro di delimitazione, utilizzando le coordinate x,y per rappresentare ogni angolo del riquadro. Più caselle per una singola immagine sono su righe separate. Il formato della riga è
UNASSIGNED, image_url, label, topleft_x, topleft_y, topright_x, topright_y, bottomright_x, bottomright_y, bottomleft_x, bottomleft_y
. Le coordinate topright_x, topright_y, bottomleft_x e bottomleft_y potrebbero essere stringhe vuote, perché forniscono informazioni ridondanti.UNASSIGNED,image_url,label,0.1,0.1,,,0.3,0.3,,
riga JSON: se una coordinata in normalizedVertices non è impostata, il campo è 0 per impostazione predefinita. Questo vale anche per le annotazioni basate su coordinate.
{ "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "imagePayload":{ "mimeType":"IMAGE_PNG", "imageUri":"gs://sample_bucket/image.png" }, "annotations":[ { "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationValue":{ "image_bounding_poly_annotation": { "annotationSpec": { "displayName": "tulip" }, "normalizedBoundingPoly": { "normalizedVertices": [ { "x": 0.1, "y": 0.2 }, { "x": 0.9, "y": 0.9 } ] } } } } ] }
Poligono di delimitazione dell'immagine, riquadro di delimitazione orientato e polilinea
riga csv: ogni punto del poligono/polilinea chiuso è rappresentato dal punto x,y, separato da due colonne csv vuote. L'ultima coppia si ricollega alla prima per il poligono, mentre non esiste un ciclo chiuso per il polilinea. Ogni riga rappresenta un poligono/polilinea.
UNASSIGNED,image_url,label,0.1,0.1,,,0.3,0.3,,,0.6,0.6,,...
riga json:
{ "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "imagePayload":{ "mimeType":"IMAGE_PNG", "imageUri":"gs://sample_bucket/image.png" }, "annotations":[ { "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationValue":{ "image_bounding_poly_annotation": { "annotationSpec": { "displayName": "tulip" }, "normalizedBoundingPoly": { "normalizedVertices": [ { "x": 0.1, "y": 0.1 }, { "x": 0.1, "y": 0.2 }, { "x": 0.2, "y": 0.3 } ] } } } } ] }
Segmentazione dell'immagine
Per la segmentazione delle immagini, viene fornito solo l'output jsonl.
- riga json: il campo imageBytes in imageSegmentationAnnotation rappresenta la maschera di segmentazione per l'immagine. Il colore di ogni etichetta (ovvero di ogni cane
e gatto) viene mostrato nel campo annotationColors.
{ "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "imagePayload":{ "mimeType":"IMAGE_PNG", "imageUri":"gs://sample_bucket/image.png" }, "annotations":[ { "name":"projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationValue":{ "imageSegmentationAnnotation": { "annotationColors": [ { "key": "rgb(0,0,255)", "value": { "display_name": "dog" } }, { "key": "rgb(0,255,0)", "value": { "display_name": "cat" } } ], "mimeType": "IMAGE_JPEG", "imageBytes": "/9j/4AAQSkZJRgABAQAAAQABAAD/2" } } } ] }
Classificazione video
riga csv:
UNASSIGNED,video_url,label,segment_start_time,segment_end_time
riga json:
{ "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "videoPayload": { "mimeType": "VIDEO_MP4", "resolution": { width: 720, height: 360 } "frameRate": 24 }, "annotations": [ { "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationSource": 3, "annotationValue": { "videoClassificationAnnotation": { "timeSegment": { "startTimeOffset": { "seconds": 10 }, "endTimeOffset": { "seconds": 20 } }, "annotationSpec": { "displayName": "dog" } } } } ] }
Rilevamento di oggetti video
riga csv: i quattro punti sono in alto a sinistra, in alto a destra, in basso a destra e in basso a sinistra. Il secondo e il quarto punto sono facoltativi. Ogni punto è rappresentato da x,y. Ogni riga conterrà un riquadro di delimitazione.
UNASSIGNED,video_url,label,timestamp,0.1,0.1,,,0.3,0.3,,
riga json:
{ "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "videoPayload": { "mimeType": "VIDEO_MP4", "resolution": { width: 720, height: 360 } "frameRate": 24 }, "annotations": [ { "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationSource": 3, "annotationValue": { "videoObjectTrackingAnnotation": { "annotationSpec": { "displayName": "tulip" }, "timeSegment": { "startTimeOffset": { "seconds": 10 }, "endTimeOffset": { "seconds": 10 } }, "objectTrackingFrames": [ { "normalizedBoundingPoly": { "normalizedVertices": [ { "x": 0.2, "y": 0.3 }, { "x": 0.9, "y": 0.5 } ] }, }, { "normalizedBoundingPoly": { "normalizedVertices": [ { "x": 0.3, "y": 0.3 }, { "x": 0.5, "y": 0.7 } ] }, } ] } } }]}
Rilevamento oggetti video
riga csv: i quattro punti sono in alto a sinistra, in alto a destra, in basso a destra e in basso a sinistra. Il secondo e il quarto punto sono facoltativi. Ogni punto è rappresentato da x,y. Ogni riga conterrà un riquadro di delimitazione. Ogni oggetto nel video è rappresentato da un instance_id univoco.
UNASSIGNED,video_url,label,instance_id,timestamp,0.1,0.1,,,0.3,0.3,,
riga json:
{ "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "videoPayload": { "mimeType": "VIDEO_MP4", "resolution": { width: 720, height: 360 } "frameRate": 24 }, "annotations": [ { "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationSource": 3, "annotationValue": { "videoObjectTrackingAnnotation": { "annotationSpec": { "displayName": "tulip" }, "timeSegment": { "startTimeOffset": { "seconds": 10 }, "endTimeOffset": { "seconds": 20 } }, "objectTrackingFrames": [ { "normalizedBoundingPoly": { "normalizedVertices": [ { "x": 0.2, "y": 0.3 }, { "x": 0.9, "y": 0.5 } ] }, "timeOffset": { "nanos": 1000000 } }, { "normalizedBoundingPoly": { "normalizedVertices": [ { "x": 0.3, "y": 0.3 }, { "x": 0.5, "y": 0.7 } ] }, "timeOffset": { "nanos": 84000000 } } ] } } }]}
Evento video
riga csv: i quattro punti sono in alto a sinistra, in alto a destra, in basso a destra e in basso a sinistra. Il secondo e il quarto punto sono facoltativi. Ogni punto è rappresentato da x,y. Ogni riga conterrà un riquadro di delimitazione. Ogni oggetto nel video è rappresentato da un instance_id univoco.
UNASSIGNED,video_url,label,segment_start_time,segment_end_time
riga json:
{ "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "videoPayload": { "mimeType": "VIDEO_MP4", "resolution": { width: 720, height: 360 } "frameRate": 24 }, "annotations": [ { "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/annotation_id", "annotationValue": { "videoEventAnnotation": { "annotationSpec": { "displayName": "Callie" }, "timeSegment": { "startTimeOffset": { "seconds": 123 }, "endTimeOffset": { "seconds": 150 } } } } } ] } } }]}
Classificazione del testo
riga csv:
UNASSIGNED,text_url,label_l
riga json:
{ "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "textPayload": { "textContent": "dummy_text_content", "textUri": "gs://test_bucket/file.txt", "wordCount": 1 } "annotations": [ { "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/fake_annotation_id", "annotationValue": { "textClassificationAnnotation": { "annotationSpec": { "displayName": "news" } } } } ], }
Estrazione delle entità di testo
Per l'estrazione delle entità di testo, viene fornito solo l'output jsonl.
- riga json:
{ "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id", "textPayload": { "textContent": "dummy_text_content", "textUri": "gs://test_bucket/file.txt", "wordCount": 1 } "annotations": [ { "name": "projects/project_id/datasets/dataset_id/annotatedDatasets/annotated_dataset_id/examples/example_id/annotations/fake_annotation_id", "annotationValue": { "textEntityExtractionAnnotation": { "annotationSpec": { "displayName": "equations" }, "textSegment": { "startOffset": 10, "endOffset": 20 } } } } ], }
ExportData è un'operazione a lunga esecuzione. L'API restituirà un ID operazione. Puoi utilizzare l'ID operazione per chiamare GetOperation e recuperare lo stato in un secondo momento.
UI web
Per esportare i dati etichettati, segui questi passaggi utilizzando l'UI di Data Labeling Service.
Apri la UI del servizio di etichettatura dei dati nella console Google Cloud.
La pagina Set di dati mostra lo stato dei set di dati creati in precedenza per il progetto corrente.
Fai clic sul nome del set di dati che vuoi esportare. Viene visualizzata la pagina Dettagli set di dati.
Nella sezione Set di dati etichettati, fai clic su ESPORTA nella colonna Stato esportazione.
Nella finestra di dialogo Esporta set di dati etichettato, inserisci il percorso Cloud Storage da utilizzare per il file di output e seleziona il formato del file che preferisci.
Fai clic su ESPORTA.
La pagina Dettagli set di dati mostra uno stato in corso durante l'esportazione dei dati. Al termine, puoi trovare il file di esportazione nel percorso Cloud Storage specificato.
Riga di comando
Imposta le seguenti variabili di ambiente:PROJECT_ID
al tuo ID progetto Google Cloud.-
DATASET_ID
alla variabile ID del set di dati, dalla risposta al momento della creazione del set di dati. L'ID viene visualizzato alla fine del nome completo del set di dati:projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
-
ANNOTATED_DATASET_ID
alla risorsa del set di dati annotato. Il nome della risorsa ha il seguente formato:projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/annotatedDatasets/ANNOTATED_DATASET_ID
STORAGE_URI
alla variabile URI del bucket Cloud Storage in cui vuoi archiviare i risultati.
Per tutte le richieste di annotazione, ad eccezione della segmentazione delle immagini, la richiesta curl
è simile alla seguente:
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}:exportData \ -d '{ "annotatedDataset": "${ANNOTATED_DATASET_ID}", "outputConfig": { "gcsDestination": { "output_uri": "${STORAGE_URI}", "mimeType": "text/csv" } } }'
Per esportare i dati di segmentazione delle immagini, la richiesta curl
è simile alla seguente:
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}:exportData \ -d '{ "annotatedDataset": "${ANNOTATED_DATASET_ID}", "outputConfig": { "gcsFolderDestination": { "output_folder_uri": "${STORAGE_URI}" } } }'
Dovresti vedere un output simile al seguente:
{ "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064", "metadata": { "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.ExportDataOperationResponse", "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c" } }