将 Cloud Healthcare API 用于数字病理

本页面介绍了如何使用 Cloud Healthcare API 存储、访问、可视化呈现和使用数字病理完整幻灯片图片 (WSI)。

概览

数字病理正在改变医学影像领域,它使传统玻璃幻灯片能够通过数字工作流程进行归档、可视化和评估。数字病理学具有诸多优势,包括能够快速会诊、让患者更轻松地获取信息并更好地了解病情,以及通过将病理学影像作为先进 AI 的数据源来改进临床和研究工作流程。

完整幻灯片数字病理以图片集合的形式呈现。其中最大的通常有几个 GB。DICOM 是数字病理的互操作标准,可实现高效存储完整幻灯片成像及其关联的元数据,并可从电子健康记录(例如FHIR),并通过高性能的供应商中立 API 进行访问。

数字病理的 DICOM 表示法旨在支持高性能的互动使用情形,这些情形需要能够快速平移和缩放千兆像素图像。DICOM 将完整幻灯片数字病理表示为图像金字塔。金字塔的各个层级对应于整个载玻片成像的放大倍数。金字塔级别中表示的影像存储为一系列较小的图片(即帧)。该标准定义了可实现以下功能的 API:图像存储搜索(发现可用的成像)、元数据检索和图像检索整个金字塔层级(放大)或金字塔层级内的选定子区域(帧)

DICOM API 支持 JSON 和 XML 格式的元数据响应,Cloud Healthcare API 还支持通过 BigQuery 访问元数据,从而实现复杂的关联查询,将 DICOM 元数据与其他数据源联接起来。影像可以以存储格式返回,也可以转换(转码)为其他格式。

生成完整幻灯片 DICOM 成像

越来越多的数字病理幻灯片扫描仪支持直接从幻灯片扫描仪生成 DICOM 成像。在许多情况下,使用 DICOMwebDIMSE DICOM API 可以将幻灯片扫描仪生成的 DICOM 直接提取到 Cloud Healthcare API 中。如果生成 DICOM 的载玻片扫描仪未连接到实验室信息系统 (LIS),则可能需要扩充 DICOM 中的非像素元数据,以添加(例如,患者)或修改(例如,研究实例 UID)元数据,然后再在临床影像 PACS 中使用该数据。

过去,玻片扫描器以专有格式生成影像。转换流水线可用于将 OpenSlide 支持的格式转换为 DICOM,将自定义元数据与生成的 DICOM 合并,并将生成的 DICOM 直接注入到 Cloud Healthcare API 中。此解决方案已用于支持将 PB 级归档数据转换为 DICOM 格式。

可用于将数字病理成像转换为 DICOM 的工具包括:

可以使用 DICOMwebDIMSECloud Storage 以编程方式将 DICOM 实例导入 Cloud Healthcare API。

映像存储分层

Cloud Healthcare API 支持以 DICOM 实例为粒度的存储层级。对于全玻片成像,这意味着数字病理学图像金字塔的每个放大倍数都可以存储在最符合其预期用途的层级。DICOM 实例的存储层会影响数据存储、检索以及(在某些情况下)删除的费用。存储分层不会影响数据访问性能。默认情况下,所有 DICOM 实例都存储在标准存储层级中。Cloud Healthcare API 提供了一个 API,用于查看和更改 DICOM 实例的存储类。此外,还可以使用映像生命周期管理 (ILM) 解决方案,根据启发式方法自动将 DICOM 实例在存储层之间移动。该解决方案可以根据 DICOM 实例的大小、使用时长和访问模式,自动将其从一个存储层级迁移到另一个存储层级。

注意:归档存储会增加像素数据检索的费用。数据检索费用按检索的数据量收取,而不是按存储的数据量收取。对于全玻片成像,这是一个重要的区别,因为可以使用帧级和实例级 API 来检索像素数据。从费用角度来看,当需要实例的部分帧时,使用帧 API 检索归档的影像尤其有利,因为数据检索费用将根据返回的数据大小收取,而不是根据存储的实例大小收取。

交互式可视化图表

Cloud Healthcare API 可用于支持完整幻灯片影像的互动可视化,适用于从零占用空间 Web 查看器 (JavaScript) 到独立客户端应用的各种应用。以下开源查看器已通过测试,可与 Cloud Healthcare API 兼容:

提高交互式可视化图表的性能

