Mac Pro上的DCMTK的服务搭建
关于的DCMTK的交叉编译Howto CompileAndroid - DCMTK - OFFIS DCMTK and DICOM ProjectsSVID_20260704_221235_1一.Mac Pro上的DCMTK的服务搭建dcmtk-3.6.8.tar.gz的下载地址https://support.dcmtk.org/redmine/attachments/1971.解压压缩包tar -zxvf dcmtk-3.6.8.tar.gz2.在dcmtk-3.6.8创建build目录cd dcmtk-3.6.8 # 创建编译目录 mkdir build cd build3.cmake配置:cmake .. \ -DCMAKE_INSTALL_PREFIX$HOME/dcmtk-3.6.8-install \ -DCMAKE_CXX_STANDARD11 \ -DCMAKE_CXX_STANDARD_REQUIREDON \ -DBUILD_SHARED_LIBSON \ -DCMAKE_INSTALL_RPATH_USE_LINK_PATHON \ -DDCMTK_WITH_WLSTORAGEON \ -DCMAKE_BUILD_RPATH$HOME/dcmtk-3.6.8-install/lib \ -DCMAKE_INSTALL_RPATH$HOME/dcmtk-3.6.8-install/lib下面是cmake的过程4.make编译make -j$(sysctl -n hw.ncpu)make的效果5.make installmake installmake install效果最终编译结构会在自己的/Users/用户/dcmtk-3.6.8-install/bin目录下。6.配置环境变量echo export PATH/Users/用户名/dcmtk-3.6.8-install/bin:$PATH ~/.zshrcsource ~/.zshrc配置操作如下7.本地C-EHCO/C-STORE/C-FIND回环测试新建文件目录建议纯英文路径提前建好所有文件夹避免路径不存在导致解析静默失败/Users/wangyao/software/dcmtk/DCMTK_PACS_TEST/├─ SCP # 服务端目录│ ├─ database # PACS影像存储库必须提前新建│ └─ dcmqrscp.cfg # 核心配置文件└─ SCU # 客户端目录├─ test.dcm # 测试DICOM文件└─ recv_db # C-MOVE拉取影像存放目录提前新建向dcmqrscp.cfg写入如下配置# 全局网络配置 NetworkTCPPort 11112 MaxPDUSize 16384 MaxAssociations 16 # 客户端白名单表 HostTable BEGIN # 格式自定义标识 (客户端AET, 本机真实主机名, MOVE接收端口) acme1 (ACME1, 192.168.43.104, 1234) acme_local (ACME1, 127.0.0.1, 1234) # macbookpro本机主机名 acme_macbook (ACME1, macbookpro, 1234) acmeCTcompany acme1, acme_local,acme_macbook HostTable END # 厂商表可保留默认不影响核心功能 VendorTable BEGIN Acme CT Company acmeCTcompany VendorTable END # 服务端存储AE表 AETable BEGIN # 格式服务端AE名称 存储路径 权限 配额 允许访问的客户端组 ACME_STORE /Users/wangyao/software/dcmtk/DCMTK_PACS_TEST/SCP/database RW (9, 1024mb) acmeCTcompany AETable END开启服务在../SCP目录下打开命令行窗口dcmqrscp -d --config dcmqrscp.cfg 11112测试C-FINDechoscu -d -aec ACME_STORE -aet ACME1 192.168.43.104 11112如下最终打印“Received Echo Response (Success)”表示C-ECHO测试通过而服务端同样有C-EHCO的打印如下测试C-STOREstorescu -d -aet ACME1 -aec ACME_STORE 192.168.43.104 11112 sd /Users/wangyao/software/dcmtk/DCMTK_PACS_TEST/SCU/test.dcm如下提示“DIMSE Status : 0x0000: Success”表示成功而服务端同样有C-STORE的打印如下测试C-FIN这里限定查询规则findscu -v -S -aec ACME_STORE -aet ACME1 192.168.43.104 11112 -k QueryRetrieveLevelSTUDY -k StudyInstanceUID如下提示查询到结果服务端的打印如下测试C-MOVEmovescu -v -S \ -aec ACME_STORE \ -aet ACME1 \ -aem ACME1 \ --port 1234 \ -od /Users/wangyao/software/dcmtk/DCMTK_PACS_TEST/SCU/recv_db \ 192.168.43.104 11112 \ -k QueryRetrieveLevelSTUDY \ -k StudyInstanceUID用C-FIND查询到的UIDC-FIND查询到的UID:将以上的UID添加到C-MOVE中服务端打印如下之后在/DCMTK_PACS_TEST/SCU/recv_db 路径下有了c-move下的dcm文件8.Mac Pro端的DCMTK的服务已经搭建完成经过以上的1-7步骤已经在Mac Pro端搭建好了完全能运行DCMTK服务。二.Android DCMTK的实现首先把DCMTK与Android平台交叉编译的静态库或动态库/.h文件引入到工程中。GitHub项目地址为https://github.com/wangyongyao1989/DcmtkDemo1.修改dcmqrscp.cfg文件与Android设备同连一个局域网下的本地服务电脑的ipipconfig getifaddr en0查询Android的IP将Android端的IP写入到dcmqrscp.cfg中的“acme1 (ACME1, 192.168.1.19Android端IP, 1234)”# 全局网络配置 NetworkTCPPort 11112 MaxPDUSize 16384 MaxAssociations 16 # 客户端白名单表 HostTable BEGIN android_client (ANDROID_SCU, 192.168.1.11, 1234) acme1 (ACME1,macbookpro, 1234) acmeCTcompany acme1, android_client HostTable END VendorTable BEGIN Acme CT Company acmeCTcompany VendorTable END # 服务端存储AE表 AETable BEGIN # 格式服务端AE名称 存储路径 权限 配额 允许访问的客户端组 ACME_STORE /Users/wangyao/software/dcmtk/DCMTK_PACS_TEST/SCP/database RW (9, 1024mb) android_client AETable ENDdcmqrscp -d --disable-host-lookup --config dcmqrscp.cfg 11112 打开服务。2.Android输入服务端的参数Host192.168.1.11电脑的IP地址Port11112Local AET ANDROID_SCURemote AETACME_STORE3.Android端的C-STORE演示效果如下4.Android端的C-FIND演示效果如下5.Android端的C-MOVE将c-move下来的dcm转成图片并显示演示效果如下上面就是dcmtk是实现从dcmtk服务的搭建再到c-ehco/c-store/c-find/c-move的测试的全过程。基本实现PACS传输的基础要求。三.Worklist服务的搭建1.创建wordlist的工作目录空间复制官方模板从 DCMTK 安装包中复制模板文件到工作目录将/dcmtk/dcmtk-3.6.8/dcmwlm/data中的wlistdb和wlistqry拷贝到如下目录中..\DCMTK_PACS_TEST\Worklist├─ wlistdb # 待检查单数据库根目录│ └─ OFFIS # 以 AE Title 命名的子目录对应设备的目标AE│ └─ lockfile # 空锁文件无内容必须创建核心踩坑点└─ wlistqry # 查询模板目录2.编辑待检查单模板打开 wlistdb\sample.dump修改核心业务字段可直接使用默认模板测试# 患者信息(0010,0010) PN [张三^测试](0010,0020) LO P20260630001# 检查信息(0008,0060) CS CT(0040,0001) AE OFFIS # 必须与目录名、查询AE保持一致(0032,1060) LO 胸部平扫3.转换为二进制 .wl 待检查单:在wlistdb/OFFIS/目录下用dump2dcm将.dump转成.wl4.用findscu命令查询Worklistfindscu 127.0.0.1 1104 /Users/wangyao/software/dcmtk/DCMTK_PACS_TEST/Worklist/wlistqry/wlist1.wl -aec OFFIS -aet TESTSCU -d查询到的预约单的数据为5.Android端的Worklist查询GitHub项目地址为https://github.com/wangyongyao1989/DcmtkDemoWorklist的查询效果如下GitHub项目地址为https://github.com/wangyongyao1989/DcmtkDemo