Export DICOM annotations

How to export DICOM data and sample export formats.

Open this Colab for an interactive tutorial on exporting annotations.

📘

Deprecating Export V1

Starting in April 2024, we will begin sunsetting Export V1 for customers on a rolling basis. For more details, see this guide.

Export JSON annotations

# Set the export params to include/exclude certain fields. Make sure each of these fields are correctly grabbed 
export_params= {
  "attachments": True,
  "metadata_fields": True,
  "data_row_details": True,
  "project_details": True,
  "label_details": True,
  "performance_details": True
}

# You can set the range for last_activity_at and label_created_at. 
# For context, last_activity_at captures the creation and modification of labels, metadata, status, comments and reviews.
# Note: This is an AND logic between the filters, so usually using one filter is sufficient.

filters= {
  "last_activity_at": ["2000-01-01 00:00:00", "2050-01-01 00:00:00"],
  "workflow_status": "Done"
}

export_task = project.export_v2(params=export_params, filters=filters)
export_task.wait_till_done()

if export_task.errors:
  print(export_task.errors)

export_json = export_task.result
print("results: ", export_json)
# Set the export params to include/exclude certain fields. 
export_params= {
  "attachments": True,
  "metadata_fields": True,
  "data_row_details": True,
  "project_details": True,
  "label_details": True,
  "performance_details": True,
  "interpolated_frames": True
}

# Note: Filters follow AND logic, so typically using one filter is sufficient.
filters= {
  "last_activity_at": ["2000-01-01 00:00:00", "2050-01-01 00:00:00"],
  "workflow_status": "<wkf-status>"
}

client.enable_experimental = True

export_task = project.export(params=export_params, filters=filters)
export_task.wait_till_done()


# Return JSON output strings from export task results/errors, one by one:

# Callback used for JSON Converter
def json_stream_handler(output: lb.JsonConverterOutput):
  print(output.json_str)


if export_task.has_errors():
  export_task.get_stream(
  
  converter=lb.JsonConverter(),
  stream_type=lb.StreamType.ERRORS
  ).start(stream_handler=lambda error: print(error))

if export_task.has_result():
  export_json = export_task.get_stream(
    converter=lb.JsonConverter(),
    stream_type=lb.StreamType.RESULT
  ).start(stream_handler=json_stream_handler)

print("file size: ", export_task.get_total_file_size(stream_type=lb.StreamType.RESULT))
print("line count: ", export_task.get_total_lines(stream_type=lb.StreamType.RESULT))
     

Annotation export formats

Polyline

{
  "feature_id": "clftr46h2002014wq1lvtntzi",
  "feature_schema_id": "clftr3ueu061407xe3eam5gfh",
  "name": "line_dicom",
  "value": "line_dicom",
  "annotation_kind": "DICOMPolyline",
  "classifications": [],
  "line": [
    {
      "x": 10.0,
      "y": 10.0
    },
    {
      "x": 200.0,
      "y": 10.0
    },
    {
      "x": 300.0,
      "y": 300.0
    }
  ]
}

Mask

{
  "feature_id": "clftr46h2001z14wqod253zyk",
  "feature_schema_id": "clftr3ueu061207xeeezscu35",
  "name": "segmentation_mask_dicom",
  "value": "segmentation_mask_dicom",
  "annotation_kind": "DICOMSegmentationMask",
  "classifications": [],
  "mask": {
    "url": "https://api.labelbox.com/api/v1/projects/clftr3und00cd07tzalqk2z8b/annotations/clftr46h2001z14wqod253zyk/index/1/mask"
  },
  "composite_mask": {
    "url": "https://api.labelbox.com/api/v1/tasks/cluu2f9wn02m907wc9n9thld2/masks/clftr45oa001x14wqj2jqd42l/index/1",
    "color_rgb": [
      255,
      255,
      255
    ]
  }
}

Sample project export

