Я хотел бы загрузить файлы rdsr DICOM, хранящиеся в PACS.
Сначала я запускаю ассоциацию C-FIND, чтобы получить UID экземпляра исследования. Как только UID моего экземпляра исследования появится в списке, я хочу загрузить файлы RDSR на свой локальный компьютер.
Мне не удалось для этого использовать метод C-GET.< /p>
Вот мой код:
Код: Выделить всё
## C-FIND
ds = Dataset()
ds.QueryRetrieveLevel = 'STUDY'
ds.StudyDate = '20240308'
ds.Modality = 'SR'
ds.StudyInstanceUID = ''
ae = AE(ae_title="MYPC")
ae.add_requested_context(StudyRootQueryRetrieveInformationModelFind)
assoc = ae.associate("10.258.25.9", 107, ae_title="PACS")
StudyInstanceUID_List = []
if assoc.is_established:
responses = assoc.send_c_find(ds, StudyRootQueryRetrieveInformationModelFind)
for (status, identifier) in responses:
if status:
#print('C-FIND query status: 0x{0:04X}'.format(status.Status))
if identifier:
#print('Dataset retourné par la requête C-FIND :')
StudyID = identifier.get("StudyInstanceUID")
StudyInstanceUID_List.append(StudyID)
print(StudyID)
print(identifier)
else:
pass
else:
print('Fail, Status Code: 0x{0:04X}'.format(status.Status))
assoc.release()
else:
print('Connexion Failed')
## C-GET
def handle_get(event):
"""Handle a C-GET request event."""
ds = event.identifier
return 0x0000
handlers = [(evt.EVT_C_GET, handle_get)]
ae = AE(ae_title="MYPC")
ae.add_requested_context(StudyRootQueryRetrieveInformationModelGet)
assoc = ae.associate("10.258.25.9", 107, ae_title="PACS", evt_handlers=handlers)
if assoc.is_established:
ds = Dataset()
ds.QueryRetrieveLevel = 'STUDY'
ds.StudyInstanceUID = StudyInstanceUID_List[0] # Test for the first StudyInstanceUID
ds.Modality = 'SR'
responses = assoc.send_c_get(ds, StudyRootQueryRetrieveInformationModelGet)
for (status, identifier) in responses:
if status:
print('C-GET query status: 0x{0:04x}'.format(status.Status))
else:
print('Connection timed out, was aborted or received invalid response')
# Release the association
assoc.release()
else:
print('Association rejected, aborted or never connected')
Чтобы выполнить мой первый запрос, вот журналы отладки для части C-GET:
Код: Выделить всё
I: Requesting Association
D: Request Parameters:
D: ======================= OUTGOING A-ASSOCIATE-RQ PDU ========================
D: Our Implementation Class UID: 1.2.826.0.1.3680043.9.3811.2.0.2
D: Our Implementation Version Name: PYNETDICOM_202
D: Application Context Name: 1.2.840.10008.3.1.1.1
D: Calling Application Name: MYPC
D: Called Application Name: PACS
D: Our Max PDU Receive Size: 16382
D: Presentation Context:
D: Context ID: 1 (Proposed)
D: Abstract Syntax: =Study Root Query/Retrieve Information Model - GET
D: Proposed SCP/SCU Role: Default
D: Proposed Transfer Syntaxes:
D: =Implicit VR Little Endian
D: =Explicit VR Little Endian
D: =Deflated Explicit VR Little Endian
D: =Explicit VR Big Endian
D: Requested Extended Negotiation: None
D: Requested Common Extended Negotiation: None
D: Requested Asynchronous Operations Window Negotiation: None
D: Requested User Identity Negotiation: None
D: ========================== END A-ASSOCIATE-RQ PDU ==========================
D: Accept Parameters:
D: ======================= INCOMING A-ASSOCIATE-AC PDU ========================
D: Their Implementation Class UID: 1.2.40.0.13.1.3
D: Their Implementation Version Name: EntImaging-8.1.2
D: Application Context Name: 1.2.840.10008.3.1.1.1
D: Calling Application Name: MYPC
D: Called Application Name: PACS
D: Their Max PDU Receive Size: 16378
D: Presentation Contexts:
D: Context ID: 1 (Accepted)
D: Abstract Syntax: =Study Root Query/Retrieve Information Model - GET
D: Accepted SCP/SCU Role: Default
D: Accepted Transfer Syntax: =Deflated Explicit VR Little Endian
D: Accepted Extended Negotiation: None
D: Accepted Asynchronous Operations Window Negotiation: None
D: User Identity Negotiation Response: None
D: ========================== END A-ASSOCIATE-AC PDU ==========================
I: Association Accepted
I: Sending Get Request: MsgID 1
I:
I: # Request Identifier
I: (0008,0052) CS [STUDY] # 1 QueryRetrieveLevel
I: (0008,0060) CS [SR] # 1 Modality
I: (0020,000D) UI [1.3.42.0.13.1.1457391286835159851859014584331874394459] # 1 StudyInstanceUID
I:
D: ========================== OUTGOING DIMSE MESSAGE ==========================
D: Message Type : C-GET RQ
D: Message ID : 1
D: Affected SOP Class UID : Study Root Query/Retrieve Information Model - GET
D: Identifier : Present
D: Priority : Low
D: ============================ END DIMSE MESSAGE =============================
E: DIMSE timeout reached while waiting for message response
I: Aborting Association
D: Abort Parameters:
D: =========================== OUTGOING A-ABORT PDU ===========================
D: Abort Source: DUL service-user
D: Abort Reason: (no value available)
D: ============================= END A-ABORT PDU ==============================
Код: Выделить всё
D: ========================== OUTGOING DIMSE MESSAGE ==========================
D: Message Type : C-MOVE RQ
D: Message ID : 1
D: Affected SOP Class UID : Study Root Query/Retrieve Information Model - MOVE
D: Move Destination : MYPC
D: Identifier : Present
D: Priority : Low
D: ============================ END DIMSE MESSAGE =============================
D: pydicom.read_dataset() TransferSyntax="Little Endian Implicit"
D: ========================== INCOMING DIMSE MESSAGE ==========================
D: Message Type : C-MOVE RSP
D: Presentation Context ID : 1
D: Message ID Being Responded To : 1
D: Identifier : None
D: Status : 0xA701
D: ============================ END DIMSE MESSAGE =============================
D:
I: Move SCP Result: 0xA701 (Failure)
I: Sub-Operations Remaining: 0, Completed: 0, Failed: 0, Warning: 0
D: pydicom.read_dataset() TransferSyntax="Deflated Little Endian Explicit"
E: Failed to decode the received Identifier dataset
E: Error -5 while decompressing data: incomplete or truncated stream
Traceback (most recent call last):
File "C:\Users\cal14116\AppData\Roaming\Python\Python311\site-packages\pynetdicom\association.py", line 2137, in _wrap_get_move_responses
identifier = decode(
^^^^^^^
File "C:\Users\cal14116\AppData\Roaming\Python\Python311\site-packages\pynetdicom\dsutils.py", line 122, in decode
bytestring = BytesIO(zlib.decompress(bytestring.getvalue(), -zlib.MAX_WBITS))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
zlib.error: Error -5 while decompressing data: incomplete or truncated stream
I: Releasing Association
Источник: https://stackoverflow.com/questions/781 ... -study-ins