ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 AWS SDK for Java 2.x 操作 AWS HealthImaging:数据存储、DICOM 导入与影像集管理实战指南

使用 AWS SDK for Java 2.x 操作 AWS HealthImaging:数据存储、DICOM 导入与影像集管理实战指南 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本篇技术指南基于 javav2/example_code/medicalimaging 模块系统讲解如何使用 AWS SDK for Java 2.x 调用 AWS HealthImagingAWS 医疗影像服务的 18 个单一操作与 2 个标签管理场景。读完本文你将掌握数据存储Datastore的创建与删除、DICOM 批量导入任务的启动与结果解析、影像集Image Set的复制/删除/元数据更新/搜索以及基于 ARN 的资源标签管理并了解如何结合源码与集成测试验证整条调用链。概述AWS HealthImaging 与 Java 2.x SDKAWS HealthImaging 是一项符合 HIPAA 要求的服务帮助医疗机构及其医疗影像 ISV 合作伙伴存储、转换医学图像并对医学图像应用机器学习。它围绕两个核心资源组织数据数据存储Datastore存放医学影像的逻辑容器创建后返回全局唯一的datastoreId影像集Image Set数据存储内的 DICOM 影像集合可包含多个版本version支持元数据更新与版本回退。本模块 README 汇总了全部示例代码所有实现位于javav2/example_code/medicalimaging/src/main/java/com/example/medicalimaging/目录集成测试位于src/test/java/AWSMedicalImagingTest.java。所有示例统一使用ProfileCredentialsProvider加载本地 AWS 凭证并在代码中固定指定Region.US_WEST_2个别测试文件注释中保留了切换回US_EAST_1的 TODO。⚠ 重要提醒与 README 一致运行本模块代码或测试可能产生 AWS 账户费用建议以最小权限原则授权仅授予完成任务所需的最低权限代码并未在每个 AWS 区域都经过测试使用时需确认目标区域的服务可用性。环境准备与项目构建前置条件运行本模块前需要先完成 AWS SDK for Java 2.x 的开发环境与凭证配置具体前置条件见 javav2 目录的 README 中的 Prerequisites 章节包括 JDK、Maven、AWS 凭证、区域设置等。项目依赖pom.xml模块的 pom.xml 声明了如下关键配置配置项值说明java.version21项目要求的 JDK 版本aws.java.sdk.version2.31.8通过 SDK BOM 统一管理的 AWS SDK 版本maven-compiler-plugin3.1source/target 15编译插件maven-surefire-plugin3.5.2测试插件medicalimaging由 BOM 管理HealthImaging 服务客户端s3由 BOM 管理S3 客户端导入任务输出清单解析使用secretsmanager由 BOM 管理集成测试读取配置使用commons-cli1.8.0CopyImageSet等示例的命令行参数解析gson2.10.1DICOM 导入任务 manifest 的 JSON 解析junit-jupiter5.11.4test scope集成测试框架slf4j-simple2.0.7test scope测试日志从依赖可见本模块不仅依赖medicalimaging服务 SDK还通过s3与gson配合解析导入任务输出的 S3 manifest属于典型的服务调用 结果对象存储解析组合。凭证与区域约定所有示例的客户端构建模式统一例如 CreateDatastore.javaRegion region Region.US_WEST_2; MedicalImagingClient medicalImagingClient MedicalImagingClient.builder() .region(region) .credentialsProvider(ProfileCredentialsProvider.create()) .build();实际运行时请将区域与凭证替换为你所在环境的配置。构建与运行命令可参考mvn clean package编译打包mvn test运行集成测试集成测试需要真实 AWS 资源详见下文测试与验证章节。代码示例总览单一操作Single Actions以下 18 个单一操作覆盖了 HealthImaging 的主要 API每个示例类均可独立运行操作源码对应服务 API复制影像集CopyImageSet.javacopyImageSet创建数据存储CreateDatastore.javacreateDatastore删除数据存储DeleteDatastore.javadeleteDatastore删除影像集DeleteImageSet.javadeleteImageSet查询 DICOM 导入任务GetDicomImportJob.javagetDICOMImportJob查询数据存储GetDatastore.javagetDatastore获取影像帧GetImageFrame.javagetImageFrame获取影像集GetImageSet.javagetImageSet获取影像集元数据GetImageSetMetadata.javagetImageSetMetadata列出 DICOM 导入任务ListDicomImportJobs.javalistDICOMImportJobs列出数据存储ListDatastores.javalistDatastores列出影像集版本ListImageSetVersions.javalistImageSetVersions列出资源标签ListTagsForResource.javalistTagsForResource搜索影像集SearchImageSets.javasearchImageSets分页迭代器启动 DICOM 导入任务StartDicomImportJob.javastartDICOMImportJob添加资源标签TagResource.javatagResource移除资源标签UntagResource.javauntagResource更新影像集元数据UpdateImageSetMetadata.javaupdateImageSetMetadata场景Scenarios场景示例通过组合多个服务函数完成完整业务目标TaggingDatastores.java为数据存储添加、列出并移除标签的完整流程TaggingImageSets.java为影像集添加、列出并移除标签的完整流程。数据存储Datastore生命周期管理创建数据存储CreateDatastoreCreateDatastore.java 演示了创建数据存储并获取其 IDpublic static String createMedicalImageDatastore(MedicalImagingClient medicalImagingClient, String datastoreName) { try { CreateDatastoreRequest datastoreRequest CreateDatastoreRequest.builder() .datastoreName(datastoreName) .build(); CreateDatastoreResponse response medicalImagingClient.createDatastore(datastoreRequest); return response.datastoreId(); } catch (MedicalImagingException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ; }运行方式CreateDatastore dataStoreName。从代码可以看到创建请求只需datastoreName一个必填字段返回的datastoreId是后续所有影像集操作的定位依据异常统一通过MedicalImagingException.awsErrorDetails().errorMessage()输出错误明细。查询数据存储GetDatastoreGetDatastore.java 通过datastoreId查询数据存储的详细属性GetDatastoreRequest datastoreRequest GetDatastoreRequest.builder() .datastoreId(datastoreID) .build(); GetDatastoreResponse response medicalImagingClient.getDatastore(datastoreRequest); return response.datastoreProperties();返回的DatastoreProperties包含数据存储的名称、ARN、状态等完整属性可直接打印用于校验。运行方式GetDatastore datastoreID。列出数据存储ListDatastoresListDatastores.java 调用listDatastores分页列出当前区域下所有数据存储适合在创建后批量核对资源也作为集成测试的第二个断言点见下文测试章节。删除数据存储DeleteDatastoreDeleteDatastore.java 调用deleteDatastoreDeleteDatastoreRequest datastoreRequest DeleteDatastoreRequest.builder() .datastoreId(datastoreID) .build(); medicalImagingClient.deleteDatastore(datastoreRequest);运行方式DeleteDatastore dataStoreID。注意删除操作是不可逆的生产环境中请结合标签与查询操作确认目标数据存储后再执行。DICOM 影像批量导入启动导入任务StartDicomImportJobDICOM 文件不能直接写入数据存储需要通过导入任务从 S3 批量导入。StartDicomImportJob.java 展示了完整调用StartDicomImportJobRequest startDicomImportJobRequest StartDicomImportJobRequest.builder() .jobName(jobName) .datastoreId(datastoreId) .dataAccessRoleArn(dataAccessRoleArn) .inputS3Uri(inputS3Uri) .outputS3Uri(outputS3Uri) .build(); StartDicomImportJobResponse response medicalImagingClient.startDICOMImportJob(startDicomImportJobRequest); return response.jobId();运行方式StartDicomImportJob jobName datastoreId dataAccessRoleArn inputS3Uri outputS3Uri五个参数含义如下参数含义jobName导入任务名称datastoreId目标数据存储 IDdataAccessRoleArn授权 HealthImaging 访问医疗影像资源的 IAM 角色 ARNinputS3Uri存放待导入 DICOM 文件的 S3 输入前缀路径outputS3Uri导入结果输出到 S3 的前缀路径返回的jobId用于后续轮询任务状态。查询导入任务与解析结果清单GetDicomImportJobGetDicomImportJob.java 调用getDICOMImportJob查询任务状态GetDicomImportJobRequest getDicomImportJobRequest GetDicomImportJobRequest.builder() .datastoreId(datastoreId) .jobId(jobId) .build(); GetDicomImportJobResponse response medicalImagingClient.getDICOMImportJob(getDicomImportJobRequest); return response.jobProperties();运行方式GetDicomImportJob datastoreId jobId。这个示例的亮点在于任务完成后还会跨服务解析导入结果jobProperties中携带outputS3Uri示例通过 getImageSetsForImportJobProperties 方法拼接job-output-manifest.json清单文件路径用S3Utilities.parseUri解析出 bucket 与 key调用getObjectAsBytes下载清单最后用 Gson 解析出jobSummary.imageSetsSummary数组提取每个导入成功影像集的imageSetIdS3Uri manifestS3Uri s3Utilities.parseUri(URI.create(jobProperties.outputS3Uri() job-output-manifest.json)); ... JsonObject jobSummary jsonObject.getAsJsonObject(jobSummary); for (JsonElement imageSetSummary : jobSummary.getAsJsonArray(imageSetsSummary)) { result.add(imageSetSummary.getAsJsonObject().get(imageSetId).getAsString()); }这一HealthImaging S3 Gson的组合是实际生产中最常用的导入结果巡检模式。此外 ListDicomImportJobs.java 演示了通过listDICOMImportJobs分页列出某数据存储下的全部导入任务。影像集Image Set管理删除影像集DeleteImageSetDeleteImageSet.java 调用deleteImageSetDeleteImageSetRequest deleteImageSetRequest DeleteImageSetRequest.builder() .datastoreId(datastoreId) .imageSetId(imagesetId) .build(); medicalImagingClient.deleteImageSet(deleteImageSetRequest);运行方式DeleteImageSet datastoreId imagesetId。复制影像集CopyImageSetCopyImageSet.java 是本模块参数最丰富的示例支持按 DICOM 子集复制、指定目标影像集以及强制复制标志。核心调用如下CopySourceImageSetInformation.Builder copySourceImageSetInformation CopySourceImageSetInformation.builder() .latestVersionId(latestVersionId); // 可选仅复制部分影像实例通过 MetadataCopies 指定 copiableAttributes if (subsets ! null) { String subsetInstanceToCopy getCopiableAttributesJSON(imageSetId, subsets); copySourceImageSetInformation.dicomCopies(MetadataCopies.builder() .copiableAttributes(subsetInstanceToCopy) .build()); } CopyImageSetInformation.Builder copyImageSetBuilder CopyImageSetInformation.builder() .sourceImageSet(copySourceImageSetInformation.build()); // 可选指定目标影像集 if (destinationImageSetId ! null) { copyImageSetBuilder copyImageSetBuilder.destinationImageSet(CopyDestinationImageSet.builder() .imageSetId(destinationImageSetId) .latestVersionId(destinationVersionId) .build()); } CopyImageSetRequest copyImageSetRequest CopyImageSetRequest.builder() .datastoreId(datastoreId) .sourceImageSetId(imageSetId) .copyImageSetInformation(copyImageSetBuilder.build()) .force(force) .build(); CopyImageSetResponse response medicalImagingClient.copyImageSet(copyImageSetRequest); return response.destinationImageSetProperties().imageSetId();命令行参数基于 commons-cli 解析选项含义-d arg数据存储 ID必填-i arg源影像集 ID必填-v arg源影像集最新版本 ID必填-di arg可选的目标影像集 ID-dv arg可选的目标版本 ID-f可选强制复制标志-c arg可选逗号分隔的待复制影像实例子集-h打印帮助信息当提供-c时示例内部通过 getCopiableAttributesJSON 生成符合SchemaVersion 1.1规范的 JSON将实例 ID 填入Study.Series.seriesUID.Instances结构作为copiableAttributes传给服务端实现按实例子集精准复制。更新影像集元数据UpdateImageSetMetadataUpdateImageSetMetadata.java 演示了updateImageSetMetadata的四种元数据更新类型UpdateImageSetMetadataRequest updateImageSetMetadataRequest UpdateImageSetMetadataRequest .builder() .datastoreId(datastoreId) .imageSetId(imageSetId) .latestVersionId(versionId) .updateImageSetMetadataUpdates(metadataUpdates) .force(force) .build(); UpdateImageSetMetadataResponse response medicalImagingClient.updateImageSetMetadata(updateImageSetMetadataRequest);运行方式UpdateImageSetMetadata datastoreId imagesetId versionId updateType [force]其中updateType仅接受以下四个取值取值行为实现要点insert新增或更新属性MetadataUpdates.dicomUpdates(DICOMUpdates.updatableAttributes(...))属性 JSON 示例{SchemaVersion: 1.1, Study: {DICOM: {StudyDescription: CT CHEST}}}remove_attribute移除指定属性使用DICOMUpdates.removableAttributes(...)传入要删除的属性 JSONremove_instance移除指定影像实例在removableAttributes中传入Study.Series.seriesUID.Instances.instanceUID结构的 JSONrevert回退到指定历史版本通过MetadataUpdates.revertToVersionId(revertVersionId)实现示例计算versionId - 1元数据更新后的版本链可通过ListImageSetVersions.listImageSetVersionsListImageSetVersions.java查看完整的影像集信息、元数据与单帧像素数据可分别通过GetImageSet、GetImageSetMetadata与GetImageFrame见 GetImageSet.java、GetImageSetMetadata.java、GetImageFrame.java获取。影像集搜索SearchImageSetsSearchImageSets.java 是探索性最强的示例使用分页迭代器searchImageSetsPaginator聚合全部结果SearchImageSetsRequest datastoreRequest SearchImageSetsRequest.builder() .datastoreId(datastoreId) .searchCriteria(searchCriteria) .build(); SearchImageSetsIterable responses medicalImagingClient.searchImageSetsPaginator(datastoreRequest); ListImageSetsMetadataSummary imageSetsMetadataSummaries new ArrayList(); responses.stream().forEach(response - imageSetsMetadataSummaries .addAll(response.imageSetsMetadataSummaries()));运行方式SearchImageSets datastoreId patientId seriesInstanceUID。主函数依次演示了四种搜索用例用例 1EQUAL 等值匹配患者 IDL61-L80 以Operator.EQUAL匹配dicomPatientId返回该患者全部影像集。用例 2BETWEEN 区间匹配 DICOM 检查日期时间L84-L115 以Operator.BETWEEN匹配dicomStudyDateAndTime起始日期固定为19990101结束日期动态取当天LocalDate.now()时间统一为000000.000实现按检查时间范围检索。用例 3BETWEEN 区间匹配创建时间L120-L140 以Operator.BETWEEN匹配createdAt从1985-04-12T23:20:50.52Z到Instant.now()覆盖所有已持久化检查。用例 4组合过滤 排序L145-L177 同时使用Operator.EQUAL匹配dicomSeriesInstanceUID与Operator.BETWEEN匹配updatedAt并通过Sort.builder().sortOrder(SortOrder.ASC).sortField(SortField.UPDATED_AT)对结果按更新时间升序排序。四种用例完整覆盖了 HealthImaging 搜索 API 的等值、区间、日期时间、排序组合能力是构建影像检索页面的直接参考。资源标签管理Tagging基础操作TagResource / UntagResource / ListTagsForResource标签操作基于资源 ARN 统一进行TagResource.java调用tagResource入参为resourceArn与MapString, String形式的标签键值对UntagResource.untagMedicalImagingResource调用untagResource按标签键列表移除标签见 UntagResource.javaListTagsForResource.listMedicalImagingResourceTags调用listTagsForResource返回tags()映射见 ListTagsForResource.java。三者组合即构成完整的标签增删查闭环便于按环境如Deployment、成本中心或部门维度管理资源。场景一为数据存储打标签TaggingDatastoresTaggingDatastores.java 完整串联了标签操作的四个步骤// 1. 设定数据存储 ARN需替换为真实 ARN final String datastoreArn arn:aws:medical-imaging:us-east-1:123456789012:datastore/12345678901234567890123456789012; // 2. 打标签Deployment - Development TagResource.tagMedicalImagingResource(medicalImagingClient, datastoreArn, ImmutableMap.of(Deployment, Development)); // 3. 列出标签 ListTagsForResourceResponse result ListTagsForResource.listMedicalImagingResourceTags( medicalImagingClient, datastoreArn); System.out.println(Tags for resource: result.tags()); // 4. 移除标签 UntagResource.untagMedicalImagingResource(medicalImagingClient, datastoreArn, Collections.singletonList(Deployment));数据存储的 ARN 格式为arn:aws:medical-imaging:region:account-id:datastore/datastore-id示例中使用了占位账号与 ID运行前必须替换为真实值。场景二为影像集打标签TaggingImageSetsTaggingImageSets.java 与场景一流程完全一致唯一区别是 ARN 形式在数据存储 ARN 之后追加影像集段final String imageSetArn arn:aws:medical-imaging:us-east-1:123456789012:datastore/12345678901234567890123456789012/imageset/12345678901234567890123456789012;运行后依次完成打标签 → 列出 → 移除输出结构与场景一相同。建议在真实环境中结合GetDatastore/GetImageSet返回的 ARN 字段动态获取资源 ARN避免硬编码。测试与验证集成测试位于 AWSMedicalImagingTest.java运行测试同样可能产生 AWS 账户费用测试前的完整说明见 javav2 目录 README 的 Tests 章节。测试要点配置来源测试所需的 AWS 配置可通过config.properties文件或 AWS Secrets Managersecret 名称为test/medicalimaging提供资源自动命名setUp中生成java_test_随机数形式的数据存储名称避免测试间冲突断言模式createDatastoreTest断言创建不抛异常且返回的createdDatastoreId非空listDatastoresTest断言分页列表结果非空服务端差异测试客户端在Region.US_WEST_2构建注释中保留了切换回US_EAST_1的 TODO说明该模块示例存在区域敏感项。结合前文的源码调用链创建数据存储 → 列出数据存储 → 导入任务 → 影像集操作 → 标签管理这套测试覆盖了示例模块最关键的两步入口验证可作为自定义端到端验证的起点。总结本模块通过 20 个 Java 源文件系统展示了 AWS SDK for Java 2.x 操作 HealthImaging 的完整能力数据存储管理createDatastore/getDatastore/listDatastores/deleteDatastore构成资源生命周期闭环DICOM 导入startDICOMImportJobgetDICOMImportJob配合 S3 manifest 解析完成任务启动 → 状态查询 → 结果回收影像集管理copyImageSet、deleteImageSet、updateImageSetMetadata四种更新类型与版本/帧/元数据查询高级检索searchImageSetsPaginator结合 EQUAL/BETWEEN 操作符、DICOM 属性与时间字段、排序字段构建组合查询资源治理基于 ARN 的tagResource/untagResource/listTagsForResource并配套两个完整场景示例。所有代码均可作为独立示例运行也适合直接抽取为生产代码的基础骨架。更多权威资料可参考本模块 README 中列出的 HealthImaging 开发指南与 API Reference以及 SDK for Java 2.x 的 HealthImaging 包参考。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐Tasks.md标签系统完全指南如何用[tag:name]语法高效组织任务Tasks.md标签系统完全指南如何用 tag:name 语法高效组织任务 Tasks.md是一个基于Markdown文件的自托管任务管理看板通过简单的文件示例工程教程后端使用 AWS SDK for C 导入 HealthImaging 影像集并下载校验图像帧imaging_set_and_frames_workflow 实战指南使用 AWS SDK for C 导入 HealthImaging 影像集并下载校验图像帧imaging_set_and_frames_workflow示例工程教程后端使用 AWS CLI 与 Bash 脚本管理 AWS HealthImaging 数据存储Datastore实战指南使用 AWS CLI 与 Bash 脚本管理 AWS HealthImaging 数据存储Datastore实战指南 导读 本文基于 aws doc sdk示例工程教程后端上一篇mergekit CPU合并完整教程无GPU也能轻松完成大语言模型融合下一篇WhyNotWin11无障碍功能屏幕阅读器兼容性实现终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表