搭建DICOM医学影像系统(OHIF+Orthanc+Nginx)

本文描述如下解决方案: 


  1. 搭建dicom影像系统
  2.  编写dicom服务器的java接口
  3. 更换orthanc的数据库,方便大量图像的应用
  4. 把图片包装成dicom文件

后续要进一步了解的问题:

  • dicom文件归档
  • ohif解读
  • orhanc与其他dicom服务的比较

搭建dicom影像系统


(以上是官方的图)

我们就按图索骥,搭建服务

根据指南:Get Started | OHIF

一步步搭建OHIF服务:

有一点要修改:我不修改这个地方,加载图片好像有卡等现象?但也不是很肯定

 maximumFileSizeToCacheInBytes: 50 * 1024 * 1024

 位置如图: 

 下载Orthanc,运行服务,测试:

http://localhost:8042/app/explorer.html

 右上角有上传文件的按钮,上传相关文件。下面2个服务有时间都需要了解一下:

  • DCM4CHEE
  • Orthanc

文件的例子? 按这个网址去找:dicom文件例子

nginx配置:

	server{
		listen  8800;
		location  /dicom/studies  {
			proxy_pass http://127.0.0.1:8042/dicom-web/studies;
			proxy_set_header HOST $host;
			proxy_set_header X-Real-IP $remote_addr;
			rewrite /orthanc(.*) $1 break;
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
			add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
			add_header 'Access-Control-Allow-Origin' '*';
		}
		
		location  /wado  {
			proxy_pass http://localhost:8042/wado;
			proxy_set_header HOST $host;
			proxy_set_header X-Real-IP $remote_addr;
			rewrite /orthanc(.*) $1 break;
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
			add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
			add_header 'Access-Control-Allow-Origin' '*';
		}
	}

启动OHIF服务:dev:orthanc 

完毕!

总结:2个关键点:

一个是nginx配置:

一个是设置maximumFileSizeToCacheInBytes

接下来需要解决四个问题:

1 我们从设备上抓取的可能是图片,要把图片包装成dicom文件

2 另外 dicom文件上传Orthanc

OHIF本身提供一个生成器把图片包装成dicom(需要研究)

dicom文件上传Orthanc

3、项目当中集成这套服务体系

4、更换Orthanc的数据库服务器,应对大数据量的挑战

编写dicom服务器的java接口


Orthanc文档中,用curl执行相关命令。

test:

C:\Users\xj>curl http://localhost:8042/patients/c9b0ff25-29a5faeb-269fa5e7-a3e9c99f-794ed755
{
   "ID" : "c9b0ff25-29a5faeb-269fa5e7-a3e9c99f-794ed755",
   "IsStable" : true,
   "LastUpdate" : "20221214T080756",
   "MainDicomTags" :
   {
      "PatientBirthDate" : "19990115",
      "PatientID" : "P00004787",
      "PatientName" : "LiuXinLu",
      "PatientSex" : "F"
   },
   "Studies" :
   [
      "175a50e8-e7e128c6-baa0df3e-7b38034f-372f3170"
   ],
   "Type" : "Patient"
}

测试上传dicom:

D:\temp>curl -X POST http://localhost:8042/instances --data-binary @2-32_1_00000C98.IMG
{
   "ID" : "7a2bd226-d679ea16-06f25ba2-e5dbcbcd-a4d6b6e8",
   "ParentPatient" : "c9b0ff25-29a5faeb-269fa5e7-a3e9c99f-794ed755",
   "ParentSeries" : "4bed12be-64764849-5985f66d-d73f9629-4a8beac2",
   "ParentStudy" : "175a50e8-e7e128c6-baa0df3e-7b38034f-372f3170",
   "Path" : "/instances/7a2bd226-d679ea16-06f25ba2-e5dbcbcd-a4d6b6e8",
   "Status" : "Success"
}
D:\temp>curl -X POST http://localhost:8042/instances --data-binary @2-33_1_00000C9E.IMG
{
   "ID" : "b97a3465-b4ba453d-5b558db1-9f50afe1-43cc38fe",
   "ParentPatient" : "c9b0ff25-29a5faeb-269fa5e7-a3e9c99f-794ed755",
   "ParentSeries" : "4bed12be-64764849-5985f66d-d73f9629-4a8beac2",
   "ParentStudy" : "175a50e8-e7e128c6-baa0df3e-7b38034f-372f3170",
   "Path" : "/instances/b97a3465-b4ba453d-5b558db1-9f50afe1-43cc38fe",
   "Status" : "Success"
}

绿色部分即为相应的内容。从响应内容可以看出:

parentPatient(parentSeries)、parentSeries、path(id) 三部分组成,这和DICOM模型是对应的。

用java代码实现:代码上传到了github上:

orthancAPIForJava: java 写的 操作orthanc代码

https://github.com/whcandle/orthancAPIForJava

目前,实现了orthanc文档上restful  API功能:

  • postDcm
  • getPatientInfos
  • getStudies
  • getSeries
  • getInstances
  • getPatient
  • getStudy
  • getSeries
  • getInstance
  • getSimpleTag
  • getTag
  • getDicomField
  • getAllTag
  • downInstance
  • downInstancePng
  • getInfoFromOrthanc
  • getJsonFromOrthanc
  • getValueFromOrthanc
  • downInstanceFromOrthanc
  • delete

根据标签查询的时候,要传标签编码:具体编码见:ps:DICOM的常用Tag分类和说明

Orthanc can send its DICOM instances to remote DICOM modalities (C-Store SCU).这个暂时没有实现,我们不存在影像归档一类的需求,需要的时候再实现它。

使用REST执行查Query/Retrieve 和 Find这一部分也暂时没有实现

