python 实现pacs功能 推送下拉影像

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: python 实现dcmtk关联pacs功能 推送下拉影像

python 实现pacs功能 推送下拉影像

dcmtk关联pacs技术笔记:

简介

  • 1、dcmtk关联pacs的参数介绍
  • 2、dcmtk命令介绍
  • 3、演示工具的功能
  • 4、说明使用的技术
  • 5、遇到的问题
  • 6、工具目前存在的缺点

dcmtk关联pacs的参数介绍:远程pacs说明参数如何添加

需关联的PACS系统信息参数

  • [被呼叫主机ip] 192.168.10.19
  • [被呼叫主机pacs系统AE] ebm-pacs
  • [被呼叫主机pacs系统port] 105
  • [pacs系统电脑账号] dn
  • [pacs系统电脑密码] ZAQ12wsxCDE3

1、dcmtk命令介绍,ehoscu,findscu,movescu,storescu

命令参数说明参考实例文档

DCMTK 常用参数介绍

参数 说明
-v 详细模式,打印处理细节
-d 调试模式,打印调试信息
ip 被呼叫主机ip,如(192.168.10.19)
port 被呼叫主机port,如(105)
-aet 设置我的呼叫(本机)AE标题,pacs给本机添加的AE title,如(zs-find-scu)
-aec 设置称为对等方(被呼叫主机) 的AE标题,pacs系统的AE title,如(ebm-pacs)
-P 使用患者根信息模型(默认)
-S 使用研究根信息模型
-k 指定检索条件(key=value)
-od 指定输出目录
QueryRetrieveLevel 指定检索级别
-aem 设置移动目的地AE标题(movescu时使用),如(zs-move-scu)
+f 输入文件格式(默认单个dcm文件路径),推送影像时使用
+sd 支持目录路径下所有文件输入,推送影像时使用
-su study 指按studyinstanceuid命名目的文件夹,本机接收远程服务器影像时使用
-fe .dcm 是指收到的文件以.dcm为文件后缀,本机接收远程服务器影像时使用

1.1:echoscu.exe 连接,接收答复回应(相当于ping),测试本机与pacs是否关联成功

  • 参数介绍
  • pacs系统ip,端口(192.168.10.19 105) # 所有的服务都需添加该参数
    echoscu.exe -v -d -aet zs-move-scu -aec ebm-pacs 192.168.10.19 105

1.2:findscu.exe 查询

  • 参数介绍
  • 本机AE(-aet zs-find-scu)
  • 被呼叫机AE(-aec ebm-pacs)
  • 研究信息模型(-S)
  • 查询条件=(key=value)
  • 检索级别(-k QueryRetrieveLevel=STUDY)
  • 查询字段(-k PatientName)
  • 打印处理详情(-v)
  • 打印debug日志(-d)
    findscu.exe -v -d -S 192.168.10.19 105 -aet zs-find-scu -aec ebm-pacs -k QueryRetrieveLevel=STUDY -k StudyDate=20170918 -k PatientName -k PatientID -k StudyTime -k StudyID

1.3:movescu.exe 影像拉取

  • 参数介绍
  • 打印处理详情(-v)
  • 打印debug日志(-d)
  • 本机AE(-aet zs-move-scu)
  • 被呼叫机AE(-aec ebm-pacs)
  • 设置移动目的地AE以及端口(-aem zs-move-scu --port 8090(此端口在pacs给本机设置AE时一起添加)
  • 患者信息模型(-P(默认))
  • 输出目录(-od)
  • 检索级别(-k QueryRetrieveLevel=PATIENT)
  • 筛选条件(-k PatientID=0017063006)
    movescu.exe -v -d -aet zs-move-scu -aec ebm-pacs -aem zs-move-scu --port 8090 -od D:\image_test\dcmtk_scp_storage\CHEN_XIA_DI 192.168.10.19 105 -k QueryRetrieveLevel=PATIENT -k PatientID=0017063006

1.4:storescu.exe 影像推送

  • 参数介绍
  • 打印处理详情(-v)
  • 打印debug日志(-d)
  • 本机AE(-aet zs-move-scu)
  • 被呼叫机AE(-aec ebm-pacs)
  • 单个文件路径输入(D:\image_test\dcmtk_test\1.2.dcm)
  • 目录下所有文件输入(D:\image_test\dcmtk_test\1.2.dcm +sd)

1.4.1:单个dcm文件推送

    storescu.exe -d 192.168.10.19 105 D:\image_test\dcmtk_test\1.2.dcm -aet zs-move-scu -aec ebm-pacs
1.4.2、目录下所有文件推送
     storescu.exe -v -d 192.168.10.19 105 D:\image_test\dcmtk_input\138 -aet zs-move-scu -aec ebm-pacs +sd  

1.5、storescp.exe 接收pacs系统发送的影像

  • 参数介绍
  • 打印处理详情(-v)
  • 打印debug日志(-d)
  • 本机scp的AE,端口(-aet zs-store-scp 8090)
  • 输出目录(-od)
  • 保存格式(-su study)
  • 文件后缀(-fe.dcm))
    storescp.exe -d -v 8090 -aet zs-store-scp -od D:\image_test\dcmtk_scp_storage -su study -fe .dcm --fork

2、演示工具的功能:关联测试,查询,拉取,推送

