本页面介绍如何将 DICOM 实例导出到 Cloud Storage 并导入 DICOM 对象。DICOM 实例通常是图片,但可以是其他类型的永久性数据,例如结构化报告。Cloud Storage 对象是位于 Cloud Storage 中的 DICOM 实例。
您可以在 Cloud Storage 存储分区和 DICOM 存储之间导入和导出批量数据。例如,您可能想将多个 DICOM 实例文件导入到 DICOM 存储区中。您可以将数据存储在 Cloud Storage 存储分区中,然后使用单个导入操作将文件导入 DICOM 存储区中,而不是直接以编程方式存储数据。如需了解详情,请参阅 Cloud Storage。
要直接存储 DICOM 实例(例如从本地计算机),您可以使用在 Cloud Healthcare API 中实现的存储事务 REST 风格网络服务存储 DICOM 数据。要从 DICOM 存储区检索单个实例或研究,您可以检索 DICOM 数据使用检索事务在 Cloud Healthcare API 中实现的 RESTful 网络服务。
设置 Cloud Storage 权限
在将 DICOM 数据导入 Cloud Storage 以及从 Cloud Storage 导入 DICOM 数据之前,您必须向 Cloud Healthcare Service Agent 服务帐号授予额外权限。有关详情,请参阅 DICOM 存储 Cloud Storage 权限。
导入 DICOM 对象
以下示例展示了如何从 Cloud Storage 存储分区导入 DICOM 对象。
控制台
要从 Cloud Storage 存储分区导入 DICOM 对象,请完成以下步骤:
在 Cloud Console 中,转到数据集页面。
点击要导入 DICOM 对象的数据集。
在 DICOM 存储区列表中,从操作列表中选择导入。
系统会显示导入 DICOM 存储区页面。
在项目列表中,选择一个 Cloud Storage 项目。
在位置列表中,选择一个 Cloud Storage 存储分区。
要设置导入文件的特定位置,请执行以下操作:
- 展开高级选项。
- 选择替换 Cloud Storage 路径。
- 要设置特定的文件导入来源,请在位置文本框中使用以下变量定义路径:
*
- 匹配非分隔符。**
- 匹配字符,包括分隔符。此名称可与文件扩展名配合使用,以匹配同一类型的所有文件。?
- 匹配 1 个字符。
点击导入,从定义的来源导入 DICOM 对象。
gcloud
要从 Cloud Storage 存储分区导入 DICOM 对象,请使用 gcloud healthcare dicom-stores import gcs
命令。指定父数据集的名称、DICOM 存储区的名称以及该对象在 Cloud Storage 存储分区中的位置。
- 文件在存储分区中的位置是任意的,无需严格遵循以下示例中指定的格式。
- 在 Cloud Storage 中指定 DICOM 资源的位置时,您可以使用通配符从一个或多个目录导入多个文件。支持以下通配符:
- 使用
*
可以匹配零个或更多的非分隔符字符。例如,gs://BUCKET/DIRECTORY/Example*.dcm
匹配 DIRECTORY中的 example.dcm 和 example22.dcm。 - 使用
**
匹配 0 个或多个字符(包括分隔符)。必须在路径末尾使用,且路径中没有其他通配符。也可与扩展名(如.dcm)一起使用,该扩展名可导入指定目录及其子目录中扩展名中的所有文件。例如,gs://BUCKET/DIRECTORY/**.dcm
会导入 DIRECTORY 及其子目录中扩展名为 .dcm 文件名的所有文件。 - 使用
?
可以匹配 1 个字符。例如,gs://BUCKET/DIRECTORY/Example?.dcm
匹配示例 1.dcm,但不匹配 Example.dcm 或 Example01.dcm。
- 使用
以下示例展示了如何从 Cloud Storage 存储分区导入 DICOM 对象。
gcloud healthcare dicom-stores import gcs DICOM_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --gcs-uri=gs://BUCKET/DIRECTORY/DICOM_INSTANCE.dcm
命令行会显示操作 ID:
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
要查看操作的状态,请运行 gcloud healthcare operations describe
命令,并提供响应中的 OPERATION_ID:
gcloud healthcare operations describe OPERATION_ID \ --location=LOCATION \ --dataset=DATASET_ID
命令完成后,响应将包含 done: true
。
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ImportDicomData counter: success: SUCCESSFUL_INSTANCES failure: FAILED_INSTANCES createTime: "CREATE_TIME" endTime: "END_TIME" name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID response: '@type': "..."
API
要从 Cloud Storage 存储分区导入 DICOM 对象,请使用 projects.locations.datasets.dicomStores.import
方法。
- 文件在存储分区中的位置是任意的,无需严格遵循以下示例中指定的格式。
- 在 Cloud Storage 中指定 DICOM 资源的位置时,您可以使用通配符从一个或多个目录导入多个文件。支持以下通配符:
- 使用
*
可以匹配零个或更多的非分隔符字符。例如,gs://BUCKET/DIRECTORY/Example*.dcm
匹配 DIRECTORY中的 example.dcm 和 example22.dcm。 - 使用
**
匹配 0 个或多个字符(包括分隔符)。必须在路径末尾使用,且路径中没有其他通配符。也可与扩展名(如.dcm)一起使用,该扩展名可导入指定目录及其子目录中扩展名中的所有文件。例如,gs://BUCKET/DIRECTORY/**.dcm
会导入 DIRECTORY 及其子目录中扩展名为 .dcm 文件名的所有文件。 - 使用
?
可以匹配 1 个字符。例如,gs://BUCKET/DIRECTORY/Example?.dcm
匹配示例 1.dcm,但不匹配 Example.dcm 或 Example01.dcm。
- 使用
curl
要导入 DICOM 对象,请发出 POST
请求并提供父数据集的名称、DICOM 存储区的名称、对象在 Cloud Storage 存储分区中的位置以及访问令牌。
以下示例显示了使用 curl
的 POST
请求。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'gcsSource': { 'uri': 'gs://BUCKET/*.dcm' } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:import"
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ImportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter": { "success": SUCCESSFUL_INSTANCES "failure": FAILED_INSTANCES }, }, "done": true, "response": { "@type": "..." } }
PowerShell
要导入 DICOM 对象,请发出 POST
请求并提供父数据集的名称、DICOM 存储区的名称、对象在 Cloud Storage 存储分区中的位置以及访问令牌。
以下示例显示了使用 Windows PowerShell 的 POST
请求。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'gcsSource': { 'uri': 'gs://BUCKET/*.dcm' } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:import" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ImportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter":{ "success": SUCCESSFUL_INSTANCES "failure": FAILED_INSTANCES } }, "done": true, "response": { "@type": "..." } }
Go
Java
Node.js
Python
对 DICOM 导入请求进行问题排查
如果在执行 DICOM 导入请求期间发生错误,系统会将错误记录到 Cloud Logging。如需了解详情,请参阅在 Cloud Logging 中查看错误日志。
导出 DICOM 实例
以下示例展示了如何将 DICOM 实例导出到 Cloud Storage 存储分区。从 DICOM 存储区导出 DICOM 实例时,将导出该存储区中的所有实例。
控制台
要将 DICOM 实例导出到 Cloud Storage,请完成以下步骤:
在 Cloud Console 中,转到数据集页面。
点击要为其导出 DICOM 实例的数据集。
在 DICOM 存储区列表中,从操作列表中选择导出。
此时将显示导出 DICOM 存储区页面。
选择 Google Cloud Storage 存储分区。
在项目列表中,选择一个 Cloud Storage 项目。
在位置列表中,选择一个 Cloud Storage 存储分区。
在 DICOM 导出设置中,选择用于导出 DICOM 实例的文件类型。您可以选择以下类型:
- DICOM 文件(
.dcm
) - 八位元字符串流
- 图像(
.jpg
、.png
)
- DICOM 文件(
要定义其他转移语法,请从转移语法列表中选择语法。
点击导出,将 DICOM 实例导出到 Cloud Storage 中的指定位置。
gcloud
要将 DICOM 实例导出到 Cloud Storage 存储分区,请使用 gcloud healthcare dicom-stores export gcs
命令。
- 提供父数据集的名称、DICOM 存储区的名称和目标 Cloud Storage 存储分区。
- 写入 Cloud Storage 存储分区或目录(而非对象),因为 Cloud Healthcare API 会为每个对象创建一个
.dcm
文件。 - 如果该命令指定的目录不存在,则会创建该目录。
以下示例展示了 gcloud healthcare dicom-stores export gcs
命令。
gcloud healthcare dicom-stores export gcs DICOM_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --gcs-uri-prefix=gs://BUCKET/DIRECTORY
命令行会显示操作 ID:
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
要查看操作的状态,请运行 gcloud healthcare operations describe
命令,并提供响应中的 OPERATION_ID:
gcloud healthcare operations describe OPERATION_ID \ --location=LOCATION \ --dataset=DATASET_ID
命令完成后,响应将包含 done: true
。
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData counter: success: SUCCESSFUL_INSTANCES failure: FAILED_INSTANCES createTime: "CREATE_TIME" endTime: "END_TIME" name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID response: '@type': "..."
API
要将 DICOM 实例导出到 Cloud Storage 存储分区,请使用 projects.locations.datasets.dicomStores.export
方法。
- 写入 Cloud Storage 存储分区或目录(而非对象),因为 Cloud Healthcare API 会为每个 DICOM 对象创建一个
.dcm
文件。 - 如果该命令指定的目录不存在,则会创建该目录。
curl
要导出 DICOM 实例,请发出 POST
请求并提供父数据集的名称、DICOM 存储区的名称、目标 Cloud Storage 存储分区以及访问令牌。
以下示例显示了使用 curl
的 POST
请求。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'gcsDestination': { 'uriPrefix': 'gs://BUCKET/DIRECTORY' } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter":{ "success": SUCCESSFUL_INSTANCES "failure": FAILED_INSTANCES } }, "done": true, "response": { "@type": "..." } }
PowerShell
要导出 DICOM 实例,请发出 POST
请求并提供父数据集的名称、DICOM 存储区的名称、目标 Cloud Storage 存储分区以及访问令牌。
以下示例显示了使用 Windows PowerShell 的 POST
请求。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'gcsDestination': { 'uriPrefix': 'gs://BUCKET/DIRECTORY' } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter":{ "success": SUCCESSFUL_INSTANCES "failure": FAILED_INSTANCES }, }, "done": true, "response": { "@type": "..." } }
Go
Java
Node.js
Python
对 DICOM 导出请求进行问题排查
如果在执行 DICOM 导出请求期间发生错误,系统会将错误记录到 Cloud Logging。如需了解详情,请参阅在 Cloud Logging 中查看错误日志。