使用 DicomTagConfig 对 DICOM 数据进行去标识化处理

本页面介绍如何使用 Cloud Healthcare API 中的 v1beta1 DicomTagConfig 配置在以下级别对 DICOM 实例中的敏感数据进行去标识化:

本页面还介绍了在 DICOM 存储区级层对数据进行去标识化时如何应用过滤条件。

您可以使用旧版 v1 DicomConfig 对象或 v1beta1 DicomTagConfig 对象配置 DICOM 去标识化操作。我们强烈建议您使用 DicomTagConfig

如果您已在使用 DicomConfig 执行去标识化操作,我们建议您改用 DicomTagConfig。如需查看新功能的摘要,请参阅 DicomTagConfig 中的新配置选项。如需了解如何迁移,请参阅迁移请求和响应以使用 DicomTagConfig

DicomTagConfig 中的新配置选项

使用上下文去标识化功能对文本进行去标识化处理

您可以配置 DicomTagConfig.Options.CleanDescriptorsOption 对象,以便对非结构化元数据文本进行上下文去标识化。此选项基于“干净的描述符”选项。如果您指定 DicomTagConfig.Options.CleanDescriptorsOption,系统会在检查期间使用额外的 infoType,这可能会影响结算费用。

使用 DicomTagConfig.Options.CleanDescriptorsOption 选项可转换与已移除的标记匹配的任何非结构化元数据文本,这样做可提高去标识化的质量。例如,假设您在对 X 光片进行去标识化处理,并且该 X 光片患者的姓氏也是一个名词,如 Wall。如果实例中的任何元数据(如 StudyDescription 中的文本)包含 Wall 一词,该文本将被转换。

只要标记与以下某个操作代码匹配,CleanDescriptorsOption 选项就会隐去与 DICOM 基本配置文件中标记为要移除的任何标记匹配的上下文短语:

  • D
  • Z
  • X
  • U

系统会将匹配的上下文短语替换为令牌 [CTX]

您可以通过指定以下内容来配置隐去哪些标记:

但是,不能更改 DICOM 基本配置文件中使用的标记。

使用上下文去标识化,隐去内置文本

您可以指定 TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 枚举,以便对图片中的内置文本启用上下文去标识化。此选项基于“干净的描述符”选项。如果您指定 TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 枚举,系统会在检查期间使用额外的 infoType,这可能会影响结算费用。

您可以通过以下方式指定 TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 枚举:

只要内置文本与 DICOM 基本配置文件中标记为要移除的标记匹配,只要这些标记与以下操作代码之一匹配,TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 选项就会隐去这些标记:

  • D
  • Z
  • X
  • U

除了使用 ProfileType 对象中的枚举启用或停用内置文本之外,没有其他用于对内置文本进行上下文去标识化的配置。不要求指定枚举。

图片去标识化中的其他 infoType

您可以使用信息类型 (infoType) 指定要在对标记执行去标识化时扫描的数据。 infoType 是一种敏感数据类型,例如患者姓名、电子邮件地址、电话号码、身份证号码和信用卡号等等。

您可以在 DicomTagConfig.Options.ImageConfig 对象中配置以下字段,以确定在 DICOM 图片去标识化过程中使用哪些 infoType:

仅当 DicomTagConfig.Options.ImageConfig.TextRedactionMode 设为以下值之一时,这些字段才会生效:

迁移请求和响应以使用 DicomTagConfig

您可以使用 DicomTagConfig 配置 DICOM 去标识化,后者在 Cloud Healthcare API v1beta1 中提供,是使用旧版 DicomConfig 的替代方案。发送请求时,您不能同时包含 DicomConfigDicomTagConfig

以下部分介绍了 DicomConfig 中的配置以及如何将这些配置迁移到 DicomTagConfig

ProfileType 授予 TagFilterProfile

DicomConfig TagFilterProfile 对象替换为 DicomTagConfig ProfileType 对象。TagFilterProfileType 中的四个配置文件在 ProfileType 中可用。

以下示例展示了如何将请求从使用 TagFilterProfile 改为使用 ProfileType

DicomConfigDicomTagConfig

"config": {
  "dicom": {
    "filterProfile": enum(TagFilterProfile)
  }
}

"config": {
  "dicomTagConfig": {
    "profileType": enum(ProfileType)
  }
}

keepListremoveList

DicomTagConfig 中不再提供 DicomConfig keepListremoveList 字段。如果您使用 keepListremoveList 指定要保留或移除的标记(而不是使用配置文件),则必须迁移到用于指定标记行为的新 Action 对象。Action 对象提供了用于转换标记的其他选项。

以下示例展示了如何将请求从使用 keepList 改为使用 Action.keepTag。该请求指定在去标识化操作期间保留 PatientID 标记的值。