使用PostgreSQL数据库 


  1. 安装 PostgreSQL,创建对应的数据库,我这里创建了orthanc_db数据库。
  2. 修改配置文件
  3. 重启服务

文档上说:

The Orthanc project provides two official plugins to replace the default storage area (on the filesystem) and the default SQLite index by a PostgreSQL database.

我们安装的是64位orthanc,所有的插件似乎已经自带,不用另外安装配套的插件

当然你必须创建PostgreSQL数据库,我创建的数据库如下图:

我只是更改了相关配置文件:

 最后重启服务即可!

按文档的描述,要说明插件位置,我没有说明好像也行:

另外,配置文件 lock属性,用于多个实例共享一个数据库的情况,我们用不着,就不管它了。

需要注意的是:

 一段时间不用,可能数据库连接报错!

解决办法是修改postgresql.conf  数据库端相应三个设置。

 ps:TCP KEEPALIVE FOR A BETTER POSTGRESQL EXPERIENCE【译】

PostgreSQL如何控制客户端连接超时

Java 如何把图片JPG转成Dicom文件


ps:Java 如何把图片JPG转成Dicom文件

ps:对数据库表的理解:DICOM医学图像处理:深入剖析Orthanc的SQLite,了解WADO & RESTful API

Welcome to the Orthanc Book! — Orthanc Book documentation

欢迎阅读《Orthanc之书》! — Orthanc之书 documentation

ps:Get Started | OHIF

<think>好的,用户需要将OHIF Viewer部署到本地,我应该如何一步步指导他们呢?首先,我需要回忆一下相关的部署流程,并结合提供的引用内容。 根据引用[2],用户提到了搭建DICOM医学影像系统,使用了OHIFOrthancNginxOrthanc作为DICOM服务器,可能是一个关键的组件。另外,引用[4]提到OHIF Viewer的配置接口,这可能涉及到修改配置文件来连接后端服务。 首先,用户需要安装必要的依赖,比如Node.js和Yarn,因为OHIF是基于React构建的,需要这些工具来编译和启动。然后,从GitHub克隆OHIF的代码库,切换到稳定版本的分支,比如v3-stable,确保稳定性。 接下来,安装依赖并构建项目。这一步可能会有问题,比如网络问题导致依赖安装失败,需要提醒用户检查网络或使用镜像源。 然后,配置后端服务。根据引用[3],dcm4chee-arc-light是一个DICOM存档解决方案,用户可以使用Docker来部署它。或者,引用[2]中的Orthanc也是一个轻量级的选择。用户需要选择一个后端,并确保OHIF配置正确连接到这个后端的DICOM Web服务。 在OHIF的配置文件中,修改dicomWeb的端点,指向本地部署的Orthanc或dcm4chee的地址。例如,Orthanc默认的DICOM Web端口可能是8042,而dcm4chee可能使用8080端口。用户需要确认这些端口没有被占用,并且服务正常运行。 启动OHIF应用后,可能需要通过Nginx进行反向代理,以处理跨域问题或提供HTTPS支持,如引用[2]中提到的Nginx配置。此外,用户可能需要导入测试数据到DICOM服务器,验证OHIF是否能正确显示图像。 测试阶段,访问OHIF的本地地址,如http://localhost:3000,并尝试加载DICOM文件。如果出现连接问题,需要检查后端服务的日志,确认DICOM Web服务是否可访问。 用户可能遇到的常见问题包括跨域错误、配置错误的端点,或者依赖项版本不兼容。需要指导他们如何排查这些问题,例如使用浏览器的开发者工具查看网络请求,或者检查Docker容器的运行状态。 最后,参考引用[4],可能需要详细配置DICOM标签或调整OHIF的界面,这部分可以建议用户查阅官方文档或社区资源获取更多定制化信息。</think>以下是OHIF Viewer本地部署的详细指南: ### 一、环境准备 1. 安装Node.js(建议v16+)和Yarn: ```bash curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt-get install -y nodejs npm install -g yarn ``` 2. 安装Docker(用于部署DICOM服务器): ```bash sudo apt-get install docker.io docker-compose ``` ### 二、部署DICOM服务器(以Orthanc为例) 1. 创建docker-compose.yml文件: ```yaml version: '3' services: orthanc: image: jodogne/orthanc ports: - "4242:4242" # DICOM端口 - "8042:8042" # Web访问端口 ``` 2. 启动服务: ```bash docker-compose up -d ``` 访问 http://localhost:8042 验证安装[^2] ### 三、部署OHIF Viewer 1. 克隆代码库: ```bash git clone https://github.com/OHIF/Viewers.git cd Viewers git checkout v3-stable ``` 2. 安装依赖: ```bash yarn install ``` 3. 修改配置文件`platform/viewer/public/config/default.js`: ```javascript window.config = { servers: { dicomWeb: [{ name: 'Orthanc', wadoUriRoot: 'http://localhost:8042/wado', qidoRoot: 'http://localhost:8042/dicom-web', wadoRoot: 'http://localhost:8042/dicom-web', qidoSupportsIncludeField: true, imageRendering: 'wadors', thumbnailRendering: 'wadors', }] } }; ``` 4. 启动应用: ```bash yarn run dev ``` 访问 http://localhost:3000 验证部署[^4] ### 四、数据测试 1. 使用DICOM工具将测试数据上传至Orthanc: ```bash docker exec -it orthanc_orthanc_1 /usr/share/orthanc/orthanc-dicomweb-tools http://localhost:8042 /data/test.dcm ``` ### 常见问题排查 1. 跨域问题:在Orthanc配置中启用CORS 2. 图像加载失败:检查Orthanc的`/dicom-web`端点响应 3. 版本兼容性:确保Node.js与OHIF版本匹配
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值