{
  "data_row": {
    "id": "clftqkks0004g075we24j7za1",
    "global_key": "sample-dicom-1.dcm",
    "row_data": "https://storage.googleapis.com/labelbox-datasets/dicom-sample-data/sample-dicom-1.dcm",
    "details": {
      "dataset_id": "clftqkjaz1f1g07y3519udly1",
      "dataset_name": "dicom_demo_dataset",
      "created_at": "2023-03-29T13:42:10.000+00:00",
      "updated_at": "2023-03-29T13:42:10.000+00:00",
      "last_activity_at": "2023-03-29T13:57:25.000+00:00",
      "created_by": "[email protected]"
    }
  },
  "media_attributes": {
    "mime_type": "application/dicom"
  },
  "attachments": [],
  "metadata_fields": [],
  "projects": {
    "clftr3und00cd07tzalqk2z8b": {
      "name": "dicom_project_demo",
      "labels": [
        {
          "label_kind": "DICOM",
          "version": "1.0.0",
          "id": "clftr46hg002114wq5dfz8nj4",
          "label_details": {
            "created_at": "2023-03-29T13:57:25.000+00:00",
            "updated_at": "2023-03-29T13:57:25.000+00:00",
            "created_by": "[email protected]",
            "content_last_updated_at": "2023-03-29T13:57:24.947+00:00",
            "reviews": []
          },
          "performance_details": {
            "seconds_to_create": 0,
            "seconds_to_review": 0,
            "skipped": false
          },
          "annotations": {
            "groups": {
              "Axial": {
                "name": "Axial",
                "classifications": [],
                "frames": {
                  "1": {
                    "objects": {
                      "clftr46h2001z14wqod253zyk": {
                        "feature_id": "clftr46h2001z14wqod253zyk",
                        "feature_schema_id": "clftr3ueu061207xeeezscu35",
                        "name": "segmentation_mask_dicom",
                        "value": "segmentation_mask_dicom",
                        "annotation_kind": "DICOMSegmentationMask",
                        "classifications": [],
                        "mask": {
                          "url": "https://api.labelbox.com/api/v1/projects/clftr3und00cd07tzalqk2z8b/annotations/clftr46h2001z14wqod253zyk/index/1/mask"
                        },
                        "composite_mask": {
                          "url": "https://api.labelbox.com/api/v1/tasks/cluu2f9wn02m907wc9n9thld2/masks/clftr45oa001x14wqj2jqd42l/index/1",
                          "color_rgb": [
                            255,
                            255,
                            255
                          ]
                        }
                      },
                      "clftr46h2002014wq1lvtntzi": {
                        "feature_id": "clftr46h2002014wq1lvtntzi",
                        "feature_schema_id": "clftr3ueu061407xe3eam5gfh",
                        "name": "line_dicom",
                        "value": "line_dicom",
                        "annotation_kind": "DICOMPolyline",
                        "classifications": [],
                        "line": [
                          {
                            "x": 10.0,
                            "y": 10.0
                          },
                          {
                            "x": 200.0,
                            "y": 20.0
                          },
                          {
                            "x": 250.0,
                            "y": 250.0
                          }
                        ]
                      }
                    },
                    "classifications": []
                  },
                  "5": {
                    "objects": {
                      "clftr46h2001z14wqod253zyk": {
                        "feature_id": "clftr46h2001z14wqod253zyk",
                        "feature_schema_id": "clftr3ueu061207xeeezscu35",
                        "name": "segmentation_mask_dicom",
                        "value": "segmentation_mask_dicom",
                        "annotation_kind": "DICOMSegmentationMask",
                        "classifications": [],
                        "mask": {
                          "url": "https://api.labelbox.com/api/v1/projects/clftr3und00cd07tzalqk2z8b/annotations/clftr46h2001z14wqod253zyk/index/5/mask"
                        },
                        "composite_mask": {
                          "url": "https://api.labelbox.com/api/v1/tasks/cluu2f9wn02m907wc9n9thld2/masks/clftr45oa001x14wqj2jqd42l/index/5",
                          "color_rgb": [
                            255,
                            255,
                            255
                          ]
                        }
                      }
                    },
                    "classifications": []
                  },
                  "20": {
                    "objects": {
                      "clftr46h2002014wq1lvtntzi": {
                        "feature_id": "clftr46h2002014wq1lvtntzi",
                        "feature_schema_id": "clftr3ueu061407xe3eam5gfh",
                        "name": "line_dicom",
                        "value": "line_dicom",
                        "annotation_kind": "DICOMPolyline",
                        "classifications": [],
                        "line": [
                          {
                            "x": 10.0,
                            "y": 10.0
                          },
                          {
                            "x": 200.0,
                            "y": 10.0
                          },
                          {
                            "x": 300.0,
                            "y": 300.0
                          }
                        ]
                      }
                    },
                    "classifications": []
                  }
                }
              },
              "Sagittal": {
                "name": "Sagittal",
                "classifications": [],
                "frames": {}
              },
              "Coronal": {
                "name": "Coronal",
                "classifications": [],
                "frames": {}
              }
            },
            "segments": {
              "Axial": {
                "clftr46h2001z14wqod253zyk": [
                  [
                    1,
                    1
                  ],
                  [
                    5,
                    5
                  ]
                ],
                "clftr46h2002014wq1lvtntzi": [
                  [
                    1,
                    1
                  ],
                  [
                    20,
                    20
                  ]
                ]
              },
              "Sagittal": {},
              "Coronal": {}
            },
            "classifications": [],
            "key_frame_feature_map": {
              "clftr46h2001z14wqod253zyk": {
                "Axial": {
                  "1": true,
                  "5": true
                },
                "Coronal": {},
                "Sagittal": {}
              },
              "clftr46h2002014wq1lvtntzi": {
                "Axial": {
                  "1": true,
                  "20": true
                },
                "Coronal": {},
                "Sagittal": {}
              }
            }
          }
        }
      ],
      "project_details": {
        "ontology_id": "clftr3ue6061107xee0xp3v6l",
        "task_name": "Done",
        "batch_id": "9a35aca0-ce39-11ed-bcf8-d178e6a2361d",
        "batch_name": "first-batch-dicom-demo",
        "workflow_status": "DONE",
        "priority": 5,
        "consensus_expected_label_count": 1,
        "workflow_history": []
      }
    }
  }
}

Sample model run export

Not supported yet.