Как SCU получает изображения dcm с Dicom Server с помощью C-GET? - PullRequest
2 голосов
/ 25 октября 2019

Я видел официальную документацию по pynetdicom, но у меня нет подходящих обработчиков событий (для SCU) при получении изображений.

Сначала я создал требуемый набор данных файлов .dcm и использовал наборКоманда C-GET, которая на самом деле должна давать мне файлы .dcm, но я также не указал, где мои изображения должны храниться в SCU. Нужно ли использовать команду C-MOVE для фактического получения изображений или мой код неполон (в том смысле, что для SCU onReceiveStore не указаны обработчики событий)?

from pydicom.dataset import Dataset
import pydicom

from pynetdicom import (
    AE, evt, build_role,
    PYNETDICOM_IMPLEMENTATION_UID,
    PYNETDICOM_IMPLEMENTATION_VERSION
)

from pynetdicom.sop_class import (
    PatientRootQueryRetrieveInformationModelGet,
    CTImageStorage
)


ae = AE()

ae.add_requested_context(PatientRootQueryRetrieveInformationModelGet)
ae.add_requested_context(CTImageStorage)

role = build_role(CTImageStorage, scp_role=True)

ds = Dataset()
ds.QueryRetrieveLevel = 'SERIES'
ds.PatientID = '0009703828'
ds.StudyInstanceUID = '1.3.46.670589.5.2.10.2156913941.892665384.993397'
ds.SeriesInstanceUID = '1.3.46.670589.5.2.10.2156913941.892665339.860724'

assoc = ae.associate('127.0.0.1', 5678)

if assoc.is_established:

responses = assoc.send_c_get(ds, PatientRootQueryRetrieveInformationModelGet)
for (status,dataset) in responses:
    if status:
        print('C-GET query status: 0x{0:04x}'.format(status.Status))
        # If the status is 'Pending' then `identifier` is the C-GET response
        if status.Status in (0x0000, 0x1022):
            print(dataset)
        else:
            print('Connection timed out, was aborted or received invalid response') 

    assoc.release()
else:
    print('Association rejected, aborted or never connected')

Я ожидал, что файл .dcm будет отправленс сервера DICOM (т.е. сервера ConQuest в моем случае), но я только получаю тег DICOM, подтверждающий, что этот набор данных (переданный как запрос серверу ConQuest) присутствует! Я хочу точно знать, как я получаю изображения на моем SCU, используя этот объект приложения (ae)

Это ответ от сервера ConQuest

[CONQUESTSRV1] UPACS THREAD 11: STARTED AT: Fri Oct 25 06:56:23 2019
[CONQUESTSRV1]  Calling Application Title : "PYNETDICOM      "
[CONQUESTSRV1]  Called Application Title : "ANY-SCP         "
[CONQUESTSRV1]  Application Context : "1.2.840.10008.3.1.1.1", PDU length: 16382
[CONQUESTSRV1]  Presentation Context 0 "1.2.840.10008.5.1.4.1.2.1.3" 1
[CONQUESTSRV1]  Presentation Context 1 "1.2.840.10008.5.1.4.1.1.2" 1
[CONQUESTSRV1] Number of images to send: 2
[CONQUESTSRV1] Sending file : c:\users\sagar\onedrive\desktop\dicomserver1419d1\data\0009703828\1.3.46.670589.5.2.10.2156913941.892665339.860724_0001_002000_14579035620000.dcm
[CONQUESTSRV1] [recompress]: recompressed with mode = un (strip=1)
[CONQUESTSRV1] C-Get (PatientRoot)
[CONQUESTSRV1] UPACS THREAD 11: ENDED AT: Fri Oct 25 06:56:23 2019
[CONQUESTSRV1] UPACS THREAD 11: TOTAL RUNNING TIME: 0 SECONDS

Сервер ConQuest отправляетфайл, но SCU не может его получить!

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Нужно ли использовать команду C-MOVE для фактического получения изображений

Да;любой из C-MOVE или C-GET будет работать без проблем;какой из них использовать, зависит от ваших требований. C-MOVE установит новое соединение (роли будут изменены), и экземпляры будут отправлены по вновь установленному соединению. C-GET будет работать с тем же соединением.

или мой код неполон (в том смысле, что для SCU onReceiveStore не указаны обработчики событий)?

У меня нетзнать язык программирования и инструментарий. Поэтому я не могу комментировать это.

Я ожидал, что .dcm будет отправлен с сервера DICOM (т.е. сервера ConQuest в моем случае), но я получаю только тег DICOM, подтверждающий, что этот набор данных(предоставляется как запрос к серверу ConQuest) присутствует!

Скорее всего, вы получаете ответ C-FIND здесь. Это не содержит экземпляр изображения. Пожалуйста, обратитесь к этому ответу для получения более подробной информации.

Я хочу точно знать, как я получаю изображения на моем SCU, используя эту прикладную сущность (ae)

Получив ответ C-FIND, используя его идентификаторы, вы должны выполнить команду / запрос C-MOVE / C-GET. В ответ на этот запрос вы получите актуальный экземпляр изображения. Ваш C-FIND SCU становится C-STORE SCP здесь;обычно называется Роль Реверс . Пожалуйста, обратитесь к этому ответу для более подробной информации.

Я также рекомендую вам прочитать статьи Рони ниже:

0 голосов
/ 25 октября 2019

И C-GET, и C-MOVE заставят SCP отправить обратно на ваше устройство команду C-STORE, содержащую набор данных.

Разница между C-GET и C-MOVE заключается в том, что C-MOVE попытается открыть соединение с вашим устройством (которое также должно выступать в качестве SCP для получения C-STORE), пока C-GET отправит C-STORE по тому же соединению, согласованному вашим устройством.

Ответ для C-GET и C-MOVE содержит только состояние операции.

...