DICOM データの匿名化

このページでは、次のレベルで Cloud Healthcare API を使用して DICOM インスタンス内の機密データを匿名化する方法について説明します。

また、このページでは、DICOM ストアレベルでデータを匿名化するときにフィルタを適用する方法についても説明します。

匿名化の概要

データセット レベルの匿名化

データセット レベルで DICOM データを匿名化するには、datasets.deidentify オペレーションを呼び出します。匿名化 API 呼び出しには次のコンポーネントがあります。

  • ソース データセット: 機密データがある 1 つ以上のインスタンスを持つ DICOM ストアを含むデータセット。deidentify オペレーションを呼び出すと、データセットにあるすべての DICOM ストア内のすべてのインスタンスが匿名化されます。
  • 匿名化の対象: データセットの処理方法を指定する構成パラメータ。DICOM インスタンスのメタデータ(タグキーワードを使用)または DICOM 画像内の焼き付きテキストを匿名化するように DICOM 匿名化を構成できます。
  • 宛先データセット: 匿名化は元のデータセットまたはそのデータに影響しません。代わりに、元のデータの匿名化されたコピーは、新しいデータセット(宛先データセット)に書き込まれます。

このガイドのサンプルの大半は、データセット レベルで DICOM データを匿名化する方法を示しています。

DICOM ストアレベルの匿名化

DICOM ストアレベルで DICOM データを匿名化すると、匿名化されるデータをより詳細に制御できます。たとえば、複数の DICOM ストアを含むデータセットがある場合に、ストアに含まれるデータの種類に応じて、各 DICOM ストアを匿名化できます。

DICOM ストア内の DICOM データを匿名化するには、dicomStores.deidentify メソッドを呼び出します。匿名化 API 呼び出しには次のコンポーネントがあります。

  • ソース DICOM ストア: 機密データを持つ 1 つ以上のインスタンスを含む DICOM ストア。deidentify オペレーションを呼び出すと、DICOM ストア内のすべてのインスタンスが匿名化されます。
  • 匿名化の対象: DICOM ストアの処理方法を指定する構成パラメータ。DICOM インスタンスのメタデータ(タグキーワードを使用)または DICOM 画像内の焼き付きテキストを匿名化するように DICOM 匿名化を構成できます。
  • 転送先の DICOM ストア: 匿名化が元の DICOM ストアまたはそのデータに影響を与えることはありません。代わりに、元のデータの匿名化されたコピーが宛先の DICOM ストアに書き込まれます。宛先 DICOM ストアはすでに存在している必要があります。

DICOM ストアレベルで DICOM データを匿名化する方法の例については、DICOM ストアレベルでのデータの匿名化をご覧ください。

フィルタ

フィルタ ファイルを構成し、dicomStores.deidentify リクエストでファイルを指定することで、DICOM ストアのデータのサブセットを匿名化できます。例については、DICOM ストアのサブセットの匿名化をご覧ください。

サンプルの概要

このガイドのサンプルでは、単一の DICOM インスタンスを使用しますが、複数のインスタンスを匿名化することもできます。

以下の各セクションでは、DICOM データを匿名化するさまざまな方法について、例を示しています。また、それぞれの例で匿名化された出力画像を示しています。各例では、入力として以下の元画像を使用しています。

xray_original

各匿名化オペレーションからの出力イメージをこの元のイメージと比較して、オペレーションの効果を確認できます。

DICOM タグの匿名化

DICOM メタデータのタグキーワードに基づいて、DICOM インスタンスを匿名化できます。DicomConfig オブジェクトでは、次のタグ フィルタリング メソッドを使用できます。

  • keepList: 保持するタグのリスト。その他のすべてのタグは削除されます。
  • removeList: 削除するタグのリスト。その他のすべてのタグは保持します。
  • filterProfile: 保持または削除するタグを決定するために使用されるタグ フィルタリング プロファイル。

このセクションの各例では、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"]}
  }
]

keeplist タグを使用した匿名化

DicomConfig オブジェクトに keeplist タグを指定すると、デフォルトで次のタグが追加されます。

  • 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

deidentify オペレーションでは、上記のタグは削除されません。ただし、一部のタグの値は再生成されます。つまり、値は確定的変換によって別の値に置き換えられます。詳細については、DICOM 規格の UID オプションの保持をご覧ください。上記のタグの元の値を保持するには、SkipIdRedaction オプションを使用します。

keeplist タグを指定しない場合、データセット内の DICOM タグは削除されません。

以下のサンプルは、DICOM ストアと DICOM データを含むデータセットを匿名化し、一部のタグは変更しない方法を示しています。

Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。画像の上部隅に表示されているメタデータは削除されていますが、画像の下部にある焼き付き保護対象保健情報(PHI)は残ります。焼き付きテキストも削除するには、画像の焼き付きテキストを削除するをご覧ください。

dicom_keeplist

curl

keeplist タグを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、保持するデータの一連の keeplist タグ、アクセス トークンを指定します。次のサンプルは、curl を使用して POST リクエストを行う方法を示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'keepList': {
            'tags': [
              'PatientID'
            ]
          }
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS"},
    "00080070":{"vr":"LO"},
    "00080090":{"vr":"PN"},
    "00081090":{"vr":"LO"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"},
    "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"},
    "00282114":{"vr":"CS"}
  }
]

PowerShell

keeplist タグを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、保持するデータの一連の keeplist タグ、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用して POST リクエストを行う方法を示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'keepList': {
          'tags': [
            'PatientID'
          ]
        }
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS"},
    "00080070":{"vr":"LO"},
    "00080090":{"vr":"PN"},
    "00081090":{"vr":"LO"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"},
    "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"},
    "00282114":{"vr":"CS"}
  }
]

Go

import (
	"context"
	"fmt"
	"io"
	"time"

	healthcare "google.golang.org/api/healthcare/v1"
)

