更新影像集元数据 - AWS HealthImaging

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

更新影像集元数据

使用UpdateImageSetMetadata操作更新 AWS 中的图像集元数据 HealthImaging。您可以使用此异步过程添加、更新和移除影像集元数据属性,这些属性是导入期间创建的 DICOM 标准化元素的表现形式。使用 UpdateImageSetMetadata 操作,您还可以移除 Series 和 SOP 实例,以使影像集与外部系统保持同步,并取消对影像集元数据的识别。有关更多信息,请参阅 AWS HealthImaging API 参考UpdateImageSetMetadata中的。

注意

真实的 DICOM 导入需要更新、添加和移除影像集元数据中的属性。更新影像集元数据时,请记住以下几点:

下图表示中正在更新的影像集元数据 HealthImaging。

该图显示了更新影像集元数据的样子 HealthImaging。
更新影像集元数据

根据您对 AWS 的访问偏好选择一个选项卡 HealthImaging。

CLI
AWS CLI

示例 1:在图像集元数据中插入或更新属性

以下 update-image-set-metadata 示例在图像集元数据中插入或更新属性。

aws medical-imaging update-image-set-metadata \ --datastore-id 12345678901234567890123456789012 \ --image-set-id ea92b0d8838c72a3f25d00d13616f87e \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --update-image-set-metadata-updates file://metadata-updates.json

metadata-updates.json 的内容

{ "DICOMUpdates": { "updatableAttributes": "{\"SchemaVersion\":1.1,\"Patient\":{\"DICOM\":{\"PatientName\":\"MX^MX\"}}}" } }

输出:

{ "latestVersionId": "2", "imageSetWorkflowStatus": "UPDATING", "updatedAt": 1680042257.908, "imageSetId": "ea92b0d8838c72a3f25d00d13616f87e", "imageSetState": "LOCKED", "createdAt": 1680027126.436, "datastoreId": "12345678901234567890123456789012" }

示例 2:从图像集元数据中删除属性

以下 update-image-set-metadata 示例从图像集元数据中删除属性。

aws medical-imaging update-image-set-metadata \ --datastore-id 12345678901234567890123456789012 \ --image-set-id ea92b0d8838c72a3f25d00d13616f87e \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --update-image-set-metadata-updates file://metadata-updates.json

metadata-updates.json 的内容

{ "DICOMUpdates": { "removableAttributes": "{\"SchemaVersion\":1.1,\"Study\":{\"DICOM\":{\"StudyDescription\":\"CHEST\"}}}" } }

输出:

{ "latestVersionId": "2", "imageSetWorkflowStatus": "UPDATING", "updatedAt": 1680042257.908, "imageSetId": "ea92b0d8838c72a3f25d00d13616f87e", "imageSetState": "LOCKED", "createdAt": 1680027126.436, "datastoreId": "12345678901234567890123456789012" }

示例 3:从图像集元数据中删除实例

以下 update-image-set-metadata 示例从图像集元数据中删除实例。

aws medical-imaging update-image-set-metadata \ --datastore-id 12345678901234567890123456789012 \ --image-set-id ea92b0d8838c72a3f25d00d13616f87e \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --update-image-set-metadata-updates file://metadata-updates.json

metadata-updates.json 的内容

{ "DICOMUpdates": { "removableAttributes": "{\"SchemaVersion\": 1.1,\"Study\": {\"Series\": {\"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1\": {\"Instances\": {\"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1\": {}}}}}}" } }

输出:

{ "latestVersionId": "2", "imageSetWorkflowStatus": "UPDATING", "updatedAt": 1680042257.908, "imageSetId": "ea92b0d8838c72a3f25d00d13616f87e", "imageSetState": "LOCKED", "createdAt": 1680027126.436, "datastoreId": "12345678901234567890123456789012" }

示例 4:将图像集恢复到以前的版本

以下update-image-set-metadata示例说明如何将图像集恢复到以前的版本。 CopyImageSet 和 UpdateImageSetMetadata 操作会创建图像集的新版本。

aws medical-imaging update-image-set-metadata \ --datastore-id 12345678901234567890123456789012 \ --image-set-id 53d5fdb05ca4d46ac7ca64b06545c66e \ --latest-version-id 3 \ --cli-binary-format raw-in-base64-out \ --update-image-set-metadata-updates '{"revertToVersionId": "1"}'