DicomConfigDicomTagConfig

"config": {
  "dicom": {
    "keepList": {
      "tags": [
        "PatientID"
      ]
    }
  }
}

"config": {
  "dicomTagConfig": {
    "actions": [
      {
        "queries": [
          "PatientID"
        ],
        "keepTag": {}
      }
    ]
  }
}

合并保留名单、移除名单和个人资料

DicomConfig 对象中,您可以根据 keeplist、移除列表和配置文件确定是保留还是移除数据。这些选项是互斥的。

使用 DicomTagConfig 对象时,您可以组合这些选项,方法是在 Action 对象中指定要保留和移除的标记,同时在 ProfileType 中指定配置文件。

Action 对象中配置的选项会覆盖 ProfileType 配置文件中配置的选项。Action 对象中的选项会按照在请求中提供的顺序来应用。

Objects.primaryIds 授予 skipIdRedaction

DicomConfig 对象中的 skipIdRedaction 字段替换为 DicomTagConfig 对象中的 primaryIds 字段。Options 对象中的 primaryIds 字段包含 PrimaryIdsOption 对象,您可以在该对象中指定以下枚举之一:

  • PRIMARY_IDS_OPTION_UNSPECIFIED:未向 PrimaryIdsOption 提供任何值时的默认行为。默认为 ProfileType 中指定的选项。
  • KEEP:保持主 ID 不变。
  • REGEN:重新生成主 ID。

以下示例展示了如何将请求从使用 skipIdRedaction 改为使用 Options.primaryIds。该请求指定在去标识化操作期间保留主 ID 的值:

DicomConfigDicomTagConfig

"config": {
  "dicom": {
    "skipIdRedaction": true
  }
}

"config": {
  "dicomTagConfig": {
    "options": {
      "primaryIds": "KEEP"
    }
  }
}

DicomTagConfig.Options.ImageConfig 授予 DeidentifyConfig.ImageConfig

DeidentifyConfig.ImageConfig 对象替换为 DicomTagConfig.Options.ImageConfig 对象。在这两个版本中,ImageConfig 对象中的选项相同。

以下示例展示了如何将请求从在 DeidentifyConfig.image 中使用 ImageConfig 改为使用 DeidentifyConfig.DicomTagConfig.Options.cleanImage 中的 ImageConfig。该请求指定在去标识化操作期间隐去图片中的所有文本:

DeidentifyConfig.imageDeidentifyConfig.DicomTagConfig.Options.cleanImage

"config": {
  "image": {
    "textRedactionMode": "REDACT_ALL_TEXT"
  }
}

"config": {
  "dicomTagConfig": {
    "options": {
      "cleanImage": {
        "textRedactionMode": "REDACT_ALL_TEXT"
      }
    }
  }
}

去标识化概览

数据集级层去标识化

如需在数据集级别对 DICOM 数据进行去标识化处理,请调用 datasets.deidentify 方法。datasets.deidentify 方法具有以下组件:

  • 源数据集:包含 DICOM 存储区的数据集,DICOM 存储区具有一个或多个包含敏感数据的实例。调用 datasets.deidentify 方法时,数据集内所有 DICOM 存储区中的所有实例都会进行去标识化处理。
  • 目标数据集:去标识化不会影响原始数据集或其数据。相反,已经去标识化的原始数据副本将会写入到称为目标数据集的新数据集。
  • 去标识化内容:用于指定如何处理数据集内的 DICOM 数据的配置参数。您可以通过在 DeidentifyConfig 对象中指定这些参数来配置 DICOM 去标识化,以对 DICOM 实例元数据(使用标记关键字)或内置文本进行去标识化处理。

本指南中的大多数示例展示了如何在数据集级别对 DICOM 数据进行去标识化处理。

DICOM 存储区级层去标识化

通过在 DICOM 存储区级层对 DICOM 数据进行去标识化,您可以更好地控制要对哪些数据进行去标识化。例如,如果您有一个包含多个 DICOM 存储区的数据集,则可以根据存储区中存在的数据类型对每个 DICOM 存储区进行去标识化。

要对 DICOM 存储区中的 DICOM 数据进行去标识化,请调用 dicomStores.deidentify 方法。dicomStores.deidentify 方法具有以下组件:

  • 来源 DICOM 存储区:包含一个或多个实例(具有敏感数据)的 DICOM 存储区。当您调用 dicomStores.deidentify 操作时,DICOM 存储区中的所有实例都会进行去标识化。
  • 目标 DICOM 存储区:去标识化不会影响原始 DICOM 存储区或其数据。相反,已经去标识化的原始数据副本将会写入到目标 DICOM 存储区。目标 DICOM 存储区必须已存在。
  • 去标识化内容:用于指定如何处理 DICOM 存储区的配置参数。您可以通过在 DeidentifyConfig 对象中指定这些参数来配置 DICOM 去标识化,以对 DICOM 图片中的 DICOM 实例元数据或内置文本进行去标识化处理。