// deidentifyDataset creates a new dataset containing de-identified data from the source dataset.
func deidentifyDataset(w io.Writer, projectID, location, sourceDatasetID, destinationDatasetID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %v", err)
	}

	datasetsService := healthcareService.Projects.Locations.Datasets

	parent := fmt.Sprintf("projects/%s/locations/%s", projectID, location)

	req := &healthcare.DeidentifyDatasetRequest{
		DestinationDataset: fmt.Sprintf("%s/datasets/%s", parent, destinationDatasetID),
		Config: &healthcare.DeidentifyConfig{
			Dicom: &healthcare.DicomConfig{
				KeepList: &healthcare.TagFilterList{
					Tags: []string{
						"PatientID",
					},
				},
			},
		},
	}

	sourceName := fmt.Sprintf("%s/datasets/%s", parent, sourceDatasetID)
	resp, err := datasetsService.Deidentify(sourceName, req).Do()
	if err != nil {
		return fmt.Errorf("Deidentify: %v", err)
	}

	// Wait for the deidentification operation to finish.
	operationService := healthcareService.Projects.Locations.Datasets.Operations
	for {
		op, err := operationService.Get(resp.Name).Do()
		if err != nil {
			return fmt.Errorf("operationService.Get: %v", err)
		}
		if !op.Done {
			time.Sleep(1 * time.Second)
			continue
		}
		if op.Error != nil {
			return fmt.Errorf("deidentify operation error: %v", *op.Error)
		}
		fmt.Fprintf(w, "Created de-identified dataset %s from %s\n", resp.Name, sourceName)
		return nil
	}
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.DeidentifyConfig;
import com.google.api.services.healthcare.v1.model.DeidentifyDatasetRequest;
import com.google.api.services.healthcare.v1.model.DicomConfig;
import com.google.api.services.healthcare.v1.model.Operation;
import com.google.api.services.healthcare.v1.model.TagFilterList;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;

public class DatasetDeIdentify {
  private static final String DATASET_NAME = "projects/%s/locations/%s/datasets/%s";
  private static final JsonFactory JSON_FACTORY = new JacksonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void datasetDeIdentify(String srcDatasetName, String destDatasetName)
      throws IOException {
    // String srcDatasetName =
    //     String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-src-dataset-id");
    // String destDatasetName =
    //    String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-dest-dataset-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure what information needs to be De-Identified.
    // For more information on de-identifying using tags, please see the following:
    // https://cloud.google.com/healthcare/docs/how-tos/dicom-deidentify#de-identification_using_tags
    TagFilterList tags = new TagFilterList().setTags(Arrays.asList("PatientID"));
    DicomConfig dicomConfig = new DicomConfig().setKeepList(tags);
    DeidentifyConfig config = new DeidentifyConfig().setDicom(dicomConfig);

    // Create the de-identify request and configure any parameters.
    DeidentifyDatasetRequest deidentifyRequest =
        new DeidentifyDatasetRequest().setDestinationDataset(destDatasetName).setConfig(config);
    Datasets.Deidentify request =
        client.projects().locations().datasets().deidentify(srcDatasetName, deidentifyRequest);

    // Execute the request, wait for the operation to complete, and process the results.
    try {
      Operation operation = request.execute();
      while (operation.getDone() == null || !operation.getDone()) {
        // Update the status of the operation with another request.
        Thread.sleep(500); // Pause for 500ms between requests.
        operation =
            client
                .projects()
                .locations()
                .datasets()
                .operations()
                .get(operation.getName())
                .execute();
      }
      System.out.println(
          "De-identified Dataset created. Response content: " + operation.getResponse());
    } catch (Exception ex) {
      System.out.printf("Error during request execution: %s", ex.toString());
      ex.printStackTrace(System.out);
    }
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

const {google} = require('googleapis');
const healthcare = google.healthcare('v1');

const deidentifyDataset = async () => {
  const auth = await google.auth.getClient({
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  });
  google.options({auth});

  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const sourceDatasetId = 'my-source-dataset';
  // const destinationDatasetId = 'my-destination-dataset';
  // const keeplistTags = 'PatientID'
  const sourceDataset = `projects/${projectId}/locations/${cloudRegion}/datasets/${sourceDatasetId}`;
  const destinationDataset = `projects/${projectId}/locations/${cloudRegion}/datasets/${destinationDatasetId}`;
  const request = {
    sourceDataset: sourceDataset,
    destinationDataset: destinationDataset,
    resource: {
      config: {
        dicom: {
          keepList: {
            tags: [keeplistTags],
          },
        },
      },
    },
  };

  await healthcare.projects.locations.datasets.deidentify(request);
  console.log(
    `De-identified data written from dataset ${sourceDatasetId} to dataset ${destinationDatasetId}`
  );
};

deidentifyDataset();

Python

def deidentify_dataset(
        project_id,
        cloud_region,
        dataset_id,
        destination_dataset_id,
        keeplist_tags):
    """Creates a new dataset containing de-identified data
    from the source dataset.
    """
    client = get_client()
    source_dataset = 'projects/{}/locations/{}/datasets/{}'.format(
        project_id, cloud_region, dataset_id)
    destination_dataset = 'projects/{}/locations/{}/datasets/{}'.format(
        project_id, cloud_region, destination_dataset_id)

    body = {
        'destinationDataset': destination_dataset,
        'config': {
            'dicom': {
                'keepList': {
                    'tags': [
                        'Columns',
                        'NumberOfFrames',
                        'PixelRepresentation',
                        'MediaStorageSOPClassUID',
                        'MediaStorageSOPInstanceUID',
                        'Rows',
                        'SamplesPerPixel',
                        'BitsAllocated',
                        'HighBit',
                        'PhotometricInterpretation',
                        'BitsStored',
                        'PatientID',
                        'TransferSyntaxUID',
                        'SOPInstanceUID',
                        'StudyInstanceUID',
                        'SeriesInstanceUID',
                        'PixelData'
                    ]
                }
            }
        }
    }

    request = client.projects().locations().datasets().deidentify(
        sourceDataset=source_dataset, body=body)

    response = request.execute()
    print(
        'Data in dataset {} de-identified.'
        'De-identified data written to {}'.format(
            dataset_id,
            destination_dataset_id))
    return response

removelist タグを使用した匿名化

DicomConfig オブジェクトに removelist を指定できます。deidentify オペレーションでは、リストに指定されたタグのみが削除されます。removelist タグを指定しない場合、匿名化オペレーションは通常どおりに行われますが、宛先データセット内の DICOM タグは削除されません。

removelist を指定すると、オーバーレイ データに PHI が含まれる可能性があるため、デフォルトで OverlayData タグが追加されます。

デフォルトで keeplist に追加されるタグは、removelist には追加できません。

次のサンプルは、removelist 内のすべてのタグを削除して、DICOM ストアと DICOM データを含むデータセットを匿名化する方法を示しています。removelist 内にないタグは変更されません。

Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。removelist に含まれるタグのうち、PatientBirthDate のみが画像から削除されます。これは、画像に表示されるメタデータに対応する removelist からの唯一のタグのためです。

画像の上部隅にある PatientBirthDate は、removelist の構成に従って削除されていますが、画像の下部の焼き付き PHI は残ります。焼き付きテキストも削除するには、画像の焼き付きテキストを削除するをご覧ください。

dicom_removelist

curl

removelist タグを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、削除するデータの一連の removelist タグ、アクセス トークンを指定します。次のサンプルは、curl を使用して POST リクエストを行う方法を示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'removeList': {
            'tags': [
              'PatientBirthName',
              'PatientBirthDate',
              'PatientAge',
              'PatientSize',
              'PatientWeight',
              'PatientAddress',
              'PatientMotherBirthName'
            ]
          }
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "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"},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

removelist タグを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、削除するデータの一連の removelist タグ、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用して POST リクエストを行う方法を示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'removeList': {
          'tags': [
            'PatientBirthName',
            'PatientBirthDate',
            'PatientAge',
            'PatientSize',
            'PatientWeight',
            'PatientAddress',
            'PatientMotherBirthName'
          ]
        }
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "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"},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

