Mac Pro上的DCMTK的服务搭建

关于的DCMTK的交叉编译:Howto CompileAndroid - DCMTK - OFFIS DCMTK and DICOM Projects

SVID_20260704_221235_1

一.Mac Pro上的DCMTK的服务搭建:

dcmtk-3.6.8.tar.gz的下载地址:https://support.dcmtk.org/redmine/attachments/197

1.解压压缩包:

bash 复制代码
tar -zxvf dcmtk-3.6.8.tar.gz

2.在dcmtk-3.6.8创建build目录:

bash 复制代码
cd dcmtk-3.6.8
# 创建编译目录
mkdir build && cd build

3.cmake配置:

bash 复制代码
cmake .. \
-DCMAKE_INSTALL_PREFIX=$HOME/dcmtk-3.6.8-install \
-DCMAKE_CXX_STANDARD=11 \
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \
-DDCMTK_WITH_WLSTORAGE=ON \
-DCMAKE_BUILD_RPATH=$HOME/dcmtk-3.6.8-install/lib \
-DCMAKE_INSTALL_RPATH=$HOME/dcmtk-3.6.8-install/lib

下面是cmake的过程:

4.make编译:

bash 复制代码
    make -j$(sysctl -n hw.ncpu)

make的效果:

5.make install:

bash 复制代码
    make install

make install效果:

最终编译结构会在自己的/Users/用户/dcmtk-3.6.8-install/bin目录下。

6.配置环境变量:

bash 复制代码
    echo 'export PATH="/Users/用户名/dcmtk-3.6.8-install/bin:$PATH"' >> ~/.zshrc
bash 复制代码
    source ~/.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写入如下配置:

bash 复制代码
# 全局网络配置
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目录下打开命令行窗口:

bash 复制代码
    dcmqrscp -d --config dcmqrscp.cfg 11112

测试C-FIND:

bash 复制代码
    echoscu -d -aec ACME_STORE -aet ACME1 192.168.43.104 11112

如下最终打印"Received Echo Response (Success)"表示C-ECHO测试通过:

而服务端同样有C-EHCO的打印如下:

测试C-STORE:

bash 复制代码
storescu -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:

这里限定查询规则:

bash 复制代码
findscu -v -S -aec ACME_STORE -aet ACME1 192.168.43.104 11112 -k QueryRetrieveLevel=STUDY -k StudyInstanceUID

如下提示查询到结果:

服务端的打印如下:

测试C-MOVE:

bash 复制代码
movescu -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 QueryRetrieveLevel=STUDY \
  -k StudyInstanceUID="用C-FIND查询到的UID"

C-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/DcmtkDemo

1.修改dcmqrscp.cfg文件:

与Android设备同连一个局域网下的本地服务电脑的ip:

bash 复制代码
    ipconfig getifaddr en0

查询Android的IP,将Android端的IP写入到dcmqrscp.cfg中的"acme1 = (ACME1, 192.168.1.19(Android端IP), 1234)"

bash 复制代码
# 全局网络配置
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 END

dcmqrscp -d --disable-host-lookup --config dcmqrscp.cfg 11112 打开服务。

2.Android输入服务端的参数:

  • Host:192.168.1.11(电脑的IP地址)
  • Port:11112
  • Local AET: ANDROID_SCU
  • Remote AET:ACME_STORE

3.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转成.wl:

4.用findscu命令查询Worklist:

bash 复制代码
findscu 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/DcmtkDemo

Worklist的查询效果如下:


GitHub项目地址为:https://github.com/wangyongyao1989/DcmtkDemo

相关推荐
howe88883 个月前
搭建dcmtk的demo服务器
服务器·dicom
byte轻骑兵3 个月前
【LE Audio】PACS精讲[2]: 服务层核心逻辑,玩转音频能力发布与交互
音视频·蓝牙·pacs·le audio·低功耗音频
佟格湾7 个月前
DICOM入门系列——DICOMweb实战:用RESTful API访问医学影像
dicom
裤裤兔8 个月前
变换nii图像的左右,将nifti影像左右翻转
dicom·医学影像·医学图像·脑科学·影像·nifti
西哥写代码8 个月前
基于dcmtk的dicom工具 第十三章 dicom文件导出bmp、jpg、png、tiff、mp4
c++·mfc·dicom·dcmtk·tiffopen·dipngplugin·dijpegplugin
西哥写代码8 个月前
基于dcmtk的dicom工具 第十二章 响应鼠标消息实现图像的调窗、缩放、移动
c++·mfc·dicom·dcmtk·vs2017
西哥写代码8 个月前
基于dcmtk的dicom工具 第十章 读取dicom文件图像数据并显示
c++·mfc·dcmtk·vs2017
西哥写代码8 个月前
基于dcmtk的dicom工具 第十一章 加载dicom文件多帧图数据
c++·dicom·dcmtk·vs2017·多帧图
右弦GISer1 年前
【UE5医学影像可视化】读取本地Dicom生成VolumeTexture,实现2D显示和自动翻页
ue5·dicom·医学图像