如需查看有关如何在 DICOM 存储区级别对 DICOM 数据进行去标识化处理的示例,请参阅在 DICOM 存储区级层对数据进行去标识化处理

过滤条件

在 DICOM 存储区级层对 DICOM 数据进行去标识化处理时,您可以通过配置过滤器文件并在 dicomStores.deidentify 请求中指定该文件对 DICOM 存储区中的数据子集进行去标识化处理。如需查看示例,请参阅对 DICOM 存储区的子集进行去标识化处理

示例概览

本指南中的示例使用名为 dicom_deid_instance_sample.dcm 的单个 DICOM 实例,但您也可以对多个实例进行去标识化处理。如需使用本页示例中的示例 DICOM 实例,请将文件下载到本地机器,然后按照存储 DICOM 数据中的说明将其存储在 DICOM 存储区中。

以下部分展示了 DICOM 实例中的图片以及实例中的元数据。

示例图片

本页面中的一些示例包含去标识化图片的输出。每个示例都使用以下原始图片作为其输入。您可以将每个去标识化操作的输出图片与此原始图片进行比较,以查看操作的效果:

xray_original

示例元数据

本页面中的大多数示例都包含 DICOM 实例中已更改的元数据的输出。每个示例都使用以下原始元数据作为其输入。您可以将每个去标识化操作的输出元数据与此原始元数据进行比较,以查看去标识化处理的效果:

[
  {
    "00020002": {
      "vr": "UI",
      "Value": [
        "1.2.840.10008.5.1.4.1.1.7"
      ]
    },
    "00020003": {
      "vr": "UI",
      "Value": [
        "1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695"
      ]
    },
    "00020010": {
      "vr": "UI",
      "Value": [
        "1.2.840.10008.1.2.4.50"
      ]
    },
    "00020012": {
      "vr": "UI",
      "Value": [
        "1.2.276.0.7230010.3.0.3.6.1"
      ]
    },
    "00020013": {
      "vr": "SH",
      "Value": [
        "OFFIS_DCMTK_361"
      ]
    },
    "00080005": {
      "vr": "CS",
      "Value": [
        "ISO_IR 100"
      ]
    },
    "00080016": {
      "vr": "UI",
      "Value": [
        "1.2.840.10008.5.1.4.1.1.7"
      ]
    },
    "00080018": {
      "vr": "UI",
      "Value": [
        "1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695"
      ]
    },
    "00080020": {
      "vr": "DA",
      "Value": [
        "20110909"
      ]
    },
    "00080030": {
      "vr": "TM",
      "Value": [
        "110032"
      ]
    },
    "00080050": {
      "vr": "SH"
    },
    "00080064": {
      "vr": "CS",
      "Value": [
        "WSD"
      ]
    },
    "00080070": {
      "vr": "LO",
      "Value": [
        "Manufacturer"
      ]
    },
    "00080090": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "John Doe"
        }
      ]
    },
    "00081090": {
      "vr": "LO",
      "Value": [
        "ABC1"
      ]
    },
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "Ann Johnson"
        }
      ]
    },
    "00100020": {
      "vr": "LO",
      "Value": [
        "S1214223-1"
      ]
    },
    "00100030": {
      "vr": "DA",
      "Value": [
        "19880812"
      ]
    },
    "00100040": {
      "vr": "CS",
      "Value": [
        "F"
      ]
    },
    "0020000D": {
      "vr": "UI",
      "Value": [
        "2.25.70541616638819138568043293671559322355"
      ]
    },
    "0020000E": {
      "vr": "UI",
      "Value": [
        "1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694"
      ]
    },
    "00200010": {
      "vr": "SH"
    },
    "00200011": {
      "vr": "IS"
    },
    "00200013": {
      "vr": "IS"
    },
    "00200020": {
      "vr": "CS"
    },
    "00280002": {
      "vr": "US",
      "Value": [
        3
      ]
    },
    "00280004": {
      "vr": "CS",
      "Value": [
        "YBR_FULL_422"
      ]
    },
    "00280006": {
      "vr": "US",
      "Value": [
        0
      ]
    },
    "00280010": {
      "vr": "US",
      "Value": [
        1024
      ]
    },
    "00280011": {
      "vr": "US",
      "Value": [
        1024
      ]
    },
    "00280100": {
      "vr": "US",
      "Value": [
        8
      ]
    },
    "00280101": {
      "vr": "US",
      "Value": [
        8
      ]
    },
    "00280102": {
      "vr": "US",
      "Value": [
        7
      ]
    },
    "00280103": {
      "vr": "US",
      "Value": [
        0
      ]
    },
    "00282110": {
      "vr": "CS",
      "Value": [
        "01"
      ]
    },
    "00282114": {
      "vr": "CS",
      "Value": [
        "ISO_10918_1"
      ]
    }
  }
]