タグフィルタ プロファイルを使用した匿名化

保持または削除するタグを指定する代わりに、DicomConfig オブジェクトで TagFilterProfile を構成できます。タグフィルタ プロファイルは、保持、削除、または変換するタグを決定する事前定義済みのプロファイルです。使用可能なプロファイルについては、TagFilterProfile のドキュメントをご覧ください。

以下のサンプルは、タグ フィルタ プロファイル ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE を使用して、DICOM ストアと DICOM データが含まれるデータセットを匿名化する方法を示しています。このタグ フィルタ プロファイルでは、DICOM 規格の属性の機密性に関する基本的なプロファイルに基づいてタグが削除されます。Cloud Healthcare API は、属性の機密性に関する基本的なプロファイルに完全には準拠していません。たとえば、Cloud Healthcare API では、タグのアクションを選択するときに Information Object Definition(IOD)の制限が確認されません。

ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE タグフィルタ プロファイルを使用して画像を Cloud Healthcare API に送信すると、画像は次のように表示されます。画像の上隅に表示されているメタデータは削除されていますが、画像の下部の焼き付き PHI は残ります。焼き付きテキストも削除するには、画像の焼き付きテキストを削除するをご覧ください。

dicom_attribute_confidentiality_basic_profile

curl

タグフィルタ プロファイルを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、削除するデータのタグフィルタ プロファイル、アクセス トークンを指定します。次のサンプルは、curl を使用して POST リクエストを行う方法を示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufactuer"]},
    "00080090":{"vr":"PN"},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO"},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

タグフィルタ プロファイルを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、削除するデータのタグフィルタ プロファイル、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用して POST リクエストを行う方法を示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE'
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufactuer"]},
    "00080090":{"vr":"PN"},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO"},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

Cloud Console でのデータの匿名化

Cloud Console でデータを匿名化するには、次の手順を実行します。

  1. Cloud Console で、[データセット] ページに移動します。

    [データセット] ページに移動

  2. 匿名化するデータセットの [アクション] リストから [匿名化] を選択します。

    [データセットの匿名化] ページが表示されます。

  3. [宛先データセットの設定]を選択し、匿名化されたデータを保存する新しいデータセットの名前を入力します。

  4. [DICOM タグの匿名化] を選択して、データが匿名化されるプロファイルを選択します。データは以下のように匿名化できます。

  5. [DICOM 焼き付けテキストの秘匿化] を選択して、匿名化中の画像の秘匿化方法を構成します。画像の秘匿化は次のように構成できます。

  6. [匿名化] をクリックして、データセット内のデータを匿名化します。

画像内の焼き付きテキストを秘匿化する

Cloud Healthcare API では、焼き付き機密テキストを画像内で秘匿化できます。PHI などの機密データは API によって検出され、不透明な長方形で覆い隠されます。API は指定された DICOM 画像を同じ形式で返しますが、機密情報が含まれるとみなされたテキストは条件に従って秘匿化されます。

ImageConfig オブジェクト内の TextRedactionMode オプションを指定することで、画像の焼き付きテキストを秘匿化できます。有効な値については、TextRedactionMode のドキュメントをご覧ください。

画像の焼き付きテキストをすべて秘匿化する

次のサンプルは、データセット内の DICOM 画像にある、すべての焼き付きテキストを秘匿化する方法を示しています。そのためには、TextRedactionMode フィールドに REDACT_ALL_TEXT を指定します。

