使用 pynetdicom 的简单 DICOM WL SCP 不起作用

问题描述 投票:0回答:1
import pydicom
from pydicom.dataset import Dataset
from pydicom.uid import UID
from pynetdicom import AE, evt, debug_logger
from pynetdicom.sop_class import ModalityWorklistInformationFind

debug_logger()

def on_c_find(dataset, context=None, info=None):
    """Handle a C-FIND request event."""
    # Check if ScheduledProcedureStepSequence exists
    

    # Create the response dataset
    identifier = Dataset()
    identifier.PatientName = 'Hahah'
    identifier.AccessionNumber = 'asa'
    identifier.RequestedProcedureDescription = 'asa'
    identifier.is_little_endian = True
    identifier.is_implicit_VR = True

    # Yield the response dataset
    yield (0x0000, identifier)  # Success    

def main():
    
    ae = AE()

    # Add supported presentation contexts
    ae.add_supported_context(ModalityWorklistInformationFind) # C FIND
    ae.add_supported_context(UID('1.2.840.10008.1.1')) # ECHO

    # Set callback functions
    handlers = [(evt.EVT_C_FIND, on_c_find)]

    print("Starting DICOM Worklist Server...")

    # Start the DICOM server
    ae.start_server(('localhost', 11112), evt_handlers=handlers)

if __name__ == "__main__":
    main()

我正在尝试使用 pynetdicom 编写一个简单的 DICOM Worklist SCP。由于文档中没有提供任何示例,只是说它与 C-FIND 相同。

上面的代码仅发送状态成功,但数据集/患者不会出现在测试列表中。我使用 miele-wl-scu 来模拟查询 WL 的方式。

python dicom pynetdicom
1个回答
0
投票

我从未使用过该工具包,但我认为

yield (0x0000, identifier)  # Success

错了。

0x0000
表示成功,应在最后发送,不附加任何数据集(在您的情况下是
identifier
)。在此之前,对于每个数据集,您的状态应为
PENDING

© www.soinside.com 2019 - 2024. All rights reserved.