このページでは、Cloud Healthcare API の DICOM スタディ、シリーズ、インスタンスをインプレースで更新してパッチを適用する方法について説明します。Cloud Healthcare API のストアに DICOM データを入力する方法については、 DICOMweb 標準を使用するをご覧ください。
DICOM インスタンスの更新
DICOM インスタンスは、.dcm
ファイルの新しいバージョンをアップロードすることで置き換えることができます。
storeInstances
と同様に、マルチパート ファイルを使用して
複数のインスタンスを一度に更新することもできます(多くの場合、複数のインスタンスを含む
スタディまたはシリーズを更新する場合に使用します)。更新後、元のインスタンスは完全に置き換えられます。
storeInstances とは異なり、
JSON メタデータを使用してインスタンス全体を更新することはできません。JSON を使用した部分的な更新については、DICOM メタデータにパッチを適用するをご覧ください。
インスタンスの更新は「アップサート」として扱われます。インスタンスが存在する場合は、更新されます。インスタンスが存在しない場合は、インスタンスが作成されてストアに挿入されます。
新しいインスタンスを挿入すると、指定されたメタデータから SOP_CLASS_UID、SOP_INSTANCE_UID、STUDY_INSTANCE_UID、SERIES_INSTANCE_UID
の値が収集されます。UID は次の要件を満たしている必要があります。
- ピリオドで区切られた数値のみを含みます。
- 保護医療情報(PHI)が含まれていません。
次の例は、DICOM ストア内のインスタンスを更新する方法を示しています。詳細については、
をご覧ください
projects.locations.datasets.dicomStores.updateInstances。
curl
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID: プロジェクトの ID Google CloudLOCATION: データセットの場所DATASET_ID: DICOM ストアの親データセットDICOM_STORE_ID: DICOM ストアの IDDICOM_INSTANCE_FILE: ローカルマシン上の DICOM インスタンス ファイルへのパス(.dcm接尾辞で終わる)
次のサンプルは、curl を使用した PUT リクエストを示しています。
curl -X PUT \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/dicom" \ --data-binary @DICOM_INSTANCE_FILE \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"
出力は次の XML レスポンスです。
複数のインスタンスを一度に更新する
次の例は、マルチパート メッセージを使用して、複数のインスタンスで構成される DICOM スタディまたはシリーズを更新する方法を示しています。
curl
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID: プロジェクトの ID Google CloudLOCATION: データセットの場所DATASET_ID: DICOM ストアの親データセットDICOM_STORE_ID: DICOM ストアの IDMULTIPART_FILE: ローカルマシン上のマルチパート ファイルへのパス。このファイルには複数の DICOM インスタンスが含まれており、それぞれが境界で区切られています。BOUNDARY: マルチパート ファイル内の DICOM インスタンスを区切るために使用される境界
次のサンプルは、curl を使用した PUT リクエストを示しています。
curl -X PUT \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: multipart/related; type=application/dicom; boundary=BOUNDARY" \ --data-binary @MULTIPART_FILE \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"
出力は次の XML レスポンスです。
DICOM メタデータにパッチを適用する
DICOM タグは、スタディー、シリーズ、またはインスタンス レベルで、追加、削除、編集できます。各レベルの動作は、次のとおりです。
-
projects.locations.datasets.dicomStores.studies.updateMetadataを使用してスタディレベルのタグを編集すると、そのスタディのすべての インスタンスに適用されます。長時間実行オペレーションが返されます -
projects.locations.datasets.dicomStores.studies.series.updateMetadataを使用してシリーズレベルのタグを編集する場合、編集内容はそのシリーズのすべてのインスタンスに適用されます。長時間実行オペレーションが返されます -
projects.locations.datasets.dicomStores.studies.series.instances.updateMetadataを使用してインスタンス レベルのタグを編集すると、 指定したインスタンスのみに適用されます。編集は同期的に行われ、編集されたインスタンスに関する JSON メタデータが返されます
長時間実行オペレーションを返すパッチの場合、インスタンスにパッチを適用できなかった場合は、 パッチはCloud Loggingに記録されます。失敗したインスタンスの数は、関連するログへのリンクとともにオペレーション メタデータで返されます。
JSON パッチ
タグ編集の構文は、
JSON Patch 標準に準拠しています。
add、replace、remove
オペレーションのみがサポートされています。タグは、公開キーワード(タグが公開されている場合)または 8 桁の 16 進数 ID
を使用して指定できます。すべてのタグパスには / 接頭辞を付ける必要があります。タグを add または
replace する場合は、タグ識別子とともに VR とタグの値を指定する必要があります。タグを remove
する場合は、タグ ID のみ指定する必要があります。
シーケンス内のタグの編集と、シーケンスの置換がサポートされています。
パッチを使用してサポートされていないものについては、パッチの制限事項をご覧ください。シーケンス内のタグを指定するには、シーケンスと子タグを項目インデックスとバックスラッシュで区切ります。次に、ReferencedInstanceSequence
の 2 番目の項目にタグ InstanceCreationDate を add する例を示します(シーケンス項目は 0
から始まるインデックスです)。
[
{
"op": "add",
"path": "/ReferencedInstanceSequence/1/InstanceCreationDate",
"value": {
"vr": "DA",
"Value": [ "20240501" ]
}
}
]
完全なシーケンスを追加する場合(または完全なシーケンスを置き換える場合)、JSON Patch エントリの value フィールドはシーケンスの
DICOM JSON 表現である必要があります。次に、2 つの要素を持つ OtherPatientIDs
シーケンスをインスタンスに追加する例を示します。
[
{
"op": "add",
"path": "/OtherPatientIDs",
"value": {
"vr": "SQ",
"Value": [
{
"00100020": {
"vr": "LO",
"Value": [ "54321" ]
},
"00100021": {
"vr": "LO",
"Value": [ "Hospital B" ]
}
},
{
"00100020": {
"vr": "LO",
"Value": [ "24680" ]
},
"00100021": {
"vr": "LO",
"Value": [ "Hospital C" ]
}
}
]
}
}
]
単一インスタンスにパッチを適用する
curl
単一インスタンスの DICOM タグを編集するには、PATCH リクエストを送信して次の情報を指定します。
PROJECT_ID: プロジェクトの ID Google CloudLOCATION: データセットの場所DATASET_ID: DICOM ストアの親データセットDICOM_STORE_ID: DICOM ストアの IDSTUDY_UID: DICOM インスタンスのスタディ UIDSERIES_UID: DICOM インスタンスのシリーズ UIDINSTANCE_UID: DICOM インスタンスのインスタンス UID
次のサンプルは、curl を使用した PATCH リクエストを示しています。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data '[ { "op": "add", "path": "/ProductName", "value": { "vr": "LO", "Value": [ "My Product" ] } }, { "op": "replace", "path": "/PatientName", "value": { "vr": "PN", "Value": [ "New Patient Name" ] } }, { "op": "remove", "path": "/Manufacturer" } ]' \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID/metadata"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
"studyUID": "STUDY_UID",
"seriesUID": "SERIES_UID",
"instanceUID": "INSTANCE_UID",
"createTimestamp": "CREATE_TIMESTAMP",
"metadata": {
// Full DICOM JSON metadata for the instance after edits applied
}
}
スタディまたはシリーズにパッチを適用する
curl
特定のスタディ内で全インスタンスの DICOM タグを編集するには、PATCH リクエストで、次の情報を指定します。
PROJECT_ID: プロジェクトの ID Google CloudLOCATION: データセットの場所DATASET_ID: DICOM ストアの親データセットDICOM_STORE_ID: DICOM ストアの IDSTUDY_UID: DICOM スタディのスタディ UID
次のサンプルは、curl を使用した PATCH リクエストを示しています。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data '[ { "op": "add", "path": "/ProductName", "value": { "vr": "LO", "Value": [ "My Product" ] } }, { "op": "replace", "path": "/PatientName", "value": { "vr": "PN", "Value": [ "New Patient Name" ] } }, { "op": "remove", "path": "/Manufacturer" } ]' \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/metadata"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{
"name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}
レスポンスにはオペレーション ID が含まれています。オペレーションのステータスを追跡し
詳細を表示するには、
オペレーションの get メソッドを使用します。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。
{
"name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
"apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomWebService.UpdateStudyMetadata",
"createTime": "CREATE_TIME",
"endTime": "END_TIME",
"logsUrl": "CLOUD_LOGGING_URL",
"counter": {
"success": "1" // Number of instances updated in the study
}
},
"done": true,
"response": {
"@type": "..."
}
}
制限事項
DICOM タグの編集時に、次の制限事項と追加の動作が適用されます。
- 次のタグは編集できません。
SOPInstanceUID (0008,0018)SeriesInstanceUID (0020,000E)StudyInstanceUID (0020,000D)Modality (0008,0060)ModalitiesInStudy (0008,0061)SpecificCharacterSet (0008,0005)- グループ番号が「0008」未満のタグ
- バルクデータと見なされるタグ( バルクデータの定義を参照)
- 上記の定義に加えて、VR が OD、OF、OL、OV、SV、UV のタグは、長さに関係なく、
patch(addまたはreplaceオペレーション)を使用して追加できません。
- バルクデータと見なされるタグを含むシーケンスは編集できません。
- つまり、元のシーケンスに含まれるタグがバルクデータと見なされる場合、シーケンス タグに対する
replaceまたはremoveオペレーションは失敗します。 - また、新しいシーケンスに含まれるタグがバルクデータと見なされる場合、シーケンス タグに対する
replaceまたはaddオペレーションは失敗します。
- つまり、元のシーケンスに含まれるタグがバルクデータと見なされる場合、シーケンス タグに対する
- 存在しないタグを
replaceまたはremoveしようとすると、Cloud Healthcare API でエラーが返され、編集は失敗します。 - 既存のタグを
addしようとすると、編集操作は、置換操作を呼び出した場合と同じように動作します。置換操作では、タグの既存の値を、操作で指定された新しい値に置き換えます。 - シーケンスの追加、置換、削除は可能ですが、シーケンス内の項目のタグを編集することもできますが、シーケンス内の個々の項目を追加、置換、削除することはできません。
- 実際には、インデックスで終わるタグパスを使用した編集は拒否されます(例:
/ReferencedSeriesSequence/0)。 - シーケンス内の個々の項目を変更する必要がある場合は、変更を適用したコピーで親シーケンス全体を置き換えます。
- 実際には、インデックスで終わるタグパスを使用した編集は拒否されます(例:
DICOM Studio を使用して更新する
DICOM Studio を使用して、スタディ、シリーズ、インスタンスの DICOM メタデータを更新できます。
DICOM Studio を使用して DICOM メタデータを更新するには:
- 更新するスタディ、シリーズ、インスタンス を検索します。
- 検索結果で、項目をクリックして詳細ページに移動します。
- [メタデータ] タブをクリックします。
- 編集するタグのチェックボックスをオンにして、[編集] をクリックします。
- 編集パネルで、変更するタグを開きます。
- タグのキーワード、VR、値を編集します。
- [保存] をクリックします。
すべての制限事項は、ユーザー インターフェースにも適用されます。また、ユーザー インターフェースには次の制限があります。
- タグ編集インターフェースでは、値の多重度(VM)が 1 より大きいタグの編集はサポートされていません。
- タグ編集インターフェースでは、想定される VR または値の型に関するガイダンスや検証は提供されません。