3. DICOM影像传输与查询机制

在DICOM影像AI服务集成工程中,影像的传输与查询机制是连接PACS、AI推理引擎与临床工作站的“血管系统”。理解C-STORE、C-FIND、C-MOVE、C-GET、WADO-RS、QIDO-RS这六种核心机制,并据此设计AI服务的触发点,是集成工程师必须掌握的基本功。本节将逐一剖析这些机制的工作原理、适用场景,并给出AI服务触发点的设计方法。

一、传统DIMSE服务:C-STORE、C-FIND、C-MOVE、C-GET

DIMSE(DICOM Message Service Element)是DICOM网络通信的传统服务集,基于TCP/IP之上的上层协议,采用“请求-响应”的确认式通信模型。其中四个服务与影像传输和查询直接相关。

C-STORE(存储服务)是最基础的影像推送机制。发送方(如CT、MR设备或AI服务)作为SCU(Service Class User),将影像数据集推送给接收方(如PACS或AI服务)作为SCP(Service Class Provider)。C-STORE是“推”模型,发送方主动发起,接收方被动接收。在AI集成中,AI推理完成后将结构化报告或标注影像回写PACS,通常就使用C-STORE。其关键参数包括SOP Class UID、SOP Instance UID、Transfer Syntax UID,接收方需验证这些UID是否在协商的Presentation Context中。

C-FIND(查询服务)用于在远端节点上检索符合条件的信息。C-FIND是“拉”模型中的查询部分,SCU发送查询标识符(Query Identifier),SCP返回匹配的条目列表。查询层级可以是Patient、Study、Series、Composite Instance四级。例如,AI服务需要查找某患者最近一周的胸部CT检查,可向PACS发起Study级C-FIND,查询键包括PatientID、StudyDate范围、Modality=CT、BodyPartExamined=CHEST。C-FIND只返回元数据,不返回影像像素数据。

C-MOVE(移动服务)是一种“第三方传输”机制。SCU向SCP发送C-MOVE请求,指定目标AE Title,SCP将匹配的影像通过C-STORE推送到目标节点。C-MOVE的响应只表示“请求已接受”,实际影像传输是异步进行的,SCU无法直接获知传输完成状态。在AI集成中,若需要将影像从PACS“拉”到AI服务,可让AI服务作为C-MOVE SCU,指定自身为目的地,PACS会将影像C-STORE推送给AI服务。

C-GET(获取服务)与C-MOVE类似,但影像数据直接通过同一关联(Association)返回给请求方,而非建立新的连接推送到第三方。C-GET是“拉”模型,请求方在同一TCP连接上接收影像。其优势是无需额外配置目标AE Title,但要求请求方同时具备C-STORE SCP能力以接收数据。C-GET在跨防火墙场景中更友好,因为只需一个方向的连接。

二、Web服务:WADO-RS与QIDO-RS

随着DICOMweb标准的普及,基于HTTP/RESTful的接口逐渐成为现代AI服务集成的首选。WADO-RS(Web Access to DICOM Objects - RESTful Services)用于检索影像数据,QIDO-RS(Query based on ID for DICOM Objects - RESTful Services)用于查询元数据。

QIDO-RS通过HTTP GET请求查询Study、Series或Instance级别的元数据。例如,查询某患者的所有检查:GET /studies?PatientID=12345&Modality=CT,返回JSON或XML格式的元数据列表。QIDO-RS支持分页、模糊匹配和返回字段筛选,比C-FIND更灵活,且天然适配Web架构。

WADO-RS用于检索DICOM对象。检索整个Study:GET /studies/{StudyInstanceUID};检索单个Instance:GET /studies/{StudyInstanceUID}/series/{SeriesInstanceUID}/instances/{SOPInstanceUID}。WADO-RS返回multipart/related格式的DICOM数据,支持指定Transfer Syntax进行转码。与C-GET类似,WADO-RS是“拉”模型,但基于HTTP,更容易与容器化AI服务、API网关和负载均衡集成。

DICOM传输查询机制与AI服务触发点架构 PACS / VNA 影像归档与通信系统 C-STORE SCP / C-FIND SCP 影像设备 CT / MR / DR (C-STORE SCU) AI推理服务 C-STORE SCP / C-FIND SCU C-MOVE SCU / C-GET SCU DICOMweb网关 QIDO-RS / WADO-RS HTTP/RESTful 接口 AI触发引擎 事件监听 / 规则匹配 StudyReceived / Worklist Modality Worklist C-FIND SCU 查询 检查预约信息 C-STORE C-MOVE / C-GET C-STORE (结果回写) QIDO-RS / WADO-RS 存储事件通知 触发推理任务 检查到达 AI服务触发点设计模式 模式A:C-STORE触发 AI作为C-STORE SCP 接收影像后立即推理 实时性高,适合急诊 模式B:C-FIND轮询 定时查询新检查 C-FIND + C-MOVE拉取 实现简单,有延迟 模式C:QIDO-RS监听 Webhook/消息队列 QIDO-RS查询 + WADO-RS 云原生,易扩展 模式D:混合触发 C-STORE + 队列 异步解耦 高吞吐场景 DIMSE C-STORE C-MOVE/C-GET DICOMweb 触发/回写 事件通知

