Al termine dell'operazione di etichettatura, puoi esportare il set di dati annotato
al 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 ML di questa riga, che per impostazione predefinita è NON ASSEGNATA. ExportData
supporta anche un file jsonl in cui ogni riga rappresenta un esempio che include un elemento di 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
csv: ogni riga contiene informazioni su un riquadro di delimitazione, utilizzando coordinate x e y per rappresentare gli angoli di un riquadro. Più caselle per una singola immagine sono su righe separate. Il formato della linea è
UNASSIGNED, image_url, label, topleft_x, topleft_y, topright_x, topright_y, bottomright_x, bottomright_y, bottomleft_x, bottomleft_y
. topright_x, topright_y, bottomleft_x e le coordinate in basso a sinistra_y potrebbero essere stringhe vuote perché forniscono di informazioni ridondanti.UNASSIGNED,url_immagine,etichetta,0.1,0.1,,,0.3,0.3,,
json line: se non è impostata una coordinata in normalizedVertices, il campo è pari a 0 per impostazione predefinita. Questo vale anche per qualsiasi annotazione basata sulle 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,url_immagine,etichetta,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, ogni cane
e cat) viene mostrata nel campo warningColors.
{ "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
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,url_video,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
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,url_video,etichetta,id_istanza,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
csv: i quattro punti sono in alto a sinistra, in alto a destra, in basso a destra e in basso a sinistra. La 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
Segui questi passaggi per esportare i dati etichettati utilizzando 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 per il progetto attuale.
Fai clic sul nome del set di dati da esportare. Verrà visualizzata la pagina Dettagli set di dati.
Nella sezione Set di dati etichettati, fai clic su ESPORTA in Stato esportazione colonna.
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 file che preferisci.
Fai clic su ESPORTA.
La pagina Dettagli set di dati mostra uno stato in corso durante l'esportazione dei dati. Una volta completata, potrai trovare il file di esportazione del percorso di 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 si trova nella fine del nome completo del set di dati:projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
-
ANNOTATED_DATASET_ID
all'ID del tuo il nome della risorsa del set di dati annotato. Il nome della risorsa è 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 tranne per l'immagine
segmentazione, 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, curl
ha il seguente aspetto:
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" } }