隐去图片中的内置文本

您可以使用 Action 对象中的 ImageConfig 对象对 DICOM 图片中的内置文本进行去标识化处理。在 ImageConfig 中,您可以指定要包含或排除哪些 infoType,以及如何使用 TextRedactionMode 对象隐去文本。

隐去所有文本

以下示例展示了如何通过将 TextRedactionMode 设置为 REDACT_ALL_TEXT 对 DICOM 实例进行去标识化处理。此配置会隐去图片中的所有内置文本。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_ALL_TEXT"
            }
          }
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_ALL_TEXT"
            }
          }
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_ALL_TEXT"
            }
          }
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

使用 REDACT_ALL_TEXT 对图片进行去标识化处理后,图片将如下所示。请注意,图片底部的所有内置文本均已隐去。

图 1.使用 REDACT_ALL_TEXT 进行去标识化处理后的 DICOM 实例。

使用“简洁描述符”选项隐去敏感文本

以下示例展示了如何通过将 TextRedactionMode 设置为 REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 对 DICOM 实例进行去标识化处理。

如需详细了解 CleanDescriptorsOption 选项,请参阅使用上下文去标识化功能对文本进行去标识化处理

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS"
            }
          }
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS"
            }
          }
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS"
            }
          }
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

使用 REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 对图片进行去标识化处理后,图片将如下所示。请注意,图片底部的所有内置文本都未经过遮盖。文本 Female 仍会显示,因为 PatientSex (0010,0040) 不是默认的 DICOM infoType 之一。

图 2. 使用 REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 进行去标识化处理后的 DICOM 实例。

对 DICOM 标记进行去标识化处理

您可以根据 DICOM 元数据中的标记关键字对 DICOM 实例进行去标识化处理。

DicomTagConfig Action 对象中提供了以下标记过滤方法:

您可以将每个 Action 选项指定为 DICOM 标记 ID、名称或值表示法 (VR) 的列表,然后该选项会对列表中的标记执行操作。您不能在标记列表中指定多个 Action 选项。

每个 Action 对象都提供了一个 queries[] 列表,您可在其中指定标记列表。支持以下代码格式:

  • 代码 ID,例如 "00100010"
  • 标记名称,例如 "PatientName"
  • 价值表示法 (VR),例如 "PN"

queries[] 列表中可以提供的标记数量不受限制。 但是,每个标记只能对一个 Action 选项执行。如需指定对它们执行不同 Action 选项的不同标记,您必须指定多个 Action 对象。

保留标签

您可以通过在 DicomTagConfig 对象的 KeepTag 对象中指定标记来防止隐去标记的值。

如需在使用 KeepTag 对象时生成有效的 DICOM 对象,请在 ProfileType 对象中指定 MINIMAL_KEEP_LIST_PROFILEDEIDENTIFY_TAG_CONTENTS 值。

通过指定上述任一配置文件,系统会自动保留以下标记,确保去标识化的 DICOM 实例是有效的 DICOM:

  • StudyInstanceUID
  • SeriesInstanceUID
  • SOPInstanceUID
  • TransferSyntaxUID
  • MediaStorageSOPInstanceUID
  • MediaStorageSOPClassUID
  • PixelData
  • Rows
  • Columns
  • SamplesPerPixel
  • BitsAllocated
  • BitsStored
  • Highbit
  • PhotometricInterpretation
  • PixelRepresentation
  • NumberOfFrames
  • PlanarConfiguration
  • PixelAspectRatio
  • SmallestImagePixelValue
  • LargestImagePixelValue
  • RedPaletteColorLookupTableDescriptor
  • GreenPaletteColorLookupTableDescriptor
  • BluePaletteColorLookupTableDescriptor
  • RedPaletteColorLookupTableData
  • GreenPaletteColorLookupTableData
  • BluePaletteColorLookupTableData
  • ICCProfile
  • ColorSpace
  • WindowCenter
  • WindowWidth
  • VOILUTFunction

上述某些标记的值会重新生成,这意味着这些值将通过确定性转换替换为其他值。如需了解详情,请参阅 DICOM 标准中的保留 UID 选项

StudyInstanceUIDSeriesInstanceUIDSOPInstanceUIDMediaStorageSOPInstanceUID 的值称为“主要 ID”。如需确定主 ID 的转换方式,请在 PrimaryIdsOption 中指定值。