REDACT_ALL_TEXT オプションを使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。画像の下部にある焼き付きテキストは削除されましたが、画像の上端にあるメタデータは残ります。メタデータも削除するには、DICOM タグの匿名化をご覧ください。

xray_redact_all_text

curl

DICOM 画像にある焼き付きテキストをすべて秘匿化するには、POST リクエストを行い、宛先データセットの名前、空の dicom フィールドを持つ DeidentifyConfig オブジェクト、REDACT_ALL_TEXT に設定された image.text_redaction_mode、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {},
        'image': {
          'textRedactionMode': 'REDACT_ALL_TEXT'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

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

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

DICOM 画像にある焼き付きテキストをすべて秘匿化するには、POST リクエストを行い、宛先データセットの名前、空の dicom フィールドを持つ DeidentifyConfig オブジェクト、REDACT_ALL_TEXT に設定された image.text_redaction_mode、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {},
      'image': {
        'textRedactionMode': 'REDACT_ALL_TEXT'
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

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

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

匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}

画像にある焼き付き機密テキストのみを秘匿化する

次のサンプルは、データセット内の DICOM 画像にある焼き付き機密テキストを秘匿化する方法を示しています。そのためには、TextRedactionMode フィールドに REDACT_SENSITIVE_TEXT を指定します。

REDACT_SENSITIVE_TEXT を指定すると、デフォルトの DICOM infoTypes で指定された infoType が秘匿化されます。カルテ番号(MRN)などの患者 ID の追加のカスタム infoType も適用され、患者 ID が秘匿化されます。

次の画像は、患者の X 線を秘匿化していない状態を示しています。

xray2_unredacted

REDACT_SENSITIVE_TEXT オプションを使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。

xray2_redact_sensitive_text

次のことを確認できます。

  • 画像の左下にある PERSON_NAME が秘匿化された
  • 画像の左下にある DATE が秘匿化された

患者の性別は、デフォルトの DICOM infoTypes に従って機密テキストと見なされないため、秘匿化されませんでした。

curl

DICOM 画像にある焼き付き機密テキストを秘匿化するには、POST リクエストを行い、宛先データセットの名前、空の dicom フィールドを持つ DeidentifyConfig オブジェクト、REDACT_SENSITIVE_TEXT に設定された image.text_redaction_mode、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {},
        'image': {
          'textRedactionMode': 'REDACT_SENSITIVE_TEXT'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

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

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

DICOM 画像にある焼き付き機密テキストを秘匿化するには、POST リクエストを行い、宛先データセットの名前、空の dicom フィールドを持つ DeidentifyConfig オブジェクト、REDACT_SENSITIVE_TEXT に設定された image.text_redaction_mode、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {},
      'image': {
        'textRedactionMode': 'REDACT_SENSITIVE_TEXT'
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

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

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

匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}

タグの匿名化と焼き付きテキストの秘匿化の組み合わせ

タグを使用した匿名化と画像の焼き付きテキストの秘匿化を組み合わせて、より詳細なレベルで DICOM インスタンスを匿名化できます。たとえば、TextRedactionMode フィールドの REDACT_ALL_TEXTTagFilterProfile フィールドの DEIDENTIFY_TAG_CONTENTS を組み合わせると、次のことができます。

  • REDACT_ALL_TEXT: 画像内の焼き付きテキストをすべて秘匿化する。
  • DEIDENTIFY_TAG_CONTENTS: タグの内容を検査し、機密テキストを変換する。DEIDENTIFY_TAG_CONTENTS の動作の詳細については、デフォルト構成をご覧ください。

REDACT_ALL_TEXT オプションと DEIDENTIFY_TAG_CONTENTS オプションを使用して Cloud Healthcare API に画像を送信すると、画像は次のようになります。次の変更を確認します。

  • 画像の左上隅と右上隅の名前は、CryptoHashConfig を使用して変換されている
  • 画像の左上隅と右上隅の日付は、DateShiftConfig を使用して変換されている
  • 画像の下部にある焼き付きテキストが秘匿化されている

xray_redact_all_text_deidentify_tag_contents

curl

DICOM 画像にある焼き付きテキストをすべて秘匿化し、機密テキストを変換するには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profileREDACT_ALL_TEXT に設定された image.text_redaction_mode、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
        },
        'image': {
          'textRedactionMode': 'REDACT_ALL_TEXT'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["20110728"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"vTbECsOCTSOejDB1nAoHuGAn2tGaqXY4OJP6uZLPWMc"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"4LuwWK6k3Z/K/Ity4whf6YHYrm9an103tWL1EnCGwIk"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880630"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

DICOM 画像にある焼き付きテキストをすべて秘匿化し、機密テキストを変換するには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profileREDACT_ALL_TEXT に設定された image.text_redaction_mode、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
      },
      'image': {
        'textRedactionMode': 'REDACT_ALL_TEXT'
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["20110728"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"vTbECsOCTSOejDB1nAoHuGAn2tGaqXY4OJP6uZLPWMc"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"4LuwWK6k3Z/K/Ity4whf6YHYrm9an103tWL1EnCGwIk"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880630"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

DICOM タグでの infoType とプリミティブ変換の使用

Cloud Healthcare API では、情報タイプ(infoType)を使用して、タグの匿名化を実行するときにスキャンするデータを定義できます。infoType は、患者の名前、メールアドレス、電話番号、識別番号、クレジット カード番号などの機密データのタイプです。

プリミティブ変換は、入力値の変換に使用するルールです。各タグの infoType にプリミティブ変換を適用することで、DICOM タグをどのように匿名化するかをカスタムできます。たとえば、LAST_NAME infoType を CharacterMaskConfig プリミティブ変換で指定することで、患者の姓を匿名化し、アスタリスクの羅列に置き換えることができます。

デフォルトの DICOM infoType

メタデータの匿名化時に使用されるデフォルトの DICOM infoTypes は次のとおりです。

  • AGE
  • CREDIT_CARD_NUMBER
  • DATE
  • EMAIL_ADDRESS
  • IP_ADDRESS
  • LOCATION
  • MAC_ADDRESS
  • PASSPORT
  • PERSON_NAME
  • PHONE_NUMBER
  • SWIFT_CODE
  • US_DRIVERS_LICENSE_NUMBER
  • US_SOCIAL_SECURITY_NUMBER
  • US_VEHICLE_IDENTIFICATION_NUMBER
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER

REDACT_SENSITIVE_TEXT を使用して画像内の機密テキストを匿名化すると、Cloud Healthcare API は上記の infoType を使用しますが、カルテ番号(MRN)などの患者 ID の追加のカスタム infoType も画像内の機密テキストに適用されます。

プリミティブ変換オプション

Cloud Healthcare API のプリミティブ変換オプションは次のとおりです。

  • RedactConfig: 値を削除します。
  • CharacterMaskConfig: 指定された固定文字で入力文字を置換し、文字列全体または一部をマスキングします。
  • DateShiftConfig: コンテキストの一貫性を維持しながら、任意の日数で日付をシフトします。
  • CryptoHashConfig: SHA-256 を使用して入力値を、指定したデータ暗号鍵で生成されたハッシュ出力文字列の Base64 エンコード表現に置き換えます。
  • ReplaceWithInfoTypeConfig: infoType の名前で入力値を置換します。

TextConfig での構成の指定

InfoType とプリミティブ変換は、TextConfig 内のオブジェクトである InfoTypeTransformation 内で指定されます。InfoType はカンマ区切り値として infoTypes 配列に入力されます。

infoType の指定は省略できます。infoType を 1 つも指定しない場合、変換は Cloud Healthcare API にあるデフォルトの DICOM infoType に適用されます。

InfoTypeTransformation で infoType を指定する場合は、少なくとも 1 つのプリミティブ変換を指定する必要があります。

InfoTypeTransformationDEIDENTIFY_TAG_CONTENTS プロファイルにのみ適用できます。InfoTypeTransformation は、TagFilterProfile にリストされている他のプロファイルには適用できません。

以下のセクションでは、InfoTypeTransformation で利用できるプリミティブ変換と、infoType を使用して DICOM タグの匿名化方法をカスタマイズする方法を示します。サンプルでは、サンプルの概要で提供されているサンプル画像と、DICOM タグの匿名化で提供されているサンプル メタデータを使用します。

デフォルト構成

デフォルトでは、TextConfig オブジェクトに構成を指定せずに DEIDENTIFY_TAG_CONTENTS プロファイルを設定すると、Cloud Healthcare API はデフォルトの DICOM infoTypes を使用して機密データを置き換えます。ただし、以下に示すように、DATEPERSON_NAME infoType の動作は異なります。

  • DateShiftConfig は、DATE infoType として分類されるテキストに適用されます。DateShiftConfig では、日付シフト手法で 100 日間の差分を使用します。
  • CryptoHashConfig は、PERSON_NAME infoType として分類されるテキストに適用されます。CryptoHashConfig は、暗号ハッシュを使用してサロゲート値を生成することによってトークン化を実行します。

次の動作も適用されます。

  • 90歳 以上の患者の年齢は 90 に変換されます。
  • DICOM 形式の制限により変換を適用できない場合は、タグの値表現(VR)に対応するプレースホルダの値が指定されます。
  • Cloud Healthcare API のデフォルトの DICOM infoType のいずれかに対応するその他の値は、infoType に置き換えられます。たとえば、PatientComments タグに文字列「Ann Johnson went to Anytown Hospital,」が含まれる場合、「Anytown」は LOCATION infoType に置き換えられます。

次のサンプルは、DICOM ストアと DICOM データが含まれるデータセットで DEIDENTIFY_TAG_CONTENTS デフォルト プロファイルを使用した場合の出力を示しています。このデフォルト出力と、infoType を組み合わせてさまざまなプリミティブ変換を使用する場合の出力を比較できます。このサンプルでは、単一の DICOM インスタンスを使用しますが、複数のインスタンスを匿名化することもできます。

DEIDENTIFY_TAG_CONTENTS プロファイルを使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。次の変更を確認します。

  • 画像の左上隅と右上隅の名前は、CryptoHashConfig を使用して変換されている
  • 画像の左上隅と右上隅の日付は、DateShiftConfig を使用して変換されている

dicom_infotype_default

curl

infoType または、指定されたプリミティブ変換を持たないデフォルトの DEIDENTIFY_TAG_CONTENTS プロファイルを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profile、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["20111006"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"pzv2lYqFu6wap3PXXi0y3c6VcjAsWQY/TcW0AjanOY4"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"uGSY8u8934To+NRbmD6HtthMxgQ91rCK6UqIYeO0UkA"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880908"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

infoType または、指定されたプリミティブ変換を持たないデフォルトの DEIDENTIFY_TAG_CONTENTS プロファイルを使用して DICOM データを含むデータセットを匿名化するには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profile、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["20111006"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"pzv2lYqFu6wap3PXXi0y3c6VcjAsWQY/TcW0AjanOY4"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"uGSY8u8934To+NRbmD6HtthMxgQ91rCK6UqIYeO0UkA"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880908"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

RedactConfig

redactConfig を指定すると、値が完全に削除されます。redactConfig メッセージに引数はありません。指定すると、変換が有効になります。

次のサンプルは、デフォルトの構成を拡張したものですが、redactConfig 変換で PERSON_NAME infoType が設定されています。このリクエストを送信すると、DICOM インスタンスからすべての名前が削除されます。

redactConfig 変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。

dicom_redactconfig

curl

DICOM データを含むデータセットを匿名化し、名前を完全に削除するには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profilePERSON_NAME に設定された transformations.infoTypes、空の値に設定された transformations.redactConfig、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
        },
        'text': {
          'transformations': [
            {
              'infoTypes': [
                'PERSON_NAME'
              ],
              'redactConfig': {}
            }
          ]
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "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"},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880812"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

DICOM データを含むデータセットを匿名化し、名前を完全に削除するには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profilePERSON_NAME に設定された transformations.infoTypes、空の値に設定された transformations.redactConfig、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
      },
      'text': {
        'transformations': [
          {
            'infoTypes': [
              'PERSON_NAME'
            ],
            'redactConfig': {}
          }
        ]
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "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"},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880812"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

出力から、ReferringPhysicianName00080090)と PatientName00100010)の値が削除されていることがわかります。これは、これらの値が暗号ハッシュを使用して変換されたデフォルト構成のサンプルとは対照的です。

CharacterMaskConfig

characterMaskConfig を指定すると、指定された infoType に対応する文字列が指定の固定文字に置き換えられます。たとえば、患者の名前を削除したり、暗号ハッシュを使用して変換する代わりに、名前をアスタリスク(*)の羅列に置き換えることができます。maskingCharacter フィールドへの値として固定文字を指定できます。

次のサンプルは、デフォルトの構成を拡張したものですが、characterMaskConfig 変換で LAST_NAME infoType が設定されています。固定文字が指定されていないため、マスキングではデフォルトでアスタリスクが使用されます。

このサンプルでは、単一の DICOM インスタンスを使用しますが、複数のインスタンスを匿名化することもできます。

characterMaskConfig 変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。

dicom_charactermaskconfig

curl

DICOM データを含むデータセットを匿名化し、姓をアスタリスク文字に置き換えるには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profileLAST_NAME に設定された transformations.infoTypes、空の値に設定された transformations.characterMaskConfig、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
        },
        'text': {
          'transformations': [
            {
              'infoTypes': [
                'LAST_NAME'
              ],
              'characterMaskConfig': {
                'maskingCharacter': ''
              }
            }
          ]
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "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 ***"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"Ann *******"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880812"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

DICOM データを含むデータセットを匿名化し、姓をアスタリスク文字に置き換えるには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profileLAST_NAME に設定された transformations.infoTypes、空の値に設定された transformations.characterMaskConfig、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
      },
      'text': {
        'transformations': [
          {
            'infoTypes': [
              'LAST_NAME'
            ],
            'characterMaskConfig': {
              'maskingCharacter': ''
            }
          }
        ]
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "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 ***"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"Ann *******"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19880812"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

出力から、ReferringPhysicianName00080090)と PatientName00100010)の姓がアスタリスクに置き換えられていることがわかります。これは、これらの値が暗号ハッシュを使用して変換されたデフォルト構成のサンプルとは対照的です。