三、AI服务触发点设计

AI服务触发点是指“在什么条件下、以什么方式启动AI推理任务”。触发点设计直接决定了AI服务的实时性、吞吐量和系统耦合度。根据上述传输查询机制,可归纳出四种典型触发模式。

模式A:C-STORE触发(实时推送)。AI服务作为C-STORE SCP,PACS或设备在影像归档后直接C-STORE推送给AI服务。AI服务在接收完一个完整的Study后立即启动推理。这种模式实时性最高,适合急诊脑出血、肺结节筛查等场景。实现要点:AI服务需正确响应C-STORE请求,按StudyInstanceUID聚合Instance,当收到该Study最后一个Instance时触发推理。判断“最后一个Instance”可通过比较C-FIND查询到的Instance总数与已接收数量,或依赖PACS发送的Study完成通知。

模式B:C-FIND轮询(定时拉取)。AI服务定时(如每5分钟)向PACS发起C-FIND查询,查找自上次轮询以来新增的检查,然后通过C-MOVE或C-GET拉取影像。这种模式实现简单,对PACS改造要求低,但存在固有延迟。查询键设计示例:StudyDate=20250101-20250101, Modality=CT, BodyPartExamined=CHEST,并记录上次查询的最大StudyTime作为增量条件。

模式C:QIDO-RS监听(Web原生)。在DICOMweb架构下,PACS或VNA在影像归档后通过Webhook或消息队列(如Kafka、RabbitMQ)发布事件,AI服务监听事件后通过QIDO-RS查询元数据、WADO-RS拉取影像。这种模式天然适配云原生和微服务架构,易于水平扩展。实现要点:QIDO-RS查询需处理分页,WADO-RS拉取需支持multipart响应解析和Transfer Syntax转码。

模式D:混合触发(异步解耦)。在高吞吐场景下,AI服务作为C-STORE SCP接收影像后,不立即推理,而是将StudyInstanceUID写入消息队列,由独立的推理工作池消费。这种模式将接收与推理解耦,避免推理阻塞接收,适合夜间批量筛查或大规模体检场景。

四、触发点选择与参数配置示例

选择触发模式时需权衡实时性、吞吐量、系统耦合度和运维复杂度。急诊场景优先模式A,体检批量场景优先模式D,云原生环境优先模式C,传统PACS环境且改造受限时可选模式B。

以下给出一个模式A的C-STORE SCP配置示例(基于DCMTK的storescp工具),用于接收影像并触发AI推理脚本:

storescp -v -dhl -pm -uf -od /data/dicom/incoming \
  --exec-on-reception "/opt/ai/trigger_inference.sh #f" \
  --sort-conc-studies CT \
  --study-date-format "%Y%m%d" \
  11112

# trigger_inference.sh 示例逻辑:
# 1. 解析接收到的DICOM文件路径
# 2. 提取StudyInstanceUID、SeriesInstanceUID
# 3. 查询该Study下已接收Instance数量
# 4. 若数量等于预期总数,调用AI推理API
# 5. 推理完成后通过C-STORE回写结果到PACS

对于模式C,QIDO-RS查询示例:GET https://pacs.example.com/dicomweb/studies?Modality=CT&StudyDate=20250101&limit=50&offset=0,返回JSON数组后遍历StudyInstanceUID,再通过WADO-RS拉取:GET https://pacs.example.com/dicomweb/studies/{StudyInstanceUID},请求头Accept: multipart/related; type="application/dicom"。

工程提示:无论采用哪种触发模式,都必须处理“Study不完整”问题。影像可能分多次C-STORE到达,AI服务需设置合理的等待窗口(如收到第一个Instance后等待30秒),或通过C-FIND/QIDO-RS确认Study下Instance总数后再触发推理,避免对不完整序列进行推理导致结果错误。
常见排障:若C-MOVE请求返回成功但影像未到达AI服务,检查目标AE Title是否在PACS中正确注册、AI服务的C-STORE SCP是否监听正确端口、Presentation Context是否协商了所需的SOP Class和Transfer Syntax。若WADO-RS返回406错误,检查Accept头是否包含正确的multipart类型。

综上,C-STORE、C-FIND、C-MOVE、C-GET构成传统DIMSE传输查询体系,WADO-RS、QIDO-RS构成现代DICOMweb体系。AI服务触发点设计应基于这些机制,结合临床实时性要求、系统吞吐量和架构约束,选择C-STORE实时触发、C-FIND轮询、QIDO-RS监听或混合异步触发模式,并妥善处理Study完整性判断和结果回写,才能构建稳定可靠的AI集成链路。