以下示例展示了如何使用 KeepTag 对象在去标识化期间保持特定标记的值不变。由于将 PatientName 标记添加到了 queries[] 列表中,因此在去标识化过程中,PatientName 值不会被隐去。

由于示例中未指定 PrimaryIdsOption,因此 primaryIds 字段默认为 PRIMARY_IDS_OPTION_UNSPECIFIED,默认为 ProfileType 中的值。由于未指定 ProfileType,因此 profileType 字段默认为 PROFILE_TYPE_UNSPECIFIED,这会根据 Attribute 机密性基本配置文件 (DICOM Standard Edition 2018e) 移除标记。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

移除标记

以下示例展示了如何在去标识化期间使用 RemoveTag 对象移除特定标记的值。已移除的标记将被替换为空值。

在以下示例中,PatientName 标记添加到了 queries[] 列表中,因此在去标识化过程中,该标记的值被替换为空值。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                 "PatientName"
              ],
              "removeTag": {}
            }
          ]
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                 "PatientName"
              ],
              "removeTag": {}
            }
          ]
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                 "PatientName"
              ],
              "removeTag": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

删除标记

以下示例展示了如何在去标识化过程中使用 DeleteTag 对象删除特定标记。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "deleteTag": {}
            }
          ]
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "deleteTag": {}
            }
          ]
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "deleteTag": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

将代码重置为占位值

以下示例展示了如何在去标识化期间使用 ResetTag 对象将标记值设置为字符串 PLACEHOLDER

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "resetTag": {}
            }
          ]
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "resetTag": {}
            }
          ]
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "resetTag": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

    特别需要注意的是,PatientName 标记的值已设置为 PLACEHOLDER

    Original metadata运行 ResetTag 后的元数据
    
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "Ann Johnson"
        }
      ]
    }
    
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "PLACEHOLDER"
        }
      ]
    }

检查和转换代码中的敏感文本

以下示例展示了如何使用 CleanTextTag 对象检查标记,并根据 TextConfig 对象中的配置转换标记的值。

在这些示例中,Actions 对象中设置以下选项:

  • CleanTextTag 对象。
  • 包含 PatientName DICOM 标记的 queries[] 列表。

TextConfig 对象中设置以下选项:

设置这些配置后,去标识化操作会检查 PatientName 标记,将该标记与 PERSON_NAME infoType 相匹配,并将标记的值替换为 PERSON_NAME infoType。 PatientName 标记的值表示法 (VR) 为 PN,它是 CleanTextTag 对象中受支持的 VR 之一。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                "PatientName"
              ],
              "cleanTextTag": {}
            }
          ]
        },
        "text": {
          "additionalTransformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "replaceWithInfoTypeConfig": {}
            }
          ]
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                "PatientName"
              ],
              "cleanTextTag": {}
            }
          ]
        },
        "text": {
          "additionalTransformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "replaceWithInfoTypeConfig": {}
            }
          ]
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                "PatientName"
              ],
              "cleanTextTag": {}
            }
          ]
        },
        "text": {
          "additionalTransformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "replaceWithInfoTypeConfig": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

    特别需要注意的是,PatientName 标记的值已设置为 [PERSON_NAME]

    Original metadata运行 CleanTextTag 后的元数据
    
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "Ann Johnson"
        }
      ]
    }
    
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "[PERSON_NAME]"
        }
      ]
    }

将 UID 替换为生成的 UID

以下示例展示了如何使用 RegenUidTag 对象将 UID 替换为新生成的 UID。RegenUidTag 对象支持的唯一 VR 是 UI

默认情况下,示例元数据中 VR 为 UI 的每个标记都有在去标识化期间生成的 UID。为了展示如何为特定标记生成 UID,示例中设置了以下选项:

  • ProfileType 设置为 KEEP_ALL 枚举,这可防止对任何 DICOM 元数据进行去标识化处理。

  • PrimaryIdsOption 设置为 KEEP 枚举,主 ID(StudyInstanceUIDSeriesInstanceUIDSOPInstanceUIDMediaStorageSOPInstanceUID)保持不变。

设置这些选项后,样本数据中的任何主要 ID UID 都不会替换为新生成的值。不过,通过将 SOPInstanceUID 添加到 Action.queries[] 数组,您可以专门为 SOPInstanceUID 标记生成新的 UID。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "primaryIds": "KEEP"
          },
          "actions": [
            {
              "queries": [
                "00080018"
              ],
              "regenUidTag": {}
            }
          ],
          "profileType": "KEEP_ALL_PROFILE"
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "primaryIds": "KEEP"
          },
          "actions": [
            {
              "queries": [
                "00080018"
              ],
              "regenUidTag": {}
            }
          ],
          "profileType": "KEEP_ALL_PROFILE"
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "primaryIds": "KEEP"
          },
          "actions": [
            {
              "queries": [
                "00080018"
              ],
              "regenUidTag": {}
            }
          ],
          "profileType": "KEEP_ALL_PROFILE"
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的实例 UID,因为您在 Action.queries[] 数组中指定了 SOPInstanceUID 标记,所以您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了实例 UID 的变化情况:

      原始实例元数据 去标识化的实例元数据
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/2.25.70541616638819138568043293671559322355/series/1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/2.25.70541616638819138568043293671559322355/series/1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

    请注意,在主 ID 中,只有 SOPInstanceUID 具有新生成的 UID。

