このチュートリアルと付属のコンセプト ドキュメント(Cloud Healthcare API による医療画像の匿名化)は、研究者、データ サイエンティスト、IT チーム、医療機関、ライフ サイエンス機関を対象としています。このチュートリアルでは、Cloud Healthcare API を使用して医療画像データを匿名化する一般的な 2 つのユースケースを説明します。コンセプト ドキュメントでは、DICOM データの匿名化の根拠と、その大まかな手順について説明します。
このチュートリアルでは、Linux についての基本的な知識があることを前提としています。Google Cloud と DICOM 標準に関する基本的な知識があると、さらに理解しやすくなります。このチュートリアルのコマンドはすべて、Linux ターミナルで実行します。
目標
- Cloud Healthcare API の DICOM 匿名化オペレーションを使用して、DICOM ストアの DICOM インスタンスで PII と PHI を削除または変更します。
- 1 回の Cloud Healthcare API 呼び出しで、PII と PHI のメタデータと焼き付けテキストを削除または変更します。
curl
コマンドライン ツールまたは Google Cloud CLI を使用して、DICOM 匿名化 Cloud Healthcare API 呼び出しを実行します。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
このチュートリアルでは、DICOM イメージがすでに DICOM ストアにインポートされていることを前提としています。Google Cloud での DICOM ストアの作成については、DICOM ストアの作成と管理をご覧ください。DICOM データを DICOM ストアにインポートする方法については、Cloud Storage を使用した DICOM データのインポートとエクスポートをご覧ください。
このチュートリアルでのその他の前提条件は次のとおりです。
MyProj
というプロジェクトで作業している。MyProj
の Google Cloud リージョンus-central1
にdataset1
というデータセットを作成している。dataset1
に DICOM ストアdicomstore1
を作成している。
リソースの名前が異なる場合は、このドキュメントに記載されているコマンドを適宜変更する必要があります。
- Google Cloud コンソールで [プロジェクト セレクタ] ページに移動します。
プロジェクトの選択ページに移動 - Google Cloud プロジェクト
MyProj
を選択します。 -
Cloud Healthcare API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
- シェルで
gcloud components update
コマンドを実行して、Cloud Healthcare API 関連の機能を含む最新バージョンの gcloud CLI がインストールされていることを確認します。
IAM サービス アカウントを作成する
Healthcare Dataset 管理者ロールには、このチュートリアルで必要な権限がすべて含まれています。
サービス アカウント キーを有効にします。
gcloud auth activate-service-account --key-file=path-to-key-file
次のような出力が表示されます。
Activated service account credentials for: [key-name@project-name.iam.gserviceaccount.com]
key-name
は、サービス アカウント キーに割り当てた名前です。project-name
は Google Cloud プロジェクトの名前です。
医療画像ビューアの使用
このチュートリアルでは、Mach7 診断ビューアを医療画像ビューアとして使用します。ビューアのデモ版は Mach7 のウェブサイトでリクエストできます。
このビューア使用するには、次の手順でユーザー アカウントに Healthcare DICOM 閲覧者ロールを割り当てます。
Google Cloud コンソールの管理者として [IAM] ページに移動します。
[追加person_add] をクリックします。
[新しいプリンシパル] フィールドに、ユーザー アカウントまたは Gmail アドレスを入力します。
[ロールを選択] プルダウン リストで [Cloud Healthcare] を選択します。
[Cloud Healthcare] の上にポインタを置いて [Healthcare DICOM 閲覧者] ロールを選択します。
[保存] をクリックします。
ビューアを本番環境で使用するには、完全版を入手する必要があります。
OAuth 2.0 アクセス トークンの取得
Cloud Healthcare API を使用してデータを取り込むには OAuth 2.0 アクセス トークンが必要です。このトークンは、このチュートリアルにあるコマンドによって取得されます。このチュートリアルでは、Cloud Healthcare API リクエストのいくつかの例で curl
コマンドライン ツールが使用されています。これらの例では、gcloud auth print-access-token
コマンドを使用して OAuth 2.0 署名なしトークンを取得し、このトークンをリクエストの認証ヘッダーに組み込みます。このコマンドの詳細については、gcloud auth application-default print-access-token
をご覧ください。
このチュートリアルでは、DICOM データから個人を特定できる情報を削除する最も一般的な 2 つのユースケースについて説明します。両方のケースで curl
コマンドライン ツールまたは Google Cloud CLI を使用します。Cloud Healthcare API を使用した DICOM データの匿名化、構成オプション、サンプルの curl
および Windows PowerShell コマンドの詳細については、DICOM データの匿名化をご覧ください。
環境変数を設定する
この手順は両方のユースケースに適用されます。
画像が保存されている DICOM ストアの場所と属性に基づいて、環境変数をエクスポートします。
export PROJECT_ID=MyProj export REGION=us-central1 export SOURCE_DATASET_ID=dataset1 export DICOM_STORE_ID=dicomstore1 export DESTINATION_DATASET_ID=deid-dataset1
ユースケース I: すべてのメタデータを削除し、焼き付きテキストをすべて秘匿化する
このユースケースでは、すべてのメタデータ(有効な DICOM リソースに必要な最小限のデータを除く)を削除し、DICOM 画像の焼き付きテキストをすべて秘匿化することで、DICOM ストアと DICOM データを含むデータセットを匿名化する方法を示します。次の機能を実行できます。
POST
リクエストを作成し、宛先データセットの名前とアクセス トークンを指定する。- すべてのメタデータを削除し、有効な DICOM リソースを保持するために必要な最小限の
keepList
タグのセットを作成する。 image.text_redaction_mode
をREDACT_ALL_TEXT
に設定したDeidentifyConfig
オブジェクトを作成して DICOM イメージの機密焼き付きテキストをすべて秘匿化する。
次に示すように、これらの機能はすべて 1 つの curl
コマンドで実行できます。
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
--data "{
'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
'config': {
'dicom': {'keepList': {
'tags': [
'StudyInstanceUID',
'SOPInstanceUID',
'TransferSyntaxUID',
'PixelData',
'Columns',
'NumberOfFrames',
'PixelRepresentation',
'MediaStorageSOPClassUID',
'MediaStorageSOPInstanceUID',
'Rows',
'SamplesPerPixel',
'BitsAllocated',
'HighBit',
'PhotometricInterpretation',
'BitsStored' ] }
},
'image': {
'textRedactionMode': 'REDACT_ALL_TEXT'
}
}
}" "https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"
また、タグ名がわからない場合やタグ名を指定しない場合でも、MINIMAL_KEEP_LIST_PROFILE
タグフィルタ プロファイルを使用して同じ匿名化オペレーションを実行できます。次の例をご覧ください。
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
--data "{
'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
'config': {
'dicom':{'filterProfile':'MINIMAL_KEEP_LIST_PROFILE'},
'image': {
'textRedactionMode': 'REDACT_ALL_TEXT'
}
}
}" "https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"
ここまでのすべてのコマンドでは、リクエストが成功すると、サーバーは次のように JSON 形式のレスポンスを返します。
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME" }
レスポンスにはオペレーション名が含まれています。このオペレーション名を Operation get
メソッドで使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done":
true
が含まれます。
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "2018-01-01T00:00:00Z", "endTime": "2018-01-01T00:00:00Z" }, "done": true, "response": { "@type": "...", "successStoreCount": "SUCCESS_STORE_COUNT" } }
Google Cloud CLI を使用して Google Cloud で、匿名化 API を含む Cloud Healthcare API のすべてのバージョンを実行することもできます。使用可能なすべてのコマンドのリストについては、Cloud Healthcare API gcloud
のドキュメントを参照するか、次のコマンドを実行してください。
gcloud healthcare --help
次の例は、gcloud CLI を使用して、DICOM ストアと DICOM データを含むデータセットを匿名化し、すべてのメタデータを削除して、DICOM イメージのすべての焼き付けテキストを秘匿化します。
gcloud healthcare datasets deidentify $SOURCE_DATASET_ID \
--location $REGION \
--dicom-filter-tags=StudyInstanceUID,SOPInstanceUID,TransferSyntaxUID,PixelData,Columns,NumberOfFrames,PixelRepresentation,MediaStorageSOPClassUID,MediaStorageSOPInstanceUID,Rows,SamplesPerPixel,BitsAllocated,HighBit,PhotometricInterpretation,BitsStored \
--text-redaction-mode all \
--destination-dataset projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID \
--async
リクエストが成功すると、サーバーは次のようなレスポンスを返します。
Request issued for: [$SOURCE_DATASET_ID] Check operation [OPERATION NAME] for status. name: projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME
オペレーションのステータスを確認するには、次のコマンドを実行します。
gcloud healthcare operations describe --dataset $SOURCE_DATASET_ID OPERATION_NAME
リクエストが成功すると、サーバーは次のようなレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "done": true
が含まれます。
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset "createTime": "2018-01-01T00:00:00Z", "endTime": "2018-01-01T00:00:00Z" name: "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME" response: '@type': type.googleapis.com/google.cloud.healthcare.v1.dataset.DeidentifySummary successResourceCount: 'SUCCESS_RESOURCE_COUNT' successStoreCount: 'SUCCESS_STORE_COUNT'
ユースケース II: メタデータの変更と焼き付けテキストの秘匿化
このユースケースでは、DICOM ストアと DICOM データを含むデータセットを匿名化するため、filterProfile
タグ フィルタリング メソッドを使用して一部のメタデータを削除し、他のメタデータを変更して、画像に関連付けられている機密焼き付けテキストを秘匿化する方法を示します。目標は、PERSON_NAME
値を秘匿化し、PHONE_NUMBER
値をアスタリスクに置き換え、DATE
と DATE_OF_BIRTH
を元の値の前後 100 日間の範囲の日付値に変更することです。
このユースケースでは、指定される暗号鍵 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=
は、次のコマンドを使用して生成された AES 暗号化 256 ビットの Base64 エンコード鍵です。プロンプトが表示されたら、コマンドに空のパスワードを指定します。
echo -n "test" | openssl enc -e -aes-256-ofb -a -salt
次の機能を実行できます。
POST
リクエストを作成し、宛先データセットの名前とアクセス トークンを指定する。- 適切な情報タイプとプリミティブ変換の組み合わせを指定した
DEIDENTIFY_TAG_CONTENT
フィルタ プロファイルを使用して、DICOM タグの一部のメタデータを削除し、その他のメタデータを変更する。 - image.text_redaction_mode を
REDACT_SENSITIVE_TEXT
に設定して、DICOM イメージの焼き付きテキストを秘匿化する。
次に示すように、これらの機能はすべて 1 つの curl
コマンドで実行できます。
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
--data "{
'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
'config':{
'dicom':{'filterProfile':'DEIDENTIFY_TAG_CONTENTS'},
'text':{
'transformations':[
{'infoTypes':['PERSON_NAME'], 'redactConfig':{}},
{'infoTypes':['PHONE_NUMBER'], 'characterMaskConfig':{'maskingCharacter':''}},
{'infoTypes':['DATE', 'DATE_OF_BIRTH'], 'dateShiftConfig':{'cryptoKey':'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU='}}]},
'image':{'textRedactionMode':'REDACT_SENSITIVE_TEXT'}}}" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"
リクエストが成功すると、サーバーは次のような JSON 形式のレスポンスを返します。
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME" }
レスポンスにはオペレーション名が含まれています。Operation get
メソッドを使用して、このオペレーションのステータスを追跡できます。
curl -X GET \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME"
リクエストが成功すると、サーバーは JSON 形式の次のレスポンスを返します。
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "2018-01-01T00:00:00Z", "endTime": "2018-01-01T00:00:00Z" }, "done": true, "response": { "@type": "...", "successStoreCount": "SUCCESS_STORE_COUNT" } }
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
個々のリソースの削除
宛先データセットを削除します。必要に応じて、
--location
パラメータを追加し、データセットのリージョンを指定します。gcloud healthcare datasets delete $DESTINATION_DATASET_ID
次のステップ
- Cloud Healthcare API による医療画像の匿名化
- DICOM データの匿名化
- Healthcare API ベータ版のお知らせ
- BigQuery への DICOM メタデータのエクスポート
- DICOM 機能の詳細。DICOM 適合性宣言をご覧ください。
FHIR と HL7v2 のサポートに関する情報など、Cloud Healthcare API の詳細を確認する。Cloud Healthcare API ドキュメントをご覧ください。
Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center を確認する。