Загрузка файлов DICOM RDSR из PACS с использованием метода Pynetdicom C-GET из UID экземпляра исследования [закрыто]Python

Программы на Python
Гость
Загрузка файлов DICOM RDSR из PACS с использованием метода Pynetdicom C-GET из UID экземпляра исследования [закрыто]

Сообщение Гость »


Я хотел бы загрузить файлы 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. Часть C-FIND работает хорошо, и я могу хранить все UID экземпляра исследования.
Чтобы выполнить мой первый запрос, вот журналы отладки для части 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 ==============================
И, наконец, когда я пытаюсь использовать запрос C-MOVE, в журналах отладки получаю следующее сообщение:

Код: Выделить всё

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

Вернуться в «Python»