以递归方式对嵌套 Sequence 中的标记进行去标识化处理

以下示例展示了如何使用 RecurseTag 对象以递归方式对 Sequence 中的嵌套 DICOM 标记进行去标识化处理。RecurseTag 对象仅支持 SQ VR,即 Sequence 的 VR。

如需了解 SQ VR,请参阅 7.5 数据集嵌套

为此页面提供的 DICOM 示例实例不包含任何具有 SQ VR 的 DICOM 标记。您可以参考从 JSON 元数据和 JPEG 文件创建 DICOM 实例中的说明,完成以下步骤,以创建和存储含有包含 SQ VR 的虚构数据的 DICOM 实例。您在以下步骤中创建的 DICOM 实例使用虚构数据,仅用于说明 RecurseTag 的行为。

  1. 将以下 DICOM 元数据保存到名为 instance.json 的 JSON 文件中。元数据包含 PhysiciansReadingStudyIdentificationSequence (00081062) 标记。此标签具有 SQ VR,其中包含两个嵌套的 PersonIdentificationCodeSequence (00401101) 标签。嵌套标签还有一个 SQ VR,并且每个都包含以下嵌套标签:

    • CodeValue (00080100)
    • CodingSchemeDesignator (00080102)
    [{
      "00020010": {
        "vr": "UI",
        "Value": [
          "1.2.840.10008.1.2.4.50"
        ]
      },
      "00080005": {
        "vr": "CS",
        "Value": [
          "ISO_IR 192"
        ]
      },
      "00080016": {
        "vr": "UI",
        "Value": [
          "1111111"
        ]
      },
      "00080018": {
        "vr": "UI",
        "Value": [
          "2222222"
        ]
      },
      "0020000D": {
        "vr": "UI",
        "Value": [
          "3333333"
        ]
      },
      "0020000E": {
        "vr": "UI",
        "Value": [
          "4444444"
        ]
      },
      "00280002": {
        "vr": "US",
        "Value": [
          3
        ]
      },
      "00280004": {
        "vr": "CS",
        "Value": [
          "YBR_FULL_422"
        ]
      },
      "00280006": {
        "vr": "US",
        "Value": [
          0
        ]
      },
      "00280008": {
        "vr": "IS",
        "Value": [
          1
        ]
      },
      "00280010": {
        "vr": "US",
        "Value": [
          1024
        ]
      },
      "00280011": {
        "vr": "US",
        "Value": [
          1024
        ]
      },
      "00280100": {
        "vr": "US",
        "Value": [
          8
        ]
      },
      "00280101": {
        "vr": "US",
        "Value": [
          8
        ]
      },
      "00280102": {
        "vr": "US",
        "Value": [
          7
        ]
      },
      "00280103": {
        "vr": "US",
        "Value": [
          0
        ]
      },
      "7FE00010": {
        "vr": "OB",
        "BulkDataURI": "jpeg-image"
      },
      "00081062": {
        "vr": "SQ",
        "Value": [
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue1"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator1"
                    ]
                  }
                }
              ]
            }
          },
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue2"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator2"
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    }]
    
  2. google.jpg 文件下载到本地机器。只要元数据有效,Cloud Healthcare API DICOMweb API 就接受与 JSON 元数据配对的任何 JPEG 图片。

  3. 运行以下命令,以在图像中创建开放边界(对于 JSON 元数据)、中间图像(对于 JPEG)和闭合边界:

    echo -ne "--DICOMwebBoundary\r\nContent-Type: application/dicom+json\r\n\r\n" > opening.file
    echo -ne "\r\n--DICOMwebBoundary\r\nContent-Location: jpeg-image\r\nContent-Type: image/jpeg; transfer-syntax=1.2.840.10008.1.2.4.50\r\n\r\n" > middle.file
    echo -ne "\r\n--DICOMwebBoundary--" > closing.file
    
  4. google.jpg 图片封装在中间边界和闭合边界内。您发送到 Cloud Healthcare API 的输出文件称为 multipart-request.file

    cat opening.file instance.json middle.file google.jpg closing.file > multipart-request.file
    
  5. 存储 multipart-request.file 文件:

    REST

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DICOM_STORE_ID:源数据集内的 DICOM 存储区的 ID

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

    curl

    执行以下命令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: multipart/related; type=\"application/dicom+json\"; boundary=DICOMwebBoundary" \
    --data-binary @multipart-request.file \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID/dicomWeb/studies"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -InFile multipart-request.file `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID/dicomWeb/studies" | Select-Object -Expand Content

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