输出:

{ "datastoreId": "12345678901234567890123456789012", "imageSetId": "53d5fdb05ca4d46ac7ca64b06545c66e", "latestVersionId": "4", "imageSetState": "LOCKED", "imageSetWorkflowStatus": "UPDATING", "createdAt": 1680027126.436, "updatedAt": 1680042257.908 }

示例 5:向实例添加私有 DICOM 数据元素

以下 update-image-set-metadata 示例演示如何将私有元素添加到图像集中的指定实例。DICOM 标准允许将私有数据元素用于通信标准数据元素中无法包含的信息。您可以通过UpdateImageSetMetadata 操作创建、更新和删除私有数据元素。

aws medical-imaging update-image-set-metadata \ --datastore-id 12345678901234567890123456789012 \ --image-set-id 53d5fdb05ca4d46ac7ca64b06545c66e \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --force \ --update-image-set-metadata-updates file://metadata-updates.json

metadata-updates.json 的内容

{ "DICOMUpdates": { "updatableAttributes": "{\"SchemaVersion\": 1.1,\"Study\": {\"Series\": {\"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1\": {\"Instances\": {\"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1\": {\"DICOM\": {\"001910F9\": \"97\"},\"DICOMVRs\": {\"001910F9\": \"DS\"}}}}}}}" } }

输出:

{ "latestVersionId": "2", "imageSetWorkflowStatus": "UPDATING", "updatedAt": 1680042257.908, "imageSetId": "53d5fdb05ca4d46ac7ca64b06545c66e", "imageSetState": "LOCKED", "createdAt": 1680027126.436, "datastoreId": "12345678901234567890123456789012" }

示例 6:更新实例的私有 DICOM 数据元素

以下 update-image-set-metadata 示例演示如何更新属于图像集内某个实例的私有数据元素的值。

aws medical-imaging update-image-set-metadata \ --datastore-id 12345678901234567890123456789012 \ --image-set-id 53d5fdb05ca4d46ac7ca64b06545c66e \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --force \ --update-image-set-metadata-updates file://metadata-updates.json

metadata-updates.json 的内容

{ "DICOMUpdates": { "updatableAttributes": "{\"SchemaVersion\": 1.1,\"Study\": {\"Series\": {\"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1\": {\"Instances\": {\"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1\": {\"DICOM\": {\"00091001\": \"GE_GENESIS_DD\"}}}}}}}" } }

输出:

{ "latestVersionId": "2", "imageSetWorkflowStatus": "UPDATING", "updatedAt": 1680042257.908, "imageSetId": "53d5fdb05ca4d46ac7ca64b06545c66e", "imageSetState": "LOCKED", "createdAt": 1680027126.436, "datastoreId": "12345678901234567890123456789012" }

示例 7:使用强制参数更新 SOPInstance UID

以下update-image-set-metadata示例说明如何使用 force 参数覆盖 DICOM 元数据约束来更新 SOPInstance UID。

aws medical-imaging update-image-set-metadata \ --datastore-id 12345678901234567890123456789012 \ --image-set-id 53d5fdb05ca4d46ac7ca64b06545c66e \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --force \ --update-image-set-metadata-updates file://metadata-updates.json

metadata-updates.json 的内容

{ "DICOMUpdates": { "updatableAttributes": "{\"SchemaVersion\":1.1,\"Study\":{\"Series\":{\"1.3.6.1.4.1.5962.99.1.3633258862.2104868982.1369432891697.3656.0\":{\"Instances\":{\"1.3.6.1.4.1.5962.99.1.3633258862.2104868982.1369432891697.3659.0\":{\"DICOM\":{\"SOPInstanceUID\":\"1.3.6.1.4.1.5962.99.1.3633258862.2104868982.1369432891697.3659.9\"}}}}}}}" } }

输出:

{ "latestVersionId": "2", "imageSetWorkflowStatus": "UPDATING", "updatedAt": 1680042257.908, "imageSetId": "53d5fdb05ca4d46ac7ca64b06545c66e", "imageSetState": "LOCKED", "createdAt": 1680027126.436, "datastoreId": "12345678901234567890123456789012" }

有关更多信息,请参阅《AWS HealthImaging 开发者指南》中的更新图像集元数据