DateShiftConfig

Cloud Healthcare API では、事前設定された範囲内でシフトすることで日付を変換できます。匿名化の実行間で日付変換の一貫性を維持するには、DateShiftConfig を使用して AES 128/192/256 ビットの Base 64 エンコード鍵を指定します。Cloud Healthcare API は、この鍵を使用して、患者の生年月日などの日付が 100 日間の差分内でシフトする量を計算します。

鍵を指定しない場合、日付値で匿名化オペレーションを実行するたびに Cloud Healthcare API が独自の鍵を生成します。その結果、実行する度に日付の出力に不整合が生じる可能性があります。

次のサンプルは、DICOM インスタンスの DateShiftConfig 変換で DATEDATE_OF_BIRTH infoType を設定する方法を示しています。匿名化リクエストを Cloud Healthcare API に送信した後、インスタンスの日付値は元の値からプラスまたはマイナス 100 日以内でシフトします。

指定した暗号鍵 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU= は、次のコマンドを使用して生成された AES 暗号化の 256 ビットの Base64 エンコード鍵です。プロンプトが表示されたら、コマンドに空のパスワードを指定します。

echo -n "test" | openssl enc -e -aes-256-ofb -a -salt

dateShiftConfig 変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。

dicom_dateshiftconfig

curl