如需对存储的 DICOM 实例进行去标识化,请完成以下步骤。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID

    请求 JSON 正文:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PhysiciansReadingStudyIdentificationSequence"
              ],
              "recurseTag": {}
            }
          ]
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PhysiciansReadingStudyIdentificationSequence"
              ],
              "recurseTag": {}
            }
          ]
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PhysiciansReadingStudyIdentificationSequence"
              ],
              "recurseTag": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:

    原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 3333333 1.3.6.1.4.1.11129.5.1.222168347996079463826250565085126257314
    系列 UID (0020000E) 4444444 1.3.6.1.4.1.11129.5.1.25205702030237830896398173746777399347
    实例 UID (00080018) 2222222 1.3.6.1.4.1.11129.5.1.286710307126045768765142714621897494633
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.222168347996079463826250565085126257314/series/1.3.6.1.4.1.11129.5.1.25205702030237830896398173746777399347/instances/1.3.6.1.4.1.11129.5.1.286710307126045768765142714621897494633/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.222168347996079463826250565085126257314/series/1.3.6.1.4.1.11129.5.1.25205702030237830896398173746777399347/instances/1.3.6.1.4.1.11129.5.1.286710307126045768765142714621897494633/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与第 1 步中的原始元数据进行比较,以查看转换的效果。

    特别是,请注意嵌套的 CodeValueCodingSchemaDesignator 标记的值已设置为 PLACEHOLDER

    Original metadata运行 RecurseTag 后的元数据
    
    {
      "00081062": {
        "vr": "SQ",
        "Value": [
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue1"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator1"
                    ]
                  }
                }
              ]
            }
          },
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue2"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator2"
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    }
    
    {
      "00081062": {
        "vr": "SQ",
        "Value": [
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  }
                }
              ]
            }
          },
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    }

在 DICOM 存储区级别对数据进行去标识化处理

前面的示例展示了如何在数据集级层对 DICOM 数据进行去标识化。本部分介绍如何在 DICOM 存储区级别对数据进行去标识化处理。

如需将数据集去标识化请求更改为 DICOM 存储区去标识化请求,请进行以下更改:

  • 将请求正文中的 destinationDataset 替换为 destinationStore
  • 在指定目标位置时,在 destinationStore 中的值末尾添加 dicomStores/DESTINATION_DICOM_STORE_ID
  • 在指定源数据所在的位置时添加 dicomStores/SOURCE_DICOM_STORE_ID

以下示例展示了数据集级去标识化请求以及如何修改 DICOM 存储区级去标识化请求:

数据集级层去标识化

"destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID"
...
"https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

DICOM 存储区级层去标识化

"destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID"
...
"https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

以下示例展示了如何对 DICOM 存储区中的 DICOM 实例进行去标识化处理,并将去标识化的数据写入新的 DICOM 存储区。 在运行示例之前,目标 DICOM 存储区 ID 必须已存在。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID。在运行去标识化操作之前必须已存在。
    • DESTINATION_DICOM_STORE_ID:目标数据集中的 DICOM 存储区。在运行去标识化操作之前必须已存在。

    请求 JSON 正文:

    {
      "destinationStore": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationStore": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationStore": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。如果方法调用可能需要更多时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。在下一步中,您需要使用此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

对 DICOM 存储区的子集进行去标识化处理

通过指定过滤条件,您可以对 DICOM 存储区中的部分数据进行去标识化。

过滤条件采用过滤条件文件的形式,您可以指定它作为 DicomFilterConfig 对象中 resourcePathsGcsUri 字段的值。Cloud Storage 存储桶中必须已存在过滤条件文件;您不能指定本地计算机或任何其他来源上存在的过滤条件文件。文件的位置必须采用 gs://BUCKET/PATH/TO/FILE 格式。

创建过滤器文件

过滤条件文件定义要将哪些 DICOM 文件进行去标识化。您可以在以下级别过滤文件:

  • 在研究级别
  • 在系列级别
  • 在实例级别

在过滤条件文件中,您要进行去标识化的每个研究、系列或实例分别对应一行内容。每行都使用 /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]] 格式。每行末尾有一个换行符:\n\r\n

如果您在调用去标识化操作时传入的过滤器文件中未指定某个研究、系列或实例,则该研究、系列或实例将不会进行去标识化处理,并且不会出现在目标 DICOM 存储区中。