Java
适用于 Java 的 SDK 2.x
/** * Update the metadata of an AWS HealthImaging image set. * * @param medicalImagingClient - The AWS HealthImaging client object. * @param datastoreId - The datastore ID. * @param imageSetId - The image set ID. * @param versionId - The version ID. * @param metadataUpdates - A MetadataUpdates object containing the updates. * @param force - The force flag. * @throws MedicalImagingException - Base exception for all service exceptions thrown by AWS HealthImaging. */ public static void updateMedicalImageSetMetadata(MedicalImagingClient medicalImagingClient, String datastoreId, String imageSetId, String versionId, MetadataUpdates metadataUpdates, boolean force) { try { UpdateImageSetMetadataRequest updateImageSetMetadataRequest = UpdateImageSetMetadataRequest .builder() .datastoreId(datastoreId) .imageSetId(imageSetId) .latestVersionId(versionId) .updateImageSetMetadataUpdates(metadataUpdates) .force(force) .build(); UpdateImageSetMetadataResponse response = medicalImagingClient.updateImageSetMetadata(updateImageSetMetadataRequest); System.out.println("The image set metadata was updated" + response); } catch (MedicalImagingException e) { System.err.println(e.awsErrorDetails().errorMessage()); throw e; } }

用例 #1: 插入或更新属性。

final String insertAttributes = """ { "SchemaVersion": 1.1, "Study": { "DICOM": { "StudyDescription": "CT CHEST" } } } """; MetadataUpdates metadataInsertUpdates = MetadataUpdates.builder() .dicomUpdates(DICOMUpdates.builder() .updatableAttributes(SdkBytes.fromByteBuffer( ByteBuffer.wrap(insertAttributes .getBytes(StandardCharsets.UTF_8)))) .build()) .build(); updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId, versionid, metadataInsertUpdates, force);

用例 #2: 移除属性。

final String removeAttributes = """ { "SchemaVersion": 1.1, "Study": { "DICOM": { "StudyDescription": "CT CHEST" } } } """; MetadataUpdates metadataRemoveUpdates = MetadataUpdates.builder() .dicomUpdates(DICOMUpdates.builder() .removableAttributes(SdkBytes.fromByteBuffer( ByteBuffer.wrap(removeAttributes .getBytes(StandardCharsets.UTF_8)))) .build()) .build(); updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId, versionid, metadataRemoveUpdates, force);

用例 #3: 移除实例。

final String removeInstance = """ { "SchemaVersion": 1.1, "Study": { "Series": { "1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": { "Instances": { "1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": {} } } } } } """; MetadataUpdates metadataRemoveUpdates = MetadataUpdates.builder() .dicomUpdates(DICOMUpdates.builder() .removableAttributes(SdkBytes.fromByteBuffer( ByteBuffer.wrap(removeInstance .getBytes(StandardCharsets.UTF_8)))) .build()) .build(); updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId, versionid, metadataRemoveUpdates, force);

用例 #4: 恢复到以前的版本。

// In this case, revert to previous version. String revertVersionId = Integer.toString(Integer.parseInt(versionid) - 1); MetadataUpdates metadataRemoveUpdates = MetadataUpdates.builder() .revertToVersionId(revertVersionId) .build(); updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId, versionid, metadataRemoveUpdates, force);
注意

还有更多相关信息 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

