0

我正在 SCU 和 SCP 之间为 DICOM 服务器和图像进行通信。我正在使用 ClearCanas PACS 服务器并且可以访问 Web GUI。使用以下代码,我可以将 DICOM dt 从 SCU(我的计算机)发送到 SCP(远程服务器)

import sys
import argparse
from netdicom import AE
from netdicom.SOPclass import StorageSOPClass, VerificationSOPClass
from dicom.UID import ExplicitVRLittleEndian, ImplicitVRLittleEndian, \
    ExplicitVRBigEndian
from dicom import read_file


# parse commandline
parser = argparse.ArgumentParser(description='storage SCU example')
parser.add_argument('remotehost')
parser.add_argument('remoteport', type=int)
parser.add_argument('file', nargs='+')
parser.add_argument('-aet', help='calling AE title', default='PYNETDICOM')
parser.add_argument('-aec', help='called AE title', default='REMOTESCU')
parser.add_argument('-implicit', action='store_true',
                    help='negociate implicit transfer syntax only',
                    default=False)
parser.add_argument('-explicit', action='store_true',
                    help='negociate explicit transfer syntax only',
                    default=False)

args = parser.parse_args()

if args.implicit:
    ts = [ImplicitVRLittleEndian]
elif args.explicit:
    ts = [ExplicitVRLittleEndian]
else:
    ts = [
        ExplicitVRLittleEndian,
        ImplicitVRLittleEndian,
        ExplicitVRBigEndian
    ]

# call back


def OnAssociateResponse(association):
    print "Association response received"

# create application entity
MyAE = AE(args.aet, 0, [StorageSOPClass,  VerificationSOPClass], [], ts)
MyAE.OnAssociateResponse = OnAssociateResponse

# remote application entity
RemoteAE = dict(Address=args.remotehost, Port=args.remoteport, AET=args.aec)

# create association with remote AE
print "Request association"
assoc = MyAE.RequestAssociation(RemoteAE)

if not assoc:
    print "Could not establish association"
    sys.exit(1)
# perform a DICOM ECHO, just to make sure remote AE is listening
print "DICOM Echo ... ",
st = assoc.VerificationSOPClass.SCU(1)
print 'done with status "%s"' % st

# create some dataset
for ii in args.file:
    print
    print ii
    d = read_file(ii)
    print "DICOM StoreSCU ... ",
    try:
        st = assoc.SCU(d, 1)
        print 'done with status "%s"' % st
    except:
        raise
        print "problem", d.SOPClassUID
print "Release association"
assoc.Release(0)

# done
MyAE.Quit

我的问题是,有没有办法将对象发送到服务器上的不同目录/在服务器上远程创建目录并将数据发送到不同的目录?

4

2 回答 2

2

简短的回答 -

更长的答案 - DICOM 标准以任何方式或形式不关心文件如何存储在 PACS 服务器上,这取决于实施。PACS 服务器可以使用机器人雕刻工具将它们雕刻在石碑上并使用 OCR 读取,如果它仍然可以按照标准接收和发送它们。因此,无法通过 DICOM 接口影响这些细节。

从标准的角度来看 - 一切都已经按照患者 - 研究 - 系列 - 实例的规模整齐地组织起来,其中每个级别都有其唯一的唯一 ID。这些 ID-s 存储在相关 DICOM 标签中的每个 DICOM 文件中,并且大多数 PACS 服务器使用数据库跟踪这些 ID-s,以便于快速查找。磁盘上 DICOM 文件的实际位置也存储在数据库中,但这是内部实现细节,不会通过 DICOM 接口公开。

坦率地说 - 我看不出这个要求的用例是什么?该组织已经存在,您可以使用 DICOM 界面通过这些属性进行查询。

于 2018-06-04T19:25:18.890 回答
0

一般没有。您无法告诉 SCP 在其文件系统上的何处存储来自您的 SCU 的数据。

于 2018-06-04T19:16:14.490 回答