数字病理 DICOM 代理是一项 Google Research 解决方案,可用于提升交互式全玻片成像应用的帧服务性能。部署后,数字病理 DICOM 代理会封装 Cloud Healthcare API,并执行即时帧缓存,以优先从内存中的 Memorystore for Redis 缓存提供帧图像。

完整幻灯片成像色彩归一化

DICOM 标准要求 WSI 包含一个 ICC 色彩特性文件,用于定义采集图像的载玻片扫描仪的色彩空间。此颜色空间与显示屏或其他幻灯片扫描仪所用的颜色空间可能会有明显差异。如果未嵌入 ICC 配置文件就进行可视化,图片的颜色通常会比预期更饱和或更不饱和。Cloud Healthcare API 提供了一些 API,用于检索 DICOM 实例中嵌入的 ICC 配置文件,并将检索到的图片转换为参考色彩空间。

  • 您可以使用批量数据 API实例检索 API 检索嵌入在 DICOM 实例中的 ICC 配置文件。然后,您可以使用 Little-CMS(以 C++ 编写)和 Pillow(以 Python 编写)等库转换在幻灯片扫描仪颜色空间中检索到的图片。

  • EZ-WSI DICOMweb Python 库支持 ICC 色彩特性文件转换,作为其图片检索和机器学习嵌入生成 API 的一部分。

机器学习

Path Foundation 是由 Google Research 开发的基础模型,旨在加速数字病理学领域的机器学习 (ML) 开发。

该模型会将病理学影像的图像块(子区域)转换为嵌入(即浮点数列表)。此嵌入内容可作为图片的机器学习表示形式。使用图片嵌入作为输入数据有助于减少开发有效机器学习模型所需的数据总量和计算资源。

您可以从 Model Garden 将 Path Foundation 部署到 Google Cloud 。它还以开源形式在 Hugging Face 上提供,并附带开放权重。

为了帮助生成嵌入内容,EZ-WSI DICOMweb 开源 Python 库包含一些接口(请参阅病理学嵌入内容生成入门指南 Colab 笔记本),可简化 Cloud Healthcare API 中存储的影像到嵌入内容的转换。如需了解如何使用 EZ-WSI DICOMweb 和 Pathology Foundations 从完整幻灯片 DICOM 成像中训练线性分类器,请参阅 Train a Digital Pathology Linear Classifier From Images Stored on DICOM Colab notebook

以编程方式检索元数据和像素成像

本部分介绍从 Cloud Healthcare API 检索数字病理元数据和影像的方法。

DICOM 信息模型

DICOM 使用三个唯一标识符 (UID) 来唯一标识影像:

  • 研究实例 UID:用于标识从单次患者检查中获取或生成的所有影像。
  • 序列实例 UID:用于标识相应检查中的每次医学影像采集(例如,病理切片的唯一扫描)。
  • SOP 实例 UID:用于标识获取或生成为相应采集的一部分的每张图像。

例如,载玻片扫描仪通常会生成多张图片来捕获完整的载玻片。这些图片可能包括:

  • 不同放大倍数下的成像组织区域。
  • 幻灯片标签。
  • 整个幻灯片的图片。
  • 描述幻灯片扫描操作的数据。

列出数字病理 DICOM 系列

如需识别玻片显微镜图像,请搜索 Modality 标记 (0008,0060) 为 SM 的 DICOM 系列。您可以使用 dicomStores.searchForSeries 方法进行此搜索。

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID:DICOM 存储区的父数据集
  • DICOM_STORE_ID:DICOM 存储区 ID

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/series?Modality=SM"

PowerShell

执行以下命令:

$cred = gcloud auth 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/dicomStores/DICOM_STORE_ID/dicomWeb/series?Modality=SM" | Select-Object -Expand Content

API Explorer

打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行

您应该收到类似以下内容的 JSON 响应:

检索数字病理 DICOM 元数据

用于全玻片成像的 DICOM 系列通常包含多个实例。这些 DICOM 实例可以表示图像金字塔的不同级别或成像载玻片的其他区域。

要在研究中查看实例的实例元数据,请调用 dicomStores.searchForInstances 方法:

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID:DICOM 存储区的父数据集
  • DICOM_STORE_ID:DICOM 存储区 ID
  • STUDY_INSTANCE_UID:研究实例唯一标识符 (UID)

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID"

PowerShell

执行以下命令:

$cred = gcloud auth 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/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID" | Select-Object -Expand Content

API Explorer

打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行

您应该收到类似以下内容的 JSON 响应:

检索完整幻灯片成像像素数据

