You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过pynetdicom的send_c_find获取并保存StudyInstanceUID

解决C-FIND请求无法获取StudyInstanceUID的问题

明确说明:完全可以保存StudyInstanceUID字段,你遇到的问题大概率是查询请求未指定返回该字段,或者访问方式有误,以下是具体解决步骤:

1. 在C-FIND查询中明确请求StudyInstanceUID

pynetdicom的C-FIND遵循DICOM查询规则,必须在请求数据集里声明需要返回的字段,否则服务器不会主动返回。示例代码如下:

from pynetdicom import AE, QueryModel
from pynetdicom.sop_class import StudyRootQueryRetrieveInformationModelFind

# 初始化应用实体
ae = AE()
ae.add_requested_context(StudyRootQueryRetrieveInformationModelFind)

# 构建查询数据集,指定要返回的字段
ds = QueryModel.StudyRoot
# 设置查询条件(示例:匹配所有患者)
ds.PatientName = '*'
# 声明需要获取StudyInstanceUID,设为空字符串表示请求返回该字段
ds.StudyInstanceUID = ''

# 连接Orthanc服务器
assoc = ae.associate('你的OrthancIP', 你的Orthanc端口)
if assoc.is_established:
    # 发送C-FIND请求
    responses = assoc.send_c_find(ds, query_model='STUDY_ROOT')
    for status, identifier in responses:
        # 0xFF00和0xFF01表示查询有匹配结果
        if status.Status in (0xFF00, 0xFF01):
            # 提取并保存StudyInstanceUID
            if 'StudyInstanceUID' in identifier:
                study_uid = identifier.StudyInstanceUID
                # 示例:保存到文本文件
                with open('study_uids.txt', 'a', encoding='utf-8') as f:
                    f.write(f"{study_uid}\n")
                # 也可以保存到数据库或变量中
                print(f"已保存StudyInstanceUID: {study_uid}")
    # 释放连接
    assoc.release()
else:
    print("无法连接到Orthanc服务器")

2. 用更可靠的方式访问字段

如果直接用关键字StudyInstanceUID访问失败,可以尝试用DICOM标签((0x0020, 0x000D))访问,这是该字段的标准唯一标识,不会出错:

if (0x0020, 0x000D) in identifier:
    study_uid = identifier[(0x0020, 0x000D)].value

3. 检查Orthanc配置(可选)

Orthanc默认会返回所有标准DICOM字段,但若你修改过配置文件中的DicomModalities或QueryRetrieveLevel相关限制,需确保未禁止返回StudyInstanceUID。一般默认配置无需调整,此步骤仅作为排查项。

内容的提问来源于stack exchange,提问作者Jeremias Caballero Celan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:27:08