只需要提供路径的 /studies/STUDY_UID 部分。这意味着您可以通过指定 /studies/STUDY_UID 对研究进行去标识化,也可以通过指定 /studies/STUDY_UID/series/SERIES_UID 对系列进行去标识化。

请考虑以下过滤条件文件。过滤条件文件会导致一项研究、两个系列和三个单独的实例进行去标识化:

/studies/1.123.456.789
/studies/1.666.333.111/series/123.456\n
/studies/1.666.333.111/series/567.890\n
/studies/1.888.999.222/series/123.456/instances/111\n
/studies/1.888.999.222/series/123.456/instances/222\n
/studies/1.888.999.222/series/123.456/instances/333\n

使用 BigQuery 创建过滤条件文件

要创建过滤条件文件,您通常需要先将 DICOM 存储区中的元数据导出到 BigQuery。这样,您就可以使用 BigQuery 来查看 DICOM 存储区中 DICOM 数据的研究、系列和实例 UID。然后,您可以执行以下操作:

  1. 查询您感兴趣的研究、系列和实例 UID。例如,将元数据导出到 BigQuery 后,您可以运行以下查询,将研究、系列和实例 UID 串接为符合过滤条件文件要求的格式:

    SELECT CONCAT
      ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
      [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. 如果查询返回大型结果集,您可以通过将查询结果保存到 BigQuery 中的目标表将新表具体化。

  3. 将查询结果保存到目标表后,您可以将目标表的内容保存到文件中,并将文件导出到 Cloud Storage。如需了解如何执行此操作,请参阅导出表数据。导出的文件就是您的过滤条件文件。在导出操作中指定过滤条件时,您将使用 Cloud Storage 中的过滤条件文件所在的位置。

手动创建过滤条件文件

您可以创建包含自定义内容的过滤条件文件,然后将其上传到 Cloud Storage 存储桶。在去标识化操作中指定过滤条件时,您将使用 Cloud Storage 中的过滤条件文件所在的位置。以下示例展示了如何使用 gsutil cp 命令将过滤条件文件上传到 Cloud Storage 存储桶:

gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

例如:

gsutil cp /home/user/Desktop/filters.txt gs://my-bucket/my-directory

使用过滤器

配置过滤条件文件后,您可以将其作为值传递到 filterConfig 对象中的 resourcePathsGcsUri 字段。

以下示例扩展了在 DICOM 存储区级别对数据进行去标识化处理,但还提供了 Cloud Storage 中的过滤器文件来确定对哪些 DICOM 资源进行去标识化处理。

REST

  1. 对数据集进行去标识化处理。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DICOM_STORE_ID:包含要去标识化的数据的 DICOM 存储区的 ID
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID
    • BUCKET/PATH/TO/FILE:过滤条件文件在 Cloud Storage 存储桶中的位置

    请求 JSON 正文:

    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      },
      "filterConfig": {
        "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE"
      }
    }
    

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

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      },
      "filterConfig": {
        "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE"
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      },
      "filterConfig": {
        "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 REST 请求:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify" | Select-Object -Expand Content
    输出如下所示。响应中包含长时间运行的操作的标识符。如果方法调用可能需要大量时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。下一步中需要用到此值。

  2. 使用 projects.locations.datasets.operations.get 方法可获取长时间运行的操作的状态。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • SOURCE_DATASET_ID:包含要去标识化的数据的数据集的 ID
    • OPERATION_ID:从长时间运行的操作返回的 ID

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

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

    输出如下所示。如果响应包含 "done": true,则表示长时间运行的操作已完成。

  3. 去标识化成功后,您可以检索去标识化实例的元数据,以查看其更改情况。去标识化实例具有新的研究 UID、系列 UID 和实例 UID,因此您首先需要在新数据集中搜索去标识化实例。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

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

    下表显示了研究 UID、系列 UID 和实例 UID 的变化方式:
      原始实例元数据 去标识化的实例元数据
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    实例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值检索实例的元数据。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • DESTINATION_DATASET_ID:写入去标识化数据的目标数据集的 ID
    • SOURCE_DATASET_LOCATION:源数据集位置
    • DESTINATION_DICOM_STORE_ID:目标数据集中 DICOM 存储区的 ID。这与源数据集中 DICOM 存储区的 ID 相同。

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

    curl

    执行以下命令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API Explorer

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

    输出包含新的元数据。您可以将新元数据与原始元数据进行比较,以了解转换的效果。

排查 DICOM 去标识化操作问题

如果在执行 DICOM 去标识化操作期间发生错误,系统会将错误记录到 Cloud Logging。如需了解详情,请参阅在 Cloud Logging 中查看错误日志

如果整个操作返回错误,请参阅排查长时间运行的操作问题