DICOM データを含むデータセットを匿名化し、日付値を変換する際に実行間で一貫性を持たせるには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profileDATE および DATE_OF_BIRTH に設定された transformations.infoTypes、AES 128/192/256 ビットの鍵に設定された transformations.dateShiftConfig、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
        },
        'text': {
          'transformations': [
            {
              'infoTypes': [
                'DATE',
                'DATE_OF_BIRTH'
              ],
              'dateShiftConfig': {
                'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU='
              }
            }
          ]
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["20110820"]},
    "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":["19880723"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

DICOM データを含むデータセットを匿名化し、日付値を変換する際に実行間で一貫性を持たせるには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profileDATE および DATE_OF_BIRTH に設定された transformations.infoTypes、AES 128/192/256 ビットの鍵に設定された transformations.dateShiftConfig、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
      },
      'text': {
        'transformations': [
          {
            'infoTypes': [
              'DATE',
              'DATE_OF_BIRTH'
            ],
            'dateShiftConfig': {
              'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU='
            }
          }
        ]
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["20110820"]},
    "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":["19880723"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

出力から、StudyDate00080020)と PatientBirthDate00100030)に新しい値が設定されていることがわかります。これらの変換は、100 日間の差分と指定された cryptoKey 値を組み合わせて発生したものです。同じ cryptoKey が指定されている限り、匿名化の実行間でインスタンスの新しい日付値は同じです。

CryptoHashConfig

Cloud Healthcare API では、値を暗号ハッシュ(サロゲート値とも呼ばれます)に置き換えることでデータを変換できます。そのためには、cryptoHashConfig メッセージを指定します。