2.1:影像上传路径:D:\image_test\dcmtk_input\test_0000915367
2.2:影像存储路径:D:\image_test\dcmtk_scp_storage
2.3:本机-AET:zs-movescu
2.4:PACS-AEC:ebm-pacs
2.5:PACS系统IP:192.168.10.19
2.6:PACS系统PORT:105
2.7:本机PORT:8090
2.8:注意事项:
    1.路径中不允许出现中文
    2.PACS-AEC,PACS系统IP,PACS系统PORT,为关联pacs系统固定参数
    3.本机-AET,本机PORT,需要在远程pacs脚本中添加本机ip,端口,设置AE
    4.影像拉取功能需要添加本机端口参数
    5.目前影像拉取不支持PatientName检索条件,仅支持PatientID

3、说明使用的技术:

  • dcmtk命令拼接
  • subprocess(执行命令)
  • tkinter(Gui工具设计)
  • ctypes(隐藏控制台)
  • sys(访问pyinstaller打包的临时资源)
  • pyinstaller(程序打包)

4、遇到的问题:

  • 1.pyinstaller:如何打包本地资源
    解决方法一:pyinstaller -F --add-data dcmtk-3.6.6-win64-dynamic;dcmtk-3.6.6-win64-dynamic dcmtk_gui.py
    解决方法二:修改pyinstaller生成的spec文件,修改datas=[("本地资源路径","打包后生成的临时资源目录")]
  • 2.pyinstaller:-w 去除控制台,无法执行cmd命令:
    解决方法一:设置subprocess.Popen(stdout, stderr, stdin)
    解决方法二:隐藏控制台, ctypes.windll.user32.ShowWindow(whnd, 0)
  • 3.sys:如何访问临时资源:
    解决方法:通过getattr(sys, 'frozen', False)判断是否为打包环境,获取资源的相对路径:sys._MEIPASS 
  • 4.使用资源:
    相对路径(dcmtk../bin) + dcmtk服务的exe + dcmtk命令即可 使用subprocess.Popen(),使用subprocess.getoutput()
  • 5.tkinter 组件切换电脑打开则组件布局位置不一致:
    解决方法:添加容器对象,frame
  • 6.tkinter Entry输入框与选择路径按钮同时支持:
    如果选择路径按钮,entry组件=选择路径
  • 7.tkinter Text实时显示 dcmtk命令产生的日志:
    代码介绍

5、工具目前存在的缺点:

  • 不能根据患者的name进行影像拉取
  • 运行时占用的内存比较大
  • 上传,存储,不支持选择文件(仅支持目录),手动输入都支持

6、收获:

  • dcmtk的命令基本配置
  • subprocess的常用方法
  • tkinter的组件布局,日志打印
  • pyinstaller本地资源打包
  • 打包后的资源如何访问

前存在的缺点:

  • 不能根据患者的name进行影像拉取
  • 运行时占用的内存比较大添加链接描述
  • 上传,存储,不支持选择文件(仅支持目录),手动输入都支持

6、收获:

  • dcmtk的命令基本配置
  • subprocess的常用方法
  • tkinter的组件布局,日志打印
  • pyinstaller本地资源打包
  • 打包后的资源如何访问
dcmtk下载地址: https://download.csdn.net/download/EXIxiaozhou/86724433
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
77 1
|
1月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
67 0
|
7天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
10天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
15天前
|
设计模式 缓存 测试技术
Python中的装饰器:功能增强与代码复用的艺术####
本文将深入探讨Python中装饰器的概念、用途及实现方式,通过实例演示其如何为函数或方法添加新功能而不影响原有代码结构,从而提升代码的可读性和可维护性。我们将从基础定义出发,逐步深入到高级应用,揭示装饰器在提高代码复用性方面的强大能力。 ####
|
17天前
|
缓存 测试技术 数据安全/隐私保护
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第29天】本文通过深入浅出的方式,探讨了Python装饰器的概念、使用场景和实现方法。文章不仅介绍了装饰器的基本知识,还通过实例展示了如何利用装饰器优化代码结构,提高代码的可读性和重用性。适合初学者和有一定经验的开发者阅读,旨在帮助读者更好地理解和应用装饰器,提升编程效率。
|
24天前
|
开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第22天】在Python的世界里,装饰器是一个强大的工具,它能够让我们以简洁的方式修改函数的行为,增加额外的功能而不需要重写原有代码。本文将带你了解装饰器的基本概念,并通过实例展示如何一步步构建自己的装饰器,从而让你的代码更加高效、易于维护。
|
25天前
|
开发框架 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第20天】在编程的海洋中,简洁与强大是航行的双桨。Python的装饰器,这一高级特性,恰似海风助力,让代码更优雅、功能更强大。本文将带你领略装饰器的奥秘,从基础概念到实际应用,一步步深入其内涵与意义。
|
30天前
|
云计算 Python
用python给你写个简单的计算器功能网页啊
这张图片展示了阿里巴巴集团的组织架构图,涵盖了核心电商、云计算、数字媒体与娱乐、创新业务等主要板块,以及各板块下的具体业务单元和部门。
|
1月前
|
设计模式 开发者 Python
Python中的装饰器:简化代码与增强功能
【10月更文挑战第9天】在编程的世界里,效率和可读性是衡量代码质量的两大关键指标。Python语言以其简洁明了的语法赢得了无数开发者的青睐,而装饰器则是其独特魅力之一。本文将深入探讨装饰器的工作原理、使用方法以及如何通过自定义装饰器来提升代码的重用性和可维护性,让读者能够更加高效地编写出既优雅又功能强大的代码。