JavaScript
适用于 JavaScript (v3) 的软件开发工具包
import { UpdateImageSetMetadataCommand } from "@aws-sdk/client-medical-imaging"; import { medicalImagingClient } from "../libs/medicalImagingClient.js"; /** * @param {string} datastoreId - The ID of the HealthImaging data store. * @param {string} imageSetId - The ID of the HealthImaging image set. * @param {string} latestVersionId - The ID of the HealthImaging image set version. * @param {{}} updateMetadata - The metadata to update. * @param {boolean} force - Force the update. */ export const updateImageSetMetadata = async ( datastoreId = "xxxxxxxxxx", imageSetId = "xxxxxxxxxx", latestVersionId = "1", updateMetadata = "{}", force = false, ) => { try { const response = await medicalImagingClient.send( new UpdateImageSetMetadataCommand({ datastoreId: datastoreId, imageSetId: imageSetId, latestVersionId: latestVersionId, updateImageSetMetadataUpdates: updateMetadata, force: force, }), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '7966e869-e311-4bff-92ec-56a61d3003ea', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // }, // createdAt: 2023-09-22T14:49:26.427Z, // datastoreId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // imageSetId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // imageSetState: 'LOCKED', // imageSetWorkflowStatus: 'UPDATING', // latestVersionId: '4', // updatedAt: 2023-09-27T19:41:43.494Z // } return response; } catch (err) { console.error(err); } };

用例 #1: 插入或更新属性并强制更新。

const insertAttributes = JSON.stringify({ SchemaVersion: 1.1, Study: { DICOM: { StudyDescription: "CT CHEST", }, }, }); const updateMetadata = { DICOMUpdates: { updatableAttributes: new TextEncoder().encode(insertAttributes), }, }; await updateImageSetMetadata( datastoreID, imageSetID, versionID, updateMetadata, true, );

用例 #2: 移除属性。

// Attribute key and value must match the existing attribute. const remove_attribute = JSON.stringify({ SchemaVersion: 1.1, Study: { DICOM: { StudyDescription: "CT CHEST", }, }, }); const updateMetadata = { DICOMUpdates: { removableAttributes: new TextEncoder().encode(remove_attribute), }, }; await updateImageSetMetadata( datastoreID, imageSetID, versionID, updateMetadata, );

用例 #3: 移除实例。

const remove_instance = JSON.stringify({ SchemaVersion: 1.1, Study: { Series: { "1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": { Instances: { "1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": {}, }, }, }, }, }); const updateMetadata = { DICOMUpdates: { removableAttributes: new TextEncoder().encode(remove_instance), }, }; await updateImageSetMetadata( datastoreID, imageSetID, versionID, updateMetadata, );

用例 #4: 恢复到早期版本。

const updateMetadata = { revertToVersionId: "1", }; await updateImageSetMetadata( datastoreID, imageSetID, versionID, updateMetadata, );
  • 有关 API 的详细信息,请参阅 适用于 JavaScript 的 AWS SDK API 参考UpdateImageSetMetadata中的。

注意

还有更多相关信息 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

Python
适用于 Python 的 SDK(Boto3)
class MedicalImagingWrapper: def __init__(self, health_imaging_client): self.health_imaging_client = health_imaging_client def update_image_set_metadata( self, datastore_id, image_set_id, version_id, metadata, force=False ): """ Update the metadata of an image set. :param datastore_id: The ID of the data store. :param image_set_id: The ID of the image set. :param version_id: The ID of the image set version. :param metadata: The image set metadata as a dictionary. For example {"DICOMUpdates": {"updatableAttributes": "{\"SchemaVersion\":1.1,\"Patient\":{\"DICOM\":{\"PatientName\":\"Garcia^Gloria\"}}}"}} :param: force: Force the update. :return: The updated image set metadata. """ try: updated_metadata = self.health_imaging_client.update_image_set_metadata( imageSetId=image_set_id, datastoreId=datastore_id, latestVersionId=version_id, updateImageSetMetadataUpdates=metadata, force=force, ) except ClientError as err: logger.error( "Couldn't update image set metadata. Here's why: %s: %s", err.response["Error"]["Code"], err.response["Error"]["Message"], ) raise else: return updated_metadata

以下代码实例化对象。 MedicalImagingWrapper

client = boto3.client("medical-imaging") medical_imaging_wrapper = MedicalImagingWrapper(client)

用例 #1: 插入或更新属性。

attributes = """{ "SchemaVersion": 1.1, "Study": { "DICOM": { "StudyDescription": "CT CHEST" } } }""" metadata = {"DICOMUpdates": {"updatableAttributes": attributes}} self.update_image_set_metadata( data_store_id, image_set_id, version_id, metadata, force )

用例 #2: 移除属性。

# Attribute key and value must match the existing attribute. attributes = """{ "SchemaVersion": 1.1, "Study": { "DICOM": { "StudyDescription": "CT CHEST" } } }""" metadata = {"DICOMUpdates": {"removableAttributes": attributes}} self.update_image_set_metadata( data_store_id, image_set_id, version_id, metadata, force )

用例 #3: 移除实例。

attributes = """{ "SchemaVersion": 1.1, "Study": { "Series": { "1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": { "Instances": { "1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": {} } } } } }""" metadata = {"DICOMUpdates": {"removableAttributes": attributes}} self.update_image_set_metadata( data_store_id, image_set_id, version_id, metadata, force )

用例 #4: 恢复到早期版本。

metadata = {"revertToVersionId": "1"} self.update_image_set_metadata( data_store_id, image_set_id, version_id, metadata, force )
  • 有关 API 的详细信息,请参阅适用UpdateImageSetMetadataPython 的AWS SDK (Boto3) API 参考

注意

还有更多相关信息 GitHub。在 AWS 代码示例存储库中查找完整示例,了解如何进行设置和运行。

示例可用性

找不到所需的内容? 使用本页右侧边栏上的 “提供反馈” 链接请求代码示例。

您可以使用、和在影像集之间移动 SOP 实例、解决元数据元素冲突以及向主影像集添加或移除实例DeleteImageSet APIs。CopyImageSet UpdateImageSetMetadata

您可以通过DeleteImageSet操作将图像集从主收藏中移除。

更新主影像集的元数据

  1. 使用 CopyImageSet 操作创建非主影像集,该影像集是您要修改的主影像集的副本。假设它以非主影像集 ID 的103785414bc2c89330f7ce51bbd13f7a形式返回。

    aws medical-imaging copy-image-set --datastore-id a8d19e7875e1532d9b5652f6b25e12c9 --source-image-set-id 0778b83b36eced0b76752bfe32192fb7 --copy-image-set-information '{"sourceImageSet": {"latestVersionId": "1" }}' --region us-west-2
  2. 使用 UpdateImageSetMetadata 操作对非主影像集(103785414bc2c89330f7ce51bbd13f7a)进行更改。例如,更改 patienTid。

    aws medical-imaging update-image-set-metadata \ --region us-west-2 \ --datastore-id a8d19e7875e1532d9b5652f6b25e12c9 \ --image-set-id 103785414bc2c89330f7ce51bbd13f7a \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --update-image-set-metadata-updates '{ "DICOMUpdates": { "updatableAttributes": "{\"SchemaVersion\":1.1,\"Patient\": {\"DICOM\":{\"PatientID\":\"1234\"}}}" } }'
  3. 删除您正在修改的主影像集。

    aws medical-imaging delete-image-set --datastore- id a8d19e7875e1532d9b5652f6b25e12c9 --image-set- id 0778b83b36eced0b76752bfe32192fb7
  4. 使用带有参数的 CopyImageSet 操作将更新的图像集--promoteToPrimary添加到主集合中。

    aws medical-imaging copy-image-set --datastore- id a8d19e7875e1532d9b5652f6b25e12c9 --source-image-set- id 103785414bc2c89330f7ce51bbd13f7a --copy-image-set-information '{"sourceImageSet": {"latestVersionId": "2" }}' --region us-west-2 -- promote-to-primary
  5. 删除非主影像集。

    aws medical-imaging delete-image-set --datastore- id a8d19e7875e1532d9b5652f6b25e12c9 --image-set- id 103785414bc2c89330f7ce51bbd13f7a

将非主映像集设为主映像

  1. 使用 UpdateImageSetMetadata 操作来解决与现有主影像集的冲突。

    aws medical-imaging update-image-set-metadata \ --region us-west-2 \ --datastore-id a8d19e7875e1532d9b5652f6b25e12c9 \ --image-set-id 103785414bc2c89330f7ce51bbd13f7a \ --latest-version-id 1 \ --cli-binary-format raw-in-base64-out \ --update-image-set-metadata-updates '{ "DICOMUpdates": { "updatableAttributes": "{\"SchemaVersion\":1.1,\"Patient\":{\"DICOM\": {\"PatientID\":\"1234\"}}}" } }'
  2. 冲突解决后,使用带有参数的 CopyImageSet 操作将影像集--promoteToPrimary添加到主影像集合中。

    aws medical-imaging copy-image-set --datastore- id a8d19e7875e1532d9b5652f6b25e12c9 --source-image-set- id 103785414bc2c89330f7ce51bbd13f7a --copy-image-set-information '{"sourceImageSet": {"latestVersionId": "2" }}' --region us-west-2 -- promote-to-primary
  3. 确认 CopyImageSet 操作成功后,删除源非主影像集。

    aws medical-imaging delete-image-set --datastore- id a8d19e7875e1532d9b5652f6b25e12c9 --image-set- id 103785414bc2c89330f7ce51bbd13f7a