cryptoHashConfig は空のままにすることも、AES 128/192/256 ビットの Base64 エンコード鍵を指定することもできます。鍵を指定しないと、Cloud Healthcare API によって鍵が生成されます。Cloud Healthcare API はこの鍵を使用してサロゲート値を生成します。実行ごとに同じ鍵を指定すると、Cloud Healthcare API は一貫したサロゲート値を生成します。鍵を指定しない場合、Cloud Healthcare API はオペレーションが実行されるたびに新しい鍵を生成します。異なる鍵を使用すると、異なるサロゲート値が生成されます。

次のサンプルは、Cloud Healthcare API でサポートされているすべてのデフォルトの DICOM infoTypecryptoHashConfig 変換を適用する方法を示しています。匿名化リクエストを送信すると、Cloud Healthcare API の対応する DICOM infoType がある値がサロゲート値に置き換えられます。

このサンプルでは、匿名化の実行間で整合性のあるサロゲート値を生成するための暗号鍵を提供する方法も示しています。

指定した暗号鍵 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU= は、次のコマンドを使用して生成された AES 暗号化の 256 ビットの Base64 エンコード鍵です。プロンプトが表示されたら、コマンドに空のパスワードを指定します。

echo -n "test" | openssl enc -e -aes-256-ofb -a -salt

cryptoHashConfig 変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。

dicom_cryptohashconfig

curl

DICOM データを含むデータセットを匿名化し、すべての利用可能なデフォルトの DICOM infoTypes を暗号的にハッシュするには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profile、空のオブジェクトに設定された transformations.infoTypes、AES 128/192/256 ビットの鍵に設定された transformations.cryptoHashConfig、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
        },
        'text': {
          'transformations': [
            {
              'infoTypes': [],
              'cryptoHashConfig': {
                'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU='
              }
            }
          ]
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["19000101"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"TgUF3V/7IfiYXOvA63tpPnsFrc+j1YBenF/9E4+B1CE"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"YTQB+AfSXJUQsIip8odrSfntGe4yWgGyFjq/lI/e+Jk"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19000101"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

DICOM データを含むデータセットを匿名化し、すべての利用可能なデフォルトの DICOM infoTypes を暗号的にハッシュするには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profile、空のオブジェクトに設定された transformations.infoTypes、AES 128/192/256 ビットの鍵に設定された transformations.cryptoHashConfig、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
      },
      'text': {
        'transformations': [
          {
            'infoTypes': [],
            'cryptoHashConfig': {
              'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU='
            }
          }
        ]
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["19000101"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"TgUF3V/7IfiYXOvA63tpPnsFrc+j1YBenF/9E4+B1CE"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"YTQB+AfSXJUQsIip8odrSfntGe4yWgGyFjq/lI/e+Jk"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19000101"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

同じ cryptoKey が指定されている限り、匿名化の実行間でインスタンスの出力の変換は同じです。

ReplaceWithInfoTypeConfig

replaceWithInfoTypeConfig を指定すると、入力値が値の infoType の名前に置き換えられます。

次のサンプルは、Cloud Healthcare API でサポートされているすべてのデフォルトの DICOM infoTypereplaceWithInfoTypeConfig 変換を適用する方法を示しています。replaceWithInfoTypeConfig メッセージに引数はありません。指定すると、変換が有効になります。

replaceWithInfoTypeConfig 変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。

dicom_replacewithinfotypeconfig

curl

DICOM データを含むデータセットを匿名化し、すべての関連する値を infoType に置き換えるには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profile、空の transformations.infoTypes、空の transformations.cryptoHashConfig、アクセス トークンを指定します。次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
      'config': {
        'dicom': {
          'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
        },
        'text': {
          'transformations': [
            {
              'infoTypes': [],
              'replaceWithInfoTypeConfig': {}
            }
          ]
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/dicom+json; charset=utf-8" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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"
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["19000101"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"[PERSON_NAME]"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"[PERSON_NAME]"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19000101"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

PowerShell

DICOM データを含むデータセットを匿名化し、すべての関連する値を infoType に置き換えるには、POST リクエストを行い、宛先データセットの名前、DEIDENTIFY_TAG_CONTENTS に設定された dicom.filter_profile、空の transformations.infoTypes、空の transformations.cryptoHashConfig、アクセス トークンを指定します。次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID',
    'config': {
      'dicom': {
        'filterProfile': 'DEIDENTIFY_TAG_CONTENTS'
      },
      'text': {
        'transformations': [
          {
            'infoTypes': [],
            'replaceWithInfoTypeConfig': {}
          }
        ]
      }
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/OPERATION_ID"
}
レスポンスにはオペレーション名が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。
{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}
匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[
  {
    "00080005":{"vr":"CS"},
    "00080016":{"vr":"UI"},
    "00080018":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA"},
    "00080030":{"vr":"TM"},
    "00080050":{"vr":"SH"},
    "00080090":{"vr":"PN"},
    "00100010":{"vr":"PN"},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA"},
    "00100040":{"vr":"CS"},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "00200010":{"vr":"SH"},
    "00200013":{"vr":"IS"},
    "00280010":{"vr":"US","Value":[1024]},
    "00280011":{"vr":"US","Value":[1024]},
    "00280100":{"vr":"US","Value":[8]}
  }
]
次の表は、スタディ 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
新しい値を使用して、インスタンスのメタデータを取得します。
$cred = gcloud auth print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID//dicomStores/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
リクエストが成功すると、サーバーは新しいメタデータを JSON 形式で返します。新しいメタデータと元のメタデータを比較し、変更の効果をを確認できます。
[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
    "00020003":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
    "00020012":{"vr":"UI","Value":["1.2.40.0.13.1.3"]},
    "00020013":{"vr":"SH","Value":["dcm4che-null"]},
    "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.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029"]},
    "00080020":{"vr":"DA","Value":["19000101"]},
    "00080030":{"vr":"TM","Value":["110032"]},
    "00080050":{"vr":"SH"},
    "00080064":{"vr":"CS","Value":["WSD"]},
    "00080070":{"vr":"LO","Value":["Manufacturer"]},
    "00080090":{"vr":"PN","Value":[{"Alphabetic":"[PERSON_NAME]"}]},
    "00081090":{"vr":"LO","Value":["ABC1"]},
    "00100010":{"vr":"PN","Value":[{"Alphabetic":"[PERSON_NAME]"}]},
    "00100020":{"vr":"LO","Value":["S1214223-1"]},
    "00100030":{"vr":"DA","Value":["19000101"]},
    "00100040":{"vr":"CS","Value":["F"]},
    "0020000D":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763"]},
    "0020000E":{"vr":"UI","Value":["1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710"]},
    "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"]}
  }
]

DICOM ストアレベルでのデータの匿名化

上記のサンプルは、データセット レベルで DICOM データを匿名化する方法を示しています。このセクションでは、DICOM ストアレベルでデータを匿名化する方法について説明します。

API

データセット匿名化リクエストを DICOM ストア匿名化リクエストに変更するには、次の変更を行います。

  • リクエスト本文の destinationDatasetdestinationStore に変更する
  • 宛先を指定するときに、destinationStore の値の末尾に dicomStores/DESTINATION_DICOM_STORE_ID を追加する
  • ソースデータの場所を指定するときに dicomStores/SOURCE_DICOM_STORE_ID を追加する

例:

データセット レベルの匿名化:

'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID'
…
"https://healthcare.googleapis.com/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

次のサンプルでは、タグの匿名化と焼き付きテキストの秘匿化の組み合わせを展開していますが、匿名化は 1 つの DICOM ストアで行われ、匿名化されたデータが新しい DICOM ストアにコピーされます。なお、DESTINATION_DICOM_STORE_ID によって参照される DICOM ストアはすでに存在している必要があります。

curl

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      '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'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション ID が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyDicomStore",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successResourceCount": "SUCCESS_RESOURCE_COUNT"
  }
}

PowerShell

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    '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'
      }
    }
  }" `
  -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

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション ID が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。

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

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyDicomStore",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successResourceCount": "SUCCESS_RESOURCE_COUNT"
  }
}

Console

Cloud Console を使用して DICOM ストア内のデータを匿名化するには、次の手順を実行します。

  1. Cloud Console で、[データセット] ページに移動します。

    [データセット] ページに移動

  2. データを匿名化するデータセットをクリックします。

  3. DICOM ストアのリストで、匿名化する DICOM ストアの [アクション] リストから [匿名化] を選択します。

    [DICOM ストアの匿名化] ページが表示されます。

  4. [宛先データストアの設定] を選択し、匿名化されたデータが保存されるデータセットと DICOM ストアを選択します。

  5. データの匿名化方法を構成するには、[DICOM タグの匿名化] を選択します。データは以下のように匿名化できます。

  6. [DICOM 焼き付けテキストの秘匿化] を選択して、匿名化中の画像の秘匿化方法を構成します。画像の秘匿化は次のように構成できます。

  7. [匿名化] をクリックして、DICOM ストアのデータを匿名化します。

DICOM ストアのサブセットの匿名化

DICOM ストアレベルで DICOM データを匿名化する場合は、フィルタを指定してデータのサブセットを匿名化できます。

フィルタは、DicomFilterConfig オブジェクトの resourcePathsGcsUri フィールドの値として指定するフィルタ ファイルの形式をとります。フィルタ ファイルは Cloud Storage バケットに存在する必要があります。ローカルマシンやその他のソースに存在するフィルタ ファイルは指定できません。ファイルの場所は gs://BUCKET/PATH/TO/FILE の形式にする必要があります。

フィルタ ファイルの作成

フィルタ ファイルは、匿名化する DICOM ファイルを定義します。ファイルは次のレベルでフィルタできます。

  • スタディレベル
  • シリーズ レベル
  • インスタンス レベル

フィルタ ファイルは、匿名化するスタディ、シリーズ、またはインスタンスごとに 1 行で構成されます。各行には /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 を指定してシリーズを匿名化することもできます。

次のフィルタ ファイルについて考えてみましょう。フィルタ ファイルにより、1 つのスタディ、2 つのシリーズ、3 つの個別のインスタンスが匿名化されます。

/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、シリーズ UID、インスタンス UID を表示できます。そのうえで次の操作を行います。

  1. 目的のスタディ UID、シリーズ UID、インスタンス UID にクエリを実行します。たとえば、メタデータを BigQuery にエクスポートした後、次のクエリを実行してスタディ UID、シリーズ UID、インスタンス 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 ストアレベルでのデータの匿名化を展開していますが、匿名化する DICOM リソースを決定する Cloud Storage のフィルタ ファイルが指定されています。

curl

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      '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': {
        'resourcePathsGcsUri': 'gs://BUCKET/PATH/TO/FILE'
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション ID が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyDicomStore",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successResourceCount": "SUCCESS_RESOURCE_COUNT"
  }
}

PowerShell

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    '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': {
      'resourcePathsGcsUri': 'gs://BUCKET/PATH/TO/FILE'
    }
  }" `
  -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

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション ID が含まれています。オペレーションの get メソッドを使用して、このオペレーションのステータスを追跡できます。

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

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true が含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyDicomStore",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successResourceCount": "SUCCESS_RESOURCE_COUNT"
  }
}

DICOM 匿名化オペレーションのトラブルシューティング

DICOM 匿名化オペレーション中にエラーが発生した場合、エラーは Cloud Logging に記録されます。詳細については、Cloud Logging でのエラーログの表示をご覧ください。