このページでは、Cloud Healthcare API の DICOMweb の実装を使用して DICOM 画像データを保存および管理する方法について説明します。
Cloud Healthcare API でさまざまな DICOMweb REST サービスを実装する方法の詳細については、DICOM 適合性宣言をご覧ください。
Cloud Healthcare API における DICOMweb 実装では、REST のみがサポートされており、RPC はサポート対象外です。
Cloud Healthcare API DICOMweb CLI をインストールする
このページのいくつかの例では、Cloud Healthcare API DICOMweb CLI を使用します。これは、DICOMweb サーバーとのやり取りを簡略化するオープンソース ツールです。このツールを使って、DICOM ファイルの保管、取得、削除、検索ができます。ツールの GitHub ページには、詳細なインストール要件やツールのカスタマイズ方法などの詳細情報が記載されています。
このツールは Python を使用して実行されます。Google Cloud での Python の設定方法については、Python 開発環境の設定をご覧ください。
Python を設定したら、pip を使用してツールをインストールできます。
pip install https://github.com/GoogleCloudPlatform/healthcare-api-dicomweb-cli/archive/v1.0.zip
このツールを使用するには、Google Cloud サーバーへの認証が必要です。これは、以下のいずれかの方法で行えます。
GOOGLE_APPLICATION_CREDENTIALS
環境変数を設定するgcloud auth application-default login
を使用した Google Cloud CLI による認証
これらのオプションのいずれかを構成すると、ツールが自動的に認証情報を検出します。
DICOM データを保存する
DICOM データを保存するには、DICOM ストアを作成する必要があります。
Cloud Healthcare API は、DICOM データを保存するときに Store トランザクション RESTful ウェブサービスを実装します。 詳細については、Cloud Healthcare API DICOM 適合性宣言の Store トランザクションをご覧ください。
次の方法を使用して、DICOM データを保存できます。どちらの場合も、リクエストで application/dicom
Accept ヘッダーを渡す必要があります。
- DICOM インスタンス(通常は
.dcm
ファイル)を保存する DICOM JSON メタデータを JPEG ファイルと保存する
DICOM JSON メタデータを JPEG ファイルと保存するリクエストはすべてマルチパート メッセージで、
Content-Type
のmultipart/related
の部分で指定します。Content-Type
のmultipart/related
部分では、リクエストがその完了後に結合されるデータの複数の部分で構成されていることを示します。これらのデータのセットはそれぞれ、Content-Type
のboundary
部分で指定される境界を使用して分離する必要があります。
SOP_CLASS_UID
、SOP_INSTANCE_UID
、STUDY_INSTANCE_UID
、SERIES_INSTANCE_UID
の値は、指定されたメタデータから入力されます。UID は次の要件を満たす必要があります。
- ピリオドで区切られた数値のみを含めます。
- 保護医療情報(PHI)が含まれていません。
以下のサンプルは、DICOM ストアにインスタンスを保存する方法を示します。詳細については、projects.locations.datasets.dicomStores.storeInstances
をご覧ください。
DICOM インスタンスの保存
以下のサンプルは、DICOM インスタンスを保存する方法を示しています。詳細については、projects.locations.datasets.dicomStores.storeInstances
をご覧ください。
REST
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDDICOM_INSTANCE_FILE
: ローカルマシン上の DICOM インスタンス ファイルのパス(.dcm
接尾辞で終わる)
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/dicom" \
--data-binary @DICOM_INSTANCE_FILE \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"
PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-InFile DICOM_INSTANCE_FILE `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies" | Select-Object -Expand Content
Go
Java
Node.js
Python
DICOM インスタンスを保存するストレージ クラスを指定する(プレビュー)
デフォルトでは、projects.locations.datasets.dicomStores.storeInstances
メソッドは、標準ストレージ クラスの DICOM ストアに DICOM インスタンスを保存します。ストレージ クラスは、ローカルマシンから DICOM オブジェクトを保存するときに設定できます。詳細については、DICOM ストレージ クラスを変更するをご覧ください。
次のサンプルは、ローカルマシンから DICOM オブジェクトを保存するときにストレージ クラスを指定する方法を示しています。
curl
projects.locations.datasets.dicomStores.storeInstances
メソッドを使用します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDDICOM_INSTANCE_FILE
: ローカルマシン上の DICOM インスタンス ファイルのパス(.dcm
接尾辞で終わる)STORAGE_CLASS
:STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
の DICOM ストア内の DICOM インスタンスのストレージ クラス
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/dicom" \ -H "Storage-Class: STORAGE_CLASS" --data-binary @DICOM_INSTANCE_FILE \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"
リクエストが成功すると、サーバーは次のレスポンスを返します。
<NativeDicomModel> <DicomAttribute tag="00081190" vr="UR" keyword="RetrieveURL"> <Value number="1">https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID</Value> </DicomAttribute> <DicomAttribute tag="00081199" vr="SQ" keyword="ReferencedSOPSequence"> <Item number="1"> <DicomAttribute tag="00081150" vr="UI" keyword="ReferencedSOPClassUID"> <Value number="1">SOP_CLASS_UID</Value> </DicomAttribute> <DicomAttribute tag="00081155" vr="UI" keyword="ReferencedSOPInstanceUID"> <Value number="1">SOP_INSTANCE_UID</Value> </DicomAttribute> <DicomAttribute tag="00081190" vr="UR" keyword="RetrieveURL"> <Value number="1">https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID</Value> </DicomAttribute> </Item> </DicomAttribute> </NativeDicomModel>
PowerShell
projects.locations.datasets.dicomStores.storeInstances
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDDICOM_INSTANCE_FILE
: ローカルマシン上の DICOM インスタンス ファイルのパス(.dcm
接尾辞で終わる)STORAGE_CLASS
:STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
の DICOM ストア内の DICOM インスタンスのストレージ クラス
$cred = gcloud auth application-default print-access-token $headers = @{ "Authorization" = "Bearer $cred"; "Storage-Class" = "STORAGE_CLASS" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/dicom" ` -InFile DCM_FILE.dcm ` -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies" | Select-Object -Expand Content
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
<NativeDicomModel> <DicomAttribute tag="00081190" vr="UR" keyword="RetrieveURL"> <Value number="1">https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID</Value> </DicomAttribute> <DicomAttribute tag="00081199" vr="SQ" keyword="ReferencedSOPSequence"> <Item number="1"> <DicomAttribute tag="00081150" vr="UI" keyword="ReferencedSOPClassUID"> <Value number="1">SOP_CLASS_UID</Value> </DicomAttribute> <DicomAttribute tag="00081155" vr="UI" keyword="ReferencedSOPInstanceUID"> <Value number="1">SOP_INSTANCE_UID</Value> </DicomAttribute> <DicomAttribute tag="00081190" vr="UR" keyword="RetrieveURL"> <Value number="1">https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID</Value> </DicomAttribute> </Item> </DicomAttribute> </NativeDicomModel>
JSON メタデータと JPEG 画像からの DICOM インスタンスの作成
Cloud Healthcare API では、JSON メタデータ ファイルと JPEG ファイルを使用して DICOM インスタンスを作成できます。DICOM 解析とシリアル化を自身で実行せず、Cloud Healthcare API で実施させる場合は、JSON メタデータと JPEG ファイルから DICOM インスタンスを作成します。
このデータを格納する HTTP リクエストには、リクエストの Content-Type
に以下を含める必要があります。
multipart/related
メディアタイプ- MIME タイプ
application/dicom+json
boundary
区切り文字
次のサンプルは、JSON メタデータ ファイルを JPEG ファイルと一緒に保存する方法を示しています。
curl
次のサンプルでは、既存の JPEG 画像があることを前提としています。
JSON メタデータ ファイルを JPEG 画像とともに保存するには、3 つのステップがあります。
- JPEG 画像を含む DICOM インスタンスの JSON 表現を含むファイルを作成します。以下は、テンプレート ファイルです。
以下の 3 つの境界ファイルを作成します。
opening.file
: JSON メタデータ ファイルの開始境界が含まれています。middle.file
: JPEG 画像の中央境界が含まれています。closing.file
: メッセージのすべての部分に対する終了境界が含まれています。
JSON メタデータ ファイルと JPEG 画像を境界ファイルで囲み、
multipart-request.file
というファイルを作成します。
JSON メタデータ テンプレート ファイルでデフォルトで提供される次の値に注意してください。
- 転送構文 UID(
1.2.840.10008.1.2.4.50
)は、転送構文を JPEG ベースラインとして指定します。ほとんどの JPEG 画像は JPEG ベースライン形式です。Photometric Interpretation の値(YBR_FULL_422
)は、画像がグレースケールではなくカラーであることを示します。 BulkDataUri
は画像の任意の記述子であり、このテンプレートではjpeg-image
に設定されています。この値は、画像境界の作成時に使用されます。
SOP_CLASS_UID、SOP_INSTANCE_UID、STUDY_INSTANCE_UID、SERIES_INSTANCE_UID の値は、ピリオドで区切られる任意の数値です。DICOM では、インスタンス、患者、スタディ、シリーズに識別子の階層が使用されています。これらの変数の識別子の論理セットを選択してください。
SOP Class UID を、保存する画像のタイプを指定する標準 SOAP クラスの表からの値に置き換えます。
Rows は、JPEG 画像の高さ(ピクセル単位)に置き換えます。Columns は、JPEG 画像の幅(ピクセル単位)に置き換えます。
次の手順を行います。
次のテキストを
instance.json
という名前のファイルに保存し、変数を置き換えます(指定されている場合)。[{ "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]}, "00080005":{"vr":"CS","Value":["ISO_IR 192"]}, "00080016":{"vr":"UI","Value":["SOP_CLASS_UID"]}, "00080018":{"vr":"UI","Value":["SOP_INSTANCE_UID"]}, "0020000D":{"vr":"UI","Value":["STUDY_INSTANCE_UID"]}, "0020000E":{"vr":"UI","Value":["SERIES_INSTANCE_UID"]}, "00280002":{"vr":"US","Value":[3]}, "00280004":{"vr":"CS","Value":["YBR_FULL_422"]}, "00280006":{"vr":"US","Value":[0]}, "00280008":{"vr":"IS","Value":[1]}, "00280010":{"vr":"US","Value":[Rows]}, "00280011":{"vr":"US","Value":[Columns]}, "00280100":{"vr":"US","Value":[8]}, "00280101":{"vr":"US","Value":[8]}, "00280102":{"vr":"US","Value":[7]}, "00280103":{"vr":"US","Value":[0]}, "7FE00010":{"vr":"OB","BulkDataURI":"jpeg-image"} }]
開始境界(JSON メタデータ用)、中央境界(JPEG 画像用)、終了境界を作成するには、次のコマンドを実行します。
echo -ne "--DICOMwebBoundary\r\nContent-Type: application/dicom+json\r\n\r\n" > opening.file echo -ne "\r\n--DICOMwebBoundary\r\nContent-Location: jpeg-image\r\nContent-Type: image/jpeg; transfer-syntax=1.2.840.10008.1.2.4.50\r\n\r\n" > middle.file echo -ne "\r\n--DICOMwebBoundary--" > closing.file
JPEG 画像を中央境界と終了境界内でラップします。Cloud Healthcare API に送信する出力ファイルは、
multipart-request.file
と称されます。cat opening.file instance.json middle.file image.jpg closing.file > multipart-request.file
POST
リクエストを作成し、次の情報を指定します。- 親データセットの名前
- DICOM ストアの名前
multipart-request.file
ファイル- アクセス トークン
次のサンプルは、curl
を使用した POST
リクエストを示しています。
curl -X POST \ -H "Content-Type: multipart/related; type=\"application/dicom+json\"; boundary=DICOMwebBoundary" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies \ --data-binary @multipart-request.file
リクエストが成功すると、サーバーは XML 形式のレスポンスを返します。
<NativeDicomModel> <DicomAttribute tag="00081190" vr="UR" keyword="RetrieveURL"> <Value number="1">https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID</Value> </DicomAttribute> <DicomAttribute tag="00081199" vr="SQ" keyword="ReferencedSOPSequence"> <Item number="1"> <DicomAttribute tag="00081150" vr="UI" keyword="ReferencedSOPClassUID"> <Value number="1">SOP_CLASS_UID</Value> </DicomAttribute> <DicomAttribute tag="00081155" vr="UI" keyword="ReferencedSOPInstanceUID"> <Value number="1">SOP_INSTANCE_UID</Value> </DicomAttribute> <DicomAttribute tag="00081190" vr="UR" keyword="RetrieveURL"> <Value number="1">https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID</Value> </DicomAttribute> </Item> </DicomAttribute> </NativeDicomModel>
DICOMweb CLI を使用する
次のサンプルは、Cloud Healthcare API DICOMweb CLI を使用して 1 つ以上の DICOM インスタンスを保存する方法を示しています。DICOMweb CLI の GitHub リポジトリには、これ以外にもサンプルが用意されています。
単一の DICOM インスタンスを保存する:
dcmweb \ https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb \ store DCM_FILE
リクエストが成功すると、サーバーは次の例のようなレスポンスを返します。
TIMESTAMP -- DCM_FILE.dcm uploaded as https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID TIMESTAMP -- INSTANCE_UID TIMESTAMP -- Transferred SIZE in COUNT files
ワイルドカードを使用して複数のファイルを並列に保存する:
次のサンプルは、現在の作業ディレクトリから複数の DICOM ファイルを並列で再帰的に格納する方法を示しています。ファイルを並列に保存するには、-m
フラグを追加します。
dcmweb -m \ https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb \ store "./**.dcm"
リクエストが成功すると、サーバーは次の例のようなレスポンスを返します。
TIMESTAMP -- DCM_FILE_1.dcm uploaded as https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID TIMESTAMP -- INSTANCE_UID TIMESTAMP -- DCM_FILE_2.dcm uploaded as https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID TIMESTAMP -- INSTANCE_UID TIMESTAMP -- DCM_FILE_3.dcm uploaded as https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID TIMESTAMP -- INSTANCE_UID ... TIMESTAMP -- Transferred SIZE in COUNT files
DICOM データを検索する
スタディ、シリーズ、インスタンス、フレームを検索できます。以下のサンプルは、DICOM ストア内のインスタンスを検索するための Search トランザクションの実装を示しています。詳細については、Cloud Healthcare API DICOM 適合性宣言の Search トランザクションをご覧ください。
以下のサンプルは、DICOM ストア内のインスタンスを検索する方法を示しています。詳細については、projects.locations.datasets.dicomStores.searchForInstances
をご覧ください。
REST
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの ID
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/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/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content
API Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
Go
Java
Node.js
Python
DICOM タグを使用して検索する
クエリ パラメータの形式で DICOM タグをリクエストに含めることで、検索を絞り込むことができます。たとえば、患者の名前を含むスタディを検索するなどができます。
前のサンプルと同様に、次のサンプルは、DICOM ストア内のスタディを検索するためのSearch トランザクションの実装を示しています。ただし、これらのサンプルでは患者の名前が「Sally Zhang」であるスタディを検索する方法を示しています。
次のサンプルは、DICOM インスタンスのメタデータの一部で、患者の名前が表示されています。
...
{
"vr": "PN",
"Value": [
{
"Alphabetic": "Sally Zhang"
}
]
}
...
患者に関連する DICOM ストア内のスタディを検索するには、リクエストに PatientName
DICOM タグで検索するクエリ パラメータを追加します。Cloud Healthcare API でサポートされる検索パラメータの一覧については、検索トランザクションのドキュメントをご覧ください。
REST
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの ID
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies?PatientName=Sally%20Zhang"
PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies?PatientName=Sally%20Zhang" | Select-Object -Expand Content
API Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
Go
Java
Node.js
Python
DICOMweb CLI を使用する
次のサンプルは、Cloud Healthcare API DICOMweb CLI を使用して DICOM ストア内のインスタンスを検索する方法を示しています。DICOMweb CLI の GitHub リポジトリには、検索をフィルタする方法など、これ以外のサンプルが用意されています。
dcmweb \ https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb \ search instances
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
[ { "00080005":{ "vr":"CS", "Value":[ "CODE_STRING" ] }, "00080016":{ "vr":"UI", "Value":[ "UNIQUE_IDENTIFIER" ] }, "00080018":{ "vr":"UI", "Value":[ "UNIQUE_IDENTIFIER" ] }, "00080020":{ "vr":"DA", "Value":[ "DATE_TIME" ] }, "00080030":{ "vr":"TM", "Value":[ "TIME" ] }, "00080060":{ "vr":"CS", "Value":[ "CODE_STRING" ] }, "0008103E":{ "vr":"LO", "Value":[ "LONG_STRING" ] }, "00100010":{ "vr":"PN", "Value":[ { "Alphabetic":"Anonymized" } ] }, }, ... ]
DICOM データを取得する
Cloud Healthcare API は、DICOM ストア内のスタディ、シリーズ、インスタンス、フレームを取得するための Retrieve トランザクションを実装しています。
詳細については、Cloud Healthcare API DICOM 適合性宣言の Retrieve トランザクションをご覧ください。
スタディを取得する
以下のサンプルは、スタディを取得する方法を示しています。詳細については、Cloud Healthcare API DICOM 適合性宣言の DICOM のスタディ / シリーズ / インスタンスをご覧ください。
出力ファイルを指定するときは、.multipart
のような拡張子を使用します。次に、マルチパート ファイルを解析して、スタディ内の個々のシリーズとインスタンスを取得します。
詳細については、projects.locations.datasets.dicomStores.studies.retrieveStudy
をご覧ください。
curl
スタディを取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- 出力ファイル
- アクセス トークン
次のサンプルは、curl
を使用した GET
リクエストを示しています。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: multipart/related; type=application/dicom; transfer-syntax=*" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID" \ --output FILENAME.multipart
リクエストが成功すると、DICOM ファイルが自身のマシンに書き込まれます。
PowerShell
スタディを取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- 出力ファイル
- アクセス トークン
次のサンプルは、Windows PowerShell を使用した GET
リクエストを示しています。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred"; Accept = "multipart/related; type=application/dicom; transfer-syntax=*" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID" | Select-Object -Expand Content -OutFile FILENAME.multipart `
リクエストが成功すると、DICOM ファイルが自身のマシンに書き込まれます。
Go
Java
Node.js
Python
インスタンスを取得する
次のサンプルは、インスタンスを取得する方法を示します。詳細については、Cloud Healthcare API DICOM 適合性宣言の DICOM インスタンスをご覧ください。
インスタンスを取得する場合は、Accept: application/dicom
HTTP ヘッダーを使用すると、マルチパート境界を解析する必要がなくなります。transfer-syntax=*
を追加すると、ファイルを元々格納された形式で返されることで、コード変換を行う必要がなくなります。
詳細については、projects.locations.datasets.dicomStores.studies.series.instances.retrieveInstance
をご覧ください。
curl
インスタンスを取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- シリーズ UID、インスタンス UID
- 出力ファイル名
- アクセス トークン
次のサンプルは、curl
を使用した GET
リクエストを示しています。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: application/dicom; transfer-syntax=*" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID" \ --output FILENAME.dcm
リクエストが成功すると、DICOM ファイルが自身のマシンに書き込まれます。
PowerShell
インスタンスを取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- シリーズ UID
- インスタンス UID
- 出力ファイル名
- アクセス トークン
次のサンプルは、Windows PowerShell を使用した GET
リクエストを示しています。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred"; Accept = "application/dicom; transfer-syntax=*" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID" -OutFile FILENAME.dcm `
リクエストが成功すると、DICOM ファイルが自身のマシンに書き込まれます。
Go
Java
Node.js
Python
一般ユーザー向け画像形式を取得する
次のサンプルは、レンダリングされたリソースの Cloud Healthcare API 実装を使用して、JPEG や PNG などの一般ユーザー向け画像形式を取得する方法を示しています。詳細については、Cloud Healthcare API DICOM 適合性宣言のレンダリングされたリソースをご覧ください。
詳細については、projects.locations.datasets.dicomStores.studies.series.instances.retrieveRendered
をご覧ください。
curl
画像を取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- シリーズ UID
- インスタンス UID
- 出力ファイル名
- アクセス トークン
次のサンプルは、curl
を使用して GET
リクエストを行い、PNG 画像を取得する方法を示しています。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: image/png" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/rendered" \ --output FILENAME.png
リクエストが成功すると、PNG ファイルが自身のマシンに書き込まれます。
PowerShell
画像を取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- シリーズ UID
- インスタンス UID
- 出力ファイル名
- アクセス トークン
次のサンプルは、Windows PowerShell を使用して GET
リクエストを行い、PNG 画像を取得する方法を示しています。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred"; Accept = "image/png" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/rendered" -OutFile FILENAME.png `
リクエストが成功すると、PNG ファイルが自身のマシンに書き込まれます。
Go
Java
Node.js
Python
メタデータの取得
スタディおよびシリーズ内のすべてのインスタンスのメタデータを取得できます。次の例は、インスタンスのメタデータを取得する方法を示しています。詳細については、Cloud Healthcare API DICOM 適合性宣言のメタデータ リソースをご覧ください。
詳細については、projects.locations.datasets.dicomStores.studies.series.instances.retrieveMetadata
をご覧ください。
retrieveMetadata
を呼び出すと、includefield=all
クエリ パラメータでインスタンスを検索したときに返されるものと同じフィールドのセットが返されます。アプリケーションがレイテンシの影響を受けやすく、すべてのフィールドではなく特定のフィールド セットのメタデータを取得する場合は、retrieveMetadata
を呼び出さないでください。代わりに、searchForInstances
メソッドのいずれかを呼び出して、フィールドを指定します。レスポンスはより小さなフィールド セットになります。より小さなフィールドのセットは、レイテンシの影響を受けやすいアプリケーションに役立ちます。
デフォルトでは、retrieveMetadata
は JSON レスポンスを返します。XML レスポンスを返すには、リクエストに Accept: multipart/related; type="application/dicom+xml"
HTTP ヘッダーを渡します。
REST
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTUDY_INSTANCE_UID
: スタディ インスタンスの一意の識別子SERIES_INSTANCE_UID
: シリーズ インスタンスの一意の識別子INSTANCE_UID
: インスタンスの一意の識別子
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/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/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/metadata" | Select-Object -Expand Content
API Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
一括データを取得する
保存されたインスタンス内の特定のバルクデータ タグの RAW バイトを取得できます。プレビュー メソッドを使用してインスタンスからメタデータを取得する場合、サポートされているバルクデータ タグに対して BulkDataURIs が生成されます(Bulkdata の定義をご覧ください)。
詳細については、projects.locations.datasets.dicomStores.studies.series.instances.bulkdata.retrieveBulkdata
をご覧ください。
次の例では、バルクデータ タグの既知のパスに基づいて、リクエスト URL を直接作成します(BulkDataURI の取得に retrieveMetadata
は使用しません)。
curl
一括データを取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- シリーズ UID
- インスタンス UID
- ターゲットの一括データタグのパス
- インデックス i のシーケンス(YYYY,YYYY)内のタグ(XXXX,XXXX)の場合、パスは「YYYYYYYY/i/XXXXXXXX」になります。
- 出力ファイル名
- アクセス トークン
次のサンプルは、curl
を使用して GET
リクエストで DAT ファイルを取得する方法を示しています。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: application/octet-stream; transfer-syntax=*" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/BULKDATA_PATH" \ --output FILENAME.dat
リクエストが成功すると、インスタンスの未加工バイトを含む DAT ファイルがマシンに書き込まれます。
PowerShell
一括データを取得するには、GET
リクエストを行い、次の情報を指定します。
- 親データセットの名前
- DICOM ストアの名前
- スタディの一意の識別子(UID)
- シリーズ UID
- インスタンス UID
- ターゲットの一括データタグのパス
- インデックス i のシーケンス(YYYY,YYYY)内のタグ(XXXX,XXXX)の場合、パスは「YYYYYYYY/i/XXXXXXXX」になります。
- 出力ファイル名
- アクセス トークン
次のサンプルは、Windows PowerShell を使用して GET
リクエストで DAT ファイルを取得する方法を示しています。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred"; Accept = "application/octet-stream; transfer-syntax=*" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/BULKDATA_PATH" -OutFile FILENAME.DAT `
リクエストが成功すると、インスタンスの未加工バイトを含む DAT ファイルがマシンに書き込まれます。
DICOMweb CLI を使用する
次のサンプルは、Cloud Healthcare API DICOMweb CLI を使用して DICOM ストア内のすべてのインスタンスを取得し、現在の作業ディレクトリ内にある自身のマシンにそれを保存する方法を示しています。DICOMweb CLI の GitHub リポジトリには、これ以外にもサンプルが用意されています。
dcmweb \ https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb \ retrieve
リクエストが成功すると、サーバーは次のようなレスポンスを返し、DICOM ファイルが自身のマシンに書き込まれます。
TIMESTAMP -- Saving files into ./ TIMESTAMP -- Transferred SIZE in COUNT files
スタディ、シリーズ、インスタンスを削除する
Cloud Healthcare API は、DICOM のスタディ、シリーズ、インスタンスを削除するための独自のウェブサービスを実装しています。このサービスは DICOMweb 標準サービスでは使用されません。詳細については、Cloud Healthcare API DICOM 適合性宣言のセクションを削除するをご覧ください。
スタディとシリーズの削除リクエストは、長時間実行オペレーションを返します。オペレーションが完了すると、スタディまたはシリーズのすべてのインスタンスが削除されます。
インスタンスの削除リクエストは、長時間実行オペレーションを返すのではなく、次のような空のレスポンス本文を返します。
{}
以下のサンプルは、DICOM スタディを削除する方法を示します。詳細については、projects.locations.datasets.dicomStores.studies.delete
をご覧ください。
REST
スタディを削除します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセットDICOM_STORE_ID
: DICOM ストアの IDSTUDY_INSTANCE_UID
: スタディ インスタンスの一意の識別子
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method DELETE `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
次のような JSON レスポンスが返されます。
長時間実行オペレーションのステータスを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDLOCATION
: データセットの場所DATASET_ID
: DICOM ストアの親データセット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] をクリックします。
次のような JSON レスポンスが返されます。
Go
Java
Node.js
Python
DICOMweb CLI を使用する
次のサンプルは、Cloud Healthcare API DICOMweb CLI を使用してスタディを削除する方法を示しています。
dcmweb \ https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb \ delete studies/STUDY_INSTANCE_UID
リクエストが成功すると、サーバーは、削除操作が完了するまで、CLI ツールがポーリングする操作を返します。