您可以使用 DICOMweb 以编程方式检索完整幻灯片成像像素数据。Cloud Healthcare API 还支持通过使用 DIMSE 协议的 DICOM 适配器进行检索。

大多数全幻灯片图片都是多帧图片。对于这些数据,Cloud Healthcare API 可通过 DICOM 帧和渲染帧 API 直接访问像素数据。

或者,您也可以先提取整个 DICOM 实例,然后以编程方式解码该实例中的编码帧,从而间接检索像素数据。

检索帧的性能注意事项:

  • 与批量检索帧相比,检索整个实例通常每帧的速度更快。
  • 批量检索帧通常比检索单个帧更快。

EZ-WSI DICOMweb

EZ-WSI DICOMweb 是一个开源 Python 库。它通过抽象化底层 DICOMweb 调用,简化了从 Cloud Healthcare API 检索数字病理像素数据的过程。该库可以将串行图片请求转换为批量请求,从而在许多使用情形下帮助加快帧检索速度。批量检索帧数据通常可以减少所需的总时间和 DICOM 存储区配额。

我们提供了一个演示该库的 Colab 笔记本

DICOMweb 实例检索 API

DICOMweb 实例检索 API 会返回一个二进制 DICOM 实例。此实例包含其中存储的所有元数据和像素数据。

您可以使用各种库(例如以下库)对返回的二进制数据进行解码:

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID:DICOM 存储区的父数据集
  • DICOM_STORE_ID:DICOM 存储区 ID
  • STUDY_INSTANCE_UID:研究实例唯一标识符
  • SERIES_INSTANCE_UID:序列实例唯一标识符
  • INSTANCE_UID:实例唯一标识符
  • OUTPUT_FILE:用于写入 DICOM 实例的文件。

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/dicom" \
--output OUTPUT_FILE \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID"

PowerShell

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "application/dicom" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-OutFile OUTPUT_FILE `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID"

API Explorer

打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行

OUTPUT_FILE 文件应填充内容

DICOMweb 帧 API

借助 DICOMweb 帧 API,您可以从 DICOM 实例中检索一个或多个帧。使用该 API 检索到的 Pixel 数据可以请求转码为 DICOM 存储区中原生存储的格式以外的其他格式。

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID:DICOM 存储区的父数据集
  • DICOM_STORE_ID:DICOM 存储区 ID
  • STUDY_INSTANCE_UID:研究实例唯一标识符
  • SERIES_INSTANCE_UID:序列实例唯一标识符
  • INSTANCE_UID:实例唯一标识符
  • FRAMES:要检索像素数据的帧编号

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAMES"

PowerShell

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAMES" | Select-Object -Expand Content

API Explorer

打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行

您应该会收到一个对所请求的影像进行编码的多部分响应。 <0x0A

DICOMweb 渲染帧 API

DICOMweb 渲染帧 API 支持将帧在服务器端转换为标准图片格式(例如 JPEG 和 PNG)。

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID:DICOM 存储区的父数据集
  • DICOM_STORE_ID:DICOM 存储区 ID
  • STUDY_INSTANCE_UID:研究实例唯一标识符
  • SERIES_INSTANCE_UID:序列实例唯一标识符
  • INSTANCE_UID:实例唯一标识符
  • FRAME:要检索像素数据的帧编号

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: image/png" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAME/rendered"

PowerShell

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "image/png" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAME/rendered" | Select-Object -Expand Content

API Explorer

打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行

您应该会收到一个对所请求的影像进行编码的二进制响应。 <0x0A

使用检索批量数据功能检索嵌入在 DICOM 实例中的 ICC 配置文件

您可以使用 DICOMweb 检索 bulkdata 直接检索嵌入在 DICOM 实例中的 ICC(国际色彩联盟)配置文件字节。

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID:DICOM 存储区的父数据集
  • DICOM_STORE_ID:DICOM 存储区 ID
  • STUDY_INSTANCE_UID:研究实例唯一标识符
  • SERIES_INSTANCE_UID:序列实例唯一标识符
  • INSTANCE_UID:实例唯一标识符
  • OUTPUT_FILE:用于写入 ICC 配置文件实例的文件。

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/octet-stream; transfer-syntax=*" \
--output OUTPUT_FILE \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/00480105/0/00282000"

PowerShell

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "application/octet-stream; transfer-syntax=*" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-OutFile OUTPUT_FILE `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/00480105/0/00282000"

API Explorer

打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行

OUTPUT_FILE 文件应填充内容