このページでは、v1 DicomConfig
構成を使用して、次のレベルで DICOM インスタンスのセンシティブ データを匿名化する方法について説明します。
datasets.deidentify
を使用したデータセット レベルdicomStores.deidentify
を使用した DICOM ストアレベル
また、このページでは、DICOM ストアレベルでデータを匿名化するときにフィルタを適用する方法についても説明します。
匿名化の概要
データセット レベルの匿名化
データセット レベルで DICOM データを匿名化するには、datasets.deidentify
オペレーションを呼び出します。匿名化 API 呼び出しには次のコンポーネントがあります。
- ソース データセット: 機密データがある 1 つ以上のインスタンスを持つ DICOM ストアを含むデータセット。
deidentify
オペレーションを呼び出すと、データセットにあるすべての DICOM ストア内のすべてのインスタンスが匿名化されます。 - 宛先データセット: 匿名化は元のデータセットまたはそのデータに影響しません。代わりに、元のデータの匿名化されたコピーは、新しいデータセット(宛先データセット)に書き込まれます。
- 匿名化の対象: データセットの処理方法を指定する構成パラメータ。これらのパラメータを
DeidentifyConfig
オブジェクトに指定して次のことを行うことで、DICOM インスタンス メタデータ(タグキーワードを使用)や、DICOM 画像内の焼き付けテキストを匿名化するように DICOM 匿名化を構成できます。- リクエスト本文の
config
フィールドを設定する - Cloud Storage に JSON 形式で保存し、リクエスト本文の
gcsConfigUri
フィールドを使用してバケット内のファイルの場所を指定する
- リクエスト本文の
このガイドのサンプルの大半は、データセット レベルで DICOM データを匿名化する方法を示しています。
DICOM ストアレベルの匿名化
DICOM ストアレベルで DICOM データを匿名化すると、匿名化されるデータをより詳細に制御できます。たとえば、複数の DICOM ストアを含むデータセットがある場合に、ストアに含まれるデータの種類に応じて、各 DICOM ストアを匿名化できます。
DICOM ストア内の DICOM データを匿名化するには、dicomStores.deidentify
メソッドを呼び出します。匿名化 API 呼び出しには次のコンポーネントがあります。
- ソース DICOM ストア: 機密データを持つ 1 つ以上のインスタンスを含む DICOM ストア。
deidentify
オペレーションを呼び出すと、DICOM ストア内のすべてのインスタンスが匿名化されます。 - 転送先の DICOM ストア: 匿名化が元の DICOM ストアまたはそのデータに影響を与えることはありません。代わりに、元のデータの匿名化されたコピーが宛先の DICOM ストアに書き込まれます。宛先 DICOM ストアはすでに存在している必要があります。
- 匿名化の対象: DICOM ストアの処理方法を指定する構成パラメータ。これらのパラメータを
DeidentifyConfig
オブジェクトに指定して、次のいずれかの方法で渡すことによって、DICOM インスタンス メタデータ(タグキーワードを使用)や、DICOM 画像内の焼き付けテキストを匿名化するように DICOM 匿名化を構成できます。- リクエスト本文の
config
フィールドを設定する - Cloud Storage に JSON 形式で保存し、リクエスト本文の
gcsConfigUri
フィールドを使用してバケット内のファイルの場所を指定する
- リクエスト本文の
DICOM ストアレベルで DICOM データを匿名化する方法の例については、DICOM ストアレベルでのデータの匿名化をご覧ください。
フィルタ
フィルタ ファイルを構成し、dicomStores.deidentify
リクエストでファイルを指定することで、DICOM ストアのデータのサブセットを匿名化できます。例については、DICOM ストアのサブセットの匿名化をご覧ください。
サンプルの概要
このガイドのサンプルでは、単一の DICOM インスタンスを使用しますが、複数のインスタンスを匿名化することもできます。
以下の各セクションでは、DICOM データを匿名化するさまざまな方法について、例を示しています。また、それぞれの例で匿名化された出力画像を示しています。各例では、入力として以下の元画像を使用しています。
各匿名化オペレーションからの出力イメージをこの元のイメージと比較して、オペレーションの効果を確認できます。
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)は残ります。焼き付きテキストも削除するには、画像の焼き付きテキストを削除するをご覧ください。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "keepList": { "tags": [ "PatientID" ] } } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "keepList": { "tags": [ "PatientID" ] } } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "keepList": { "tags": [ "PatientID" ] } } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
次の表は、スタディ UID、シリーズ UID、インスタンス UID がどのように変更されたかを示しています。元のインスタンス メタデータ 匿名化されたインスタンス メタデータ スタディ UID( 0020000D
)2.25.70541616638819138568043293671559322355
1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
シリーズ UID( 0020000E
)1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694
1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
インスタンス UID( 00080018
)1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695
1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
Go
Java
Node.js
Python
removelist タグを使用した匿名化
DicomConfig
オブジェクトに removelist を指定できます。deidentify
オペレーションでは、リストに指定されたタグのみが削除されます。removelist タグを指定しない場合、匿名化オペレーションは通常どおりに行われますが、宛先データセット内の DICOM タグは削除されません。
removelist を指定すると、オーバーレイ データに PHI が含まれる可能性があるため、デフォルトで OverlayData
タグが追加されます。
デフォルトで keeplist に追加されるタグは、removelist には追加できません。
次のサンプルは、removelist 内のすべてのタグを削除して、DICOM ストアと DICOM データを含むデータセットを匿名化する方法を示しています。removelist 内にないタグは変更されません。
Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。removelist に含まれるタグのうち、PatientBirthDate
のみが画像から削除されます。これは、画像に表示されるメタデータに対応する removelist からの唯一のタグのためです。
画像の上部隅にある PatientBirthDate
は、removelist の構成に従って削除されていますが、画像の下部の焼き付き PHI は残ります。焼き付きテキストも削除するには、画像の焼き付きテキストを削除するをご覧ください。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "removeList": { "tags": [ "PatientBirthName", "PatientBirthDate", "PatientAge", "PatientSize", "PatientWeight", "PatientAddress", "PatientMotherBirthName" ] } } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "removeList": { "tags": [ "PatientBirthName", "PatientBirthDate", "PatientAge", "PatientSize", "PatientWeight", "PatientAddress", "PatientMotherBirthName" ] } } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "removeList": { "tags": [ "PatientBirthName", "PatientBirthDate", "PatientAge", "PatientSize", "PatientWeight", "PatientAddress", "PatientMotherBirthName" ] } } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
次の表は、スタディ UID、シリーズ UID、インスタンス UID がどのように変更されたかを示しています。元のインスタンス メタデータ 匿名化されたインスタンス メタデータ スタディ UID( 0020000D
)2.25.70541616638819138568043293671559322355
1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
シリーズ UID( 0020000E
)1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694
1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
インスタンス UID( 00080018
)1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695
1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
タグフィルタ プロファイルを使用した匿名化
保持または削除するタグを指定する代わりに、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 は残ります。焼き付きテキストも削除するには、画像の焼き付きテキストを削除するをご覧ください。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE" } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE" } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
次の表は、スタディ UID、シリーズ UID、インスタンス UID がどのように変更されたかを示しています。元のインスタンス メタデータ 匿名化されたインスタンス メタデータ スタディ UID( 0020000D
)2.25.70541616638819138568043293671559322355
1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
シリーズ UID( 0020000E
)1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694
1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
インスタンス UID( 00080018
)1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695
1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
Google Cloud コンソールでのデータの匿名化
Google Cloud コンソールでデータを匿名化するには、次の手順を実行します。
Google Cloud コンソール で、データセット ページに移動します。
匿名化するデータセットの [アクション] リストから [匿名化] を選択します。
[データセットの匿名化] ページが表示されます。
[宛先データセットの設定]を選択し、匿名化されたデータを保存する新しいデータセットの名前を入力します。
[DICOM タグの匿名化] を選択して、データが匿名化されるプロファイルを選択します。データは以下のように匿名化できます。
KEEP_ALL_PROFILE
- すべての DICOM メタタグを保持します。DEIDENTIFY_TAG_CONTENTS
- メタタグ内のデータを匿名化します。ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE
- DICOM 規格の基本プロファイルに従ってメタタグを削除します。MINIMAL_KEEP_LIST_PROFILE
- 有効な DICOM オブジェクトに必要なメタタグのみを保持します。- ID リダクションをスキップ - DICOM 規格によって決定された UID フィールドを再生成します。
[DICOM 焼き付けテキストの秘匿化] を選択して、匿名化中の画像の秘匿化方法を構成します。画像の秘匿化は次のように構成できます。
REDACT_NO_TEXT
- 画像内のテキストは秘匿化しません。REDACT_SENSITIVE_TEXT
- 画像内の機密テキストのみを秘匿化します。REDACT_ALL_TEXT
- 画像内のすべてのテキストを秘匿化します。
[匿名化] をクリックして、データセット内のデータを匿名化します。
画像内の焼き付きテキストを秘匿化する
Cloud Healthcare API では、焼き付き機密テキストを画像内で秘匿化できます。PHI などの機密データは API によって検出され、不透明な長方形で覆い隠されます。API は指定された DICOM 画像を同じ形式で返しますが、機密情報が含まれるとみなされたテキストは条件に従って秘匿化されます。
ImageConfig
オブジェクト内の TextRedactionMode
オプションを指定することで、画像の焼き付きテキストを秘匿化できます。有効な値については、TextRedactionMode
のドキュメントをご覧ください。
画像の焼き付きテキストをすべて秘匿化する
次のサンプルは、データセット内の DICOM 画像にある、すべての焼き付きテキストを秘匿化する方法を示しています。そのためには、TextRedactionMode
フィールドに REDACT_ALL_TEXT
を指定します。
REDACT_ALL_TEXT
オプションを使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。画像の下部にある焼き付きテキストは削除されましたが、画像の上端にあるメタデータは残ります。メタデータも削除するには、DICOM タグの匿名化をご覧ください。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": {}, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": {}, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": {}, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
次の表は、スタディ UID、シリーズ UID、インスタンス UID がどのように変更されたかを示しています。元のインスタンス メタデータ 匿名化されたインスタンス メタデータ スタディ UID( 0020000D
)2.25.70541616638819138568043293671559322355
1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
シリーズ UID( 0020000E
)1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694
1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
インスタンス UID( 00080018
)1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695
1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
画像にある焼き付き機密テキストのみを秘匿化する
次のサンプルは、データセット内の DICOM 画像にある焼き付き機密テキストを秘匿化する方法を示しています。そのためには、TextRedactionMode
フィールドに REDACT_SENSITIVE_TEXT
を指定します。
REDACT_SENSITIVE_TEXT
を指定すると、デフォルトの DICOM infoTypes で指定された infoType が秘匿化されます。カルテ番号(MRN)などの患者 ID の追加のカスタム infoType も適用され、患者 ID が秘匿化されます。
次の画像は、患者の X 線を秘匿化していない状態を示しています。
REDACT_SENSITIVE_TEXT
オプションを使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。
次のことを確認できます。
- 画像の左下にある
PERSON_NAME
が秘匿化された - 画像の左下にある
DATE
が秘匿化された
患者の性別は、デフォルトの DICOM infoTypes に従って機密テキストと見なされないため、秘匿化されませんでした。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": {}, "image": { "textRedactionMode": "REDACT_SENSITIVE_TEXT" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": {}, "image": { "textRedactionMode": "REDACT_SENSITIVE_TEXT" } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": {}, "image": { "textRedactionMode": "REDACT_SENSITIVE_TEXT" } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
次の表は、スタディ UID、シリーズ UID、インスタンス UID がどのように変更されたかを示しています。元のインスタンス メタデータ 匿名化されたインスタンス メタデータ スタディ UID( 0020000D
)2.25.70541616638819138568043293671559322355
1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
シリーズ UID( 0020000E
)1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694
1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
インスタンス UID( 00080018
)1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695
1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
タグの匿名化と焼き付きテキストの秘匿化の組み合わせ
タグを使用した匿名化と画像の焼き付きテキストの秘匿化を組み合わせて、より詳細なレベルで DICOM インスタンスを匿名化できます。たとえば、TextRedactionMode
フィールドの REDACT_ALL_TEXT
と TagFilterProfile
フィールドの DEIDENTIFY_TAG_CONTENTS
を組み合わせると、次のことができます。
REDACT_ALL_TEXT
: 画像内の焼き付きテキストをすべて秘匿化する。DEIDENTIFY_TAG_CONTENTS
: タグの内容を検査し、機密テキストを変換する。DEIDENTIFY_TAG_CONTENTS
の動作の詳細については、デフォルト構成をご覧ください。
REDACT_ALL_TEXT
オプションと DEIDENTIFY_TAG_CONTENTS
オプションを使用して Cloud Healthcare API に画像を送信すると、画像は次のようになります。次の変更を確認します。
- 画像の左上隅と右上隅の名前は、
CryptoHashConfig
を使用して変換されている - 画像の左上隅と右上隅の日付は、
DateShiftConfig
を使用して変換されている - 画像の下部にある焼き付きテキストが秘匿化されている
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
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 つのプリミティブ変換を指定する必要があります。
InfoTypeTransformation
は DEIDENTIFY_TAG_CONTENTS
プロファイルにのみ適用できます。InfoTypeTransformation
は、TagFilterProfile
にリストされている他のプロファイルには適用できません。
以下のセクションでは、InfoTypeTransformation
で利用できるプリミティブ変換と、infoType を使用して DICOM タグの匿名化方法をカスタマイズする方法を示します。サンプルでは、サンプルの概要で提供されているサンプル画像と、DICOM タグの匿名化で提供されているサンプル メタデータを使用します。
デフォルト構成
デフォルトでは、TextConfig
オブジェクトに構成を指定せずに DEIDENTIFY_TAG_CONTENTS
プロファイルを設定すると、Cloud Healthcare API はデフォルトの DICOM infoTypes を使用して機密データを置き換えます。ただし、以下に示すように、DATE
と PERSON_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
を使用して変換されている
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
RedactConfig
redactConfig
を指定すると、値が完全に削除されます。redactConfig
メッセージに引数はありません。指定すると、変換が有効になります。
次のサンプルは、デフォルトの構成を拡張したものですが、redactConfig
変換で PERSON_NAME
infoType が設定されています。このリクエストを送信すると、DICOM インスタンスからすべての名前が削除されます。
redactConfig
変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [ "PERSON_NAME" ], "redactConfig": {} } ] } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [ "PERSON_NAME" ], "redactConfig": {} } ] } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [ "PERSON_NAME" ], "redactConfig": {} } ] } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
出力に、ReferringPhysicianName
(00080090
)と PatientName
(00100010
)の値が削除されたことが表示されます。これは、これらの値が暗号ハッシュを使用して変換されたデフォルト構成のサンプルとは対照的です。
CharacterMaskConfig
characterMaskConfig
を指定すると、指定された infoType に対応する文字列が指定の固定文字に置き換えられます。たとえば、患者の名前を削除したり、暗号ハッシュを使用して変換する代わりに、名前をアスタリスク(*
)の羅列に置き換えることができます。maskingCharacter
フィールドへの値として固定文字を指定できます。
次のサンプルは、デフォルトの構成を拡張したものですが、characterMaskConfig
変換で LAST_NAME
infoType が設定されています。固定文字が指定されていないため、マスキングではデフォルトでアスタリスクが使用されます。
このサンプルでは、単一の DICOM インスタンスを使用しますが、複数のインスタンスを匿名化できます。
characterMaskConfig
変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [ "PERSON_NAME" ], "characterMaskConfig": { "maskingCharacter": "" } } ] } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [ "PERSON_NAME" ], "characterMaskConfig": { "maskingCharacter": "" } } ] } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [ "PERSON_NAME" ], "characterMaskConfig": { "maskingCharacter": "" } } ] } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
出力に、ReferringPhysicianName
(00080090
)と PatientName
(00100010
)の姓がアスタリスクに置き換えられていることが表示されます。これは、これらの値が暗号ハッシュを使用して変換されたデフォルト構成のサンプルとは対照的です。
DateShiftConfig
Cloud Healthcare API では、事前設定された範囲内でシフトすることで日付を変換できます。匿名化の実行全体で日付変換の一貫性を保つには、次のいずれかで DateShiftConfig
を使用します。
- (非推奨): 未加工の AES 128/192/256 ビットの Base64 エンコードされた鍵。
- (推奨): Cloud Key Management Service(Cloud KMS)でラップされた鍵。Cloud KMS でラップされた鍵の使用例については、機密テキストの匿名化と再識別をご覧ください。
cloudkms.cryptoKeyVersions.useToDecrypt
権限を持つロールを Cloud Healthcare サービス エージェント サービス アカウントに付与して、Cloud KMS でラップされた鍵を復号する必要があります。Cloud KMS CryptoKey 復号のロール(roles/cloudkms.cryptoKeyDecrypter
)を使用することをおすすめします。暗号オペレーションに Cloud KMS を使用する場合は、料金が適用されます。詳細については、Cloud Key Management Service の料金をご覧ください。
Cloud Healthcare API は、この鍵を使用して、患者の生年月日などの日付が 100 日間の差分内でシフトする量を計算します。
鍵を指定しない場合、日付値で匿名化オペレーションを実行するたびに Cloud Healthcare API が独自の鍵を生成します。その結果、実行する度に日付の出力に不整合が生じる可能性があります。
次のサンプルは、DICOM インスタンスの DateShiftConfig
変換で DATE
と DATE_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 に画像を送信すると、画像は次のように表示されます。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "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=" } } ] } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "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=" } } ] } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "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=" } } ] } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
出力に、StudyDate
(00080020
)と PatientBirthDate
(00100030
)に新しい値が設定されていることが示されます。これらの変換は、100 日間の差分と指定された cryptoKey
値を組み合わせて発生したものです。同じ cryptoKey
が指定されている限り、匿名化の実行間でインスタンスの新しい日付値は同じです。
CryptoHashConfig
cryptoHashConfig
は、空のままにすることも、次のいずれかで指定することもできます。
- (非推奨): 未加工の AES 128/192/256 ビットの Base64 エンコードされた鍵。
- (推奨): Cloud Key Management Service(Cloud KMS)でラップされた鍵。Cloud KMS でラップされた鍵の使用例については、機密テキストの匿名化と再識別をご覧ください。
cloudkms.cryptoKeyVersions.useToDecrypt
権限を持つロールを Cloud Healthcare サービス エージェント サービス アカウントに付与して、Cloud KMS でラップされた鍵を復号する必要があります。Cloud KMS CryptoKey 復号のロール(roles/cloudkms.cryptoKeyDecrypter
)を使用することをおすすめします。暗号オペレーションに Cloud KMS を使用する場合は、料金が適用されます。詳細については、Cloud Key Management Service の料金をご覧ください。
Cloud Healthcare API では、値を暗号ハッシュ(サロゲート値とも呼ばれます)に置き換えることでデータを変換できます。そのためには、cryptoHashConfig
メッセージを指定します。
鍵を指定しないと、Cloud Healthcare API によって鍵が生成されます。Cloud Healthcare API はこの鍵を使用してサロゲート値を生成します。実行ごとに同じ鍵を指定すると、Cloud Healthcare API は一貫したサロゲート値を生成します。鍵を指定しない場合、Cloud Healthcare API はオペレーションが実行されるたびに新しい鍵を生成します。異なる鍵を使用すると、異なるサロゲート値が生成されます。
次のサンプルは、Cloud Healthcare API でサポートされているすべてのデフォルトの DICOM infoType に cryptoHashConfig
変換を適用する方法を示しています。匿名化リクエストを送信すると、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 に画像を送信すると、画像は次のように表示されます。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [], "cryptoHashConfig": { "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=" } } ] } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [], "cryptoHashConfig": { "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=" } } ] } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [], "cryptoHashConfig": { "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=" } } ] } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
同じ cryptoKey
が指定されている限り、匿名化の実行間でインスタンスの出力の変換は同じです。
ReplaceWithInfoTypeConfig
replaceWithInfoTypeConfig
を指定すると、入力値が値の infoType の名前に置き換えられます。
次のサンプルは、Cloud Healthcare API でサポートされているすべてのデフォルトの DICOM infoType に replaceWithInfoTypeConfig
変換を適用する方法を示しています。replaceWithInfoTypeConfig
メッセージに引数はありません。指定すると、変換が有効になります。
replaceWithInfoTypeConfig
変換を使用して Cloud Healthcare API に画像を送信すると、画像は次のように表示されます。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
JSON 本文のリクエスト:
{ "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [], "replaceWithInfoTypeConfig": {} } ] } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [], "replaceWithInfoTypeConfig": {} } ] } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "text": { "transformations": [ { "infoTypes": [], "replaceWithInfoTypeConfig": {} } ] } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。- 匿名化が成功したら、匿名化されたインスタンスのメタデータを取得して、その変更内容を確認できます。匿名化されたインスタンスには新しいスタディ UID、シリーズ UID、インスタンス UID が設定されるため、まず匿名化されたインスタンスの新しいデータセットを検索する必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- SOURCE_DATASET_LOCATION: ソース データセットのロケーション
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
新しい値を使用して、インスタンスのメタデータを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの IDこれは、ソース データセット内の DICOM ストアの ID と同じです。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
DICOM ストアレベルでのデータの匿名化
上記のサンプルは、データセット レベルで DICOM データを匿名化する方法を示しています。このセクションでは、DICOM ストアレベルでデータを匿名化する方法について説明します。
データセット匿名化リクエストを DICOM ストア匿名化リクエストに変更するには、次の変更を行います。
- リクエスト本文の
destinationDataset
をdestinationStore
に変更する - 宛先を指定するときに、
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 ストアがすでに存在している必要があります。
Console
Google Cloud コンソールを使用して DICOM ストア内のデータを匿名化するには、次の手順を実行します。
Google Cloud コンソール で、データセット ページに移動します。
匿名化するデータを含むデータセットをクリックします。
DICOM ストアのリストで、匿名化する DICOM ストアの [アクション] リストから [匿名化] を選択します。
[DICOM ストアの匿名化] ページが表示されます。
[宛先データストアの設定] を選択し、匿名化されたデータが保存されるデータセットと DICOM ストアを選択します。
データの匿名化方法を構成するには、[DICOM タグの匿名化] を選択します。データは以下のように匿名化できます。
KEEP_ALL_PROFILE
: すべての DICOM メタタグを保持します。DEIDENTIFY_TAG_CONTENTS
: メタタグ内のデータを匿名化します。ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE
: DICOM 規格の基本プロファイルに従ってメタタグを削除します。MINIMAL_KEEP_LIST_PROFILE
: 有効な DICOM オブジェクトに必要なメタタグのみを保持します。- ID リダクションをスキップ: DICOM 規格によって決定された UID フィールドを再生成します。
[DICOM 焼き付けテキストの秘匿化] を選択して、匿名化中の画像の秘匿化方法を構成します。画像の秘匿化は次のように構成できます。
REDACT_NO_TEXT
: 画像内のテキストは秘匿化しません。REDACT_SENSITIVE_TEXT
: 画像内の機密テキストのみを秘匿化します。REDACT_ALL_TEXT
: 画像内のすべてのテキストを秘匿化します。
[匿名化] をクリックして、DICOM ストアのデータを匿名化します。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- SOURCE_DICOM_STORE_ID: 匿名化するデータを含む DICOM ストアの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの ID
JSON 本文のリクエスト:
{ "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。
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 を表示できます。そのうえで次の操作を行います。
目的のスタディ UID、シリーズ UID、インスタンス UID にクエリを実行します。たとえば、メタデータを BigQuery にエクスポートした後、次のクエリを実行してスタディ UID、シリーズ UID、インスタンス UID をフィルタ ファイル要件と互換性のある形式に連結できます。
SELECT CONCAT ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) FROM [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
クエリが大規模な結果セットを返す場合、クエリ結果を BigQuery の宛先テーブルに保存することで、新しいテーブルを実体化できます。
クエリ結果を宛先テーブルに保存したら、宛先テーブルの内容をファイルに保存して、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 のフィルタ ファイルが指定されています。
REST
データセットを匿名化します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- SOURCE_DATASET_ID: 匿名化するデータを含むデータセットの ID
- DESTINATION_DATASET_ID: 匿名化されたデータを書き込む宛先データセットの ID
- SOURCE_DICOM_STORE_ID: 匿名化するデータを含む DICOM ストアの ID
- DESTINATION_DICOM_STORE_ID: 宛先データセット内の DICOM ストアの ID
- BUCKET/PATH/TO/FILE: Cloud Storage バケット内のフィルタ ファイルの場所
JSON 本文のリクエスト:
{ "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } }, "filterConfig": { "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } }, "filterConfig": { "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE" } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID", "config": { "dicom": { "filterProfile": "DEIDENTIFY_TAG_CONTENTS" }, "image": { "textRedactionMode": "REDACT_ALL_TEXT" } }, "filterConfig": { "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE" } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify" | Select-Object -Expand Contentprojects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須項目を入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。
DICOM 匿名化オペレーションのトラブルシューティング
DICOM 匿名化オペレーション中にエラーが発生した場合、エラーは Cloud Logging に記録されます。詳細については、Cloud Logging でのエラーログの表示をご覧ください。
オペレーション全体がエラーで返る場合は、長時間実行オペレーションのトラブルシューティングをご覧ください。