ラベル付け作業が完了したら、ExportData
を呼び出してアノテーション付きデータセットを Google Cloud Storage バケットにエクスポートできます。
ExportData
は、それぞれの行が各アノテーションまたは各データ項目に対応した .csv ファイルを返します。最初のフィールドは、この行の ml usage カテゴリを示します。デフォルトは UNASSIGNED です。ExportData
は、各行がデータ項目とすべてのアノテーションを含む例を表す jsonl ファイルもサポートしています。各タイプの例を以下に示します。
画像分類
csv 行:
UNASSIGNED,image_url,label_1,label_2,...
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", } } } } ] }
画像境界ボックス
csv line: 各行には 1 つの境界ボックスに関する情報が含まれ、x、y 座標を使用して各ボックスの角を表します。1 つの画像の複数のボックスが別々の行に表示されます。行の形式は
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、bottomleft_y の座標は、冗長な情報を提供するため、空の文字列になる可能性があります。UNASSIGNED,image_url,label,0.1,0.1,,,0.3,0.3,,
json 行: normalizedVertices の座標が設定されていない場合、そのフィールドはデフォルトで 0 となります。これは、座標ベースのアノテーションにも適用されます。
{ "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 } ] } } } } ] }
画像境界ポリゴン、有向境界ボックス、ポリライン
csv 行: 閉じたポリゴンとポリラインの各点は、2 つの空の csv 列で区切られた x、y 点で表されます。ポリゴンでは最後のペアは最初のペアに接続しますが、ポリラインでは閉じたサイクルは形成されません。各行は 1 つのポリゴン/ポリラインを表します。
UNASSIGNED,image_url,label,0.1,0.1,,,0.3,0.3,,,0.6,0.6,,...
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 } ] } } } } ] }
画像セグメンテーション
画像セグメンテーションでは、出力は jsonl のみです。
- json 行: imageSegmentationAnnotation の imageBytes フィールドは、その画像のセグメンテーション マスクを表します。各ラベルの色(それぞれの犬、猫)は 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" } } } ] }
動画分類
csv 行:
UNASSIGNED,video_url,label,segment_start_time,segment_end_time
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" } } } } ] }
動画オブジェクト検出
csv 行: 4 つの点は左上、右上、右下、左下の順に並んでいます。 2 番目と 4 番目の点は任意です。各点は x,y のペアで表されます。各行は 1 つの境界ボックスに対応します。
UNASSIGNED,video_url,label,timestamp,0.1,0.1,,,0.3,0.3,,
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 } ] }, } ] } } }]}
動画オブジェクト トラッキング
csv 行: 4 つの点は左上、右上、右下、左下の順に並んでいます。 2 番目と 4 番目の点は任意です。各点は x,y のペアで表されます。各行は 1 つの境界ボックスに対応します。動画内の各オブジェクトは一意の instance_id で表されます。
UNASSIGNED,video_url,label,instance_id,timestamp,0.1,0.1,,,0.3,0.3,,
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 } } ] } } }]}
動画イベント
csv 行: 4 つの点は左上、右上、右下、左下の順に並んでいます。2 番目と 4 番目の点は任意です。各点は x,y のペアで表されます。各行は 1 つの境界ボックスに対応します。動画内の各オブジェクトは一意の instance_id で表されます。
UNASSIGNED,video_url,label,segment_start_time,segment_end_time
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 } } } } } ] } } }]}
テキスト分類
csv 行:
UNASSIGNED,text_url,label_l
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" } } } } ], }
テキスト エンティティの抽出
テキスト エンティティ抽出の場合、jsonl の出力のみが提供されます。
- 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 は長時間実行オペレーションです。レスポンスでオペレーション ID が返されます。以降は、このオペレーション ID を指定して GetOperation を呼び出すことで、オペレーションのステータスを取得できます。
ウェブ UI
Data Labeling Service UI でラベル付きデータをエクスポートする手順は次のとおりです。
Google Cloud Console で Data Labeling Service UI を開きます。
[データセット] ページに、現在のプロジェクトでこれまでに作成されたデータセットのステータスが表示されます。
エクスポートするデータセットの名前をクリックします。[データセットの詳細] ページが表示されます。
[ラベル付きのデータセット] セクションの [エクスポート ステータス] 列で [エクスポート] をクリックします。
[ラベル付きデータセットのエクスポート] ダイアログで、出力ファイルに使用する Cloud Storage のパスを入力し、必要なファイル形式を選択します。
[エクスポート] をクリックします。
[データセットの詳細] ページに、エクスポートの進行状況が表示されます。エクスポートが完了したら、指定した Cloud Storage パスでエクスポート ファイルを検索します。
コマンドライン
次の環境変数を設定します。- Google Cloud プロジェクト ID を示す
PROJECT_ID
変数。 -
データセットの ID を示す
DATASET_ID
変数。データセットの ID はデータセットの作成時にレスポンスで返されます。この ID は完全なデータセット名の一番最後の部分です。projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
-
アノテーション付きデータセット リソース名の ID を示す
ANNOTATED_DATASET_ID
変数。リソース名の形式は次のとおりです。projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/annotatedDatasets/ANNOTATED_DATASET_ID
- 結果を格納する Cloud Storage バケットの URI を示す
STORAGE_URI
変数。
アノテーション結果をリクエストする curl
コマンドは、画像セグメンテーションの場合を除き、次のようになります。
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" } } }'
画像セグメンテーション データをエクスポートする場合、curl
リクエストは次のようになります。
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}" } } }'
出力は次のようになります。
{ "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" } }