Orthanc+OHIFDICOMViewer最佳Dicom解析、在线浏览实践指南(解决⽅案)概念
DICOM identifiers
Very importantly, the DICOM standard specifies DICOM tags that allow to index each single DICOM resource:
Patients are indexed with PatientID (0x0010, 0x0020) (part of the patient module).
Studies are indexed with StudyInstanceUID (0x0020, 0x000d) (part of the study module).
Series are indexed with SeriesInstanceUID (0x0020, 0x000e) (part of the series module).
Instances are indexed with SOPInstanceUID (0x0008, 0x0018) (part of the SOP module).
The DICOM standard orders StudyInstanceUID, SeriesInstanceUID and SOPInstanceUID to be . In other words, it is mandatory for two different imaging devices to never generate the same identifiers, even if they are manufactured by different vendors. Orthanc exploits this rule to derive its .
Importantly, even if the PatientID must be unique inside a given hospital, it is not guaranteed to be glob
ally unique. This means that different patients imaged in different hospitals might share the same PatientID. For this reason, you should always browse from the study level (and not from the patient level) as soon as you deal with an application that handles patients from different hospitals.
Configuration of Orthanc
Configuring Orthanc simply consists in copying and adapting the . This file is in the file format. You can generate a sample configuration file with the following call:
$ Orthanc --config=Configuration.json
Then, start Orthanc by giving it the path to the modified Configuration.json path as a command-line argument:
$ Orthanc ./Configuration.json
The default configuration file would:
Create a DICOM server with the DICOM AET (Application Entity Title) ORTHANC that listens on the port 4242.
Create a HTTP server for the REST API that listens on the port 8042.
Store the Orthanc database in a folder called OrthancStorage.
Remark: When specifying paths under Microsoft Windows, backslashes (i.e. \) should be either escaped by doubling them (as in \\), or replaced by forward slashes (as in /).
To obtain more diagnostic, you can use the --verbose or the --trace options:
$ Orthanc ./Configuration.json --verbose
$ Orthanc ./Configuration.json --trace
Starting with Orthanc 0.9.1, you can also start Orthanc with the path to a directory. In such a case, Orthanc will load all the files with a .json extension in this directory, and merge them to construct the configuration file. This allows to split the global configuration into several files.
搭建
关闭防⽕墙
systemctl stop firewalld
安装orthanc-server
依赖环境
yum install unzip make automake gcc gcc-c++ python cmake curl-devel \
libpng-devel sqlite-devel libuuid-devel openssl-devel \
lua-devel mercurial patch tar
编译安装
解压Orthanc-1.4.到 /opt/context/Orthanc-1.4.2,进⼊⽬录执⾏:
安卓在线解析jsoncmake -DALLOW_DOWNLOADS=ON \
-DUSE_SYSTEM_JSONCPP=OFF \
-DUSE_SYSTEM_MONGOOSE=OFF \
-
DUSE_SYSTEM_PUGIXML=OFF \
-DUSE_SYSTEM_SQLITE=OFF \
-DUSE_SYSTEM_BOOST=OFF \
-DUSE_SYSTEM_DCMTK=OFF \
-DUSE_SYSTEM_GOOGLE_TEST=OFF \
-DUSE_SYSTEM_LIBJPEG=OFF \
-DCMAKE_BUILD_TYPE=Release \
/opt/context/Orthanc-1.4.2
cmake -DALLOW_DOWNLOADS=ON \
-DUSE_SYSTEM_JSONCPP=OFF \
-DUSE_SYSTEM_CIVETWEB=OFF \
-
DUSE_SYSTEM_PUGIXML=OFF \
-DUSE_SYSTEM_SQLITE=OFF \
-DUSE_SYSTEM_BOOST=OFF \
-DUSE_SYSTEM_DCMTK=OFF \
-DUSE_SYSTEM_GOOGLE_TEST=OFF \
-DUSE_SYSTEM_LIBJPEG=OFF \
-DCMAKE_BUILD_TYPE=Release \
/opt/context/Orthanc-1.5.6
make
see:
其中/opt/context/Orthanc-1.4.2是解压到的⽬录,根据实际情况酌情修改。
如果Downloading DOWNLOAD HASH mismatch错误,将残缺的⽂件从/opt/context/Orthanc-1.4.2/ThirdPartyDownloads/⽬录下删除,⼿动使⽤迅雷下载再上传到该⽬录下即可。
如果遇到⽂件不存在的问题,则⼿动解压ThirdPartyDownloads⽬录下对应的压缩包到Orthanc-1.4.2⽬录下。
如果遇到各种奇怪的错误,那么使⽤迅雷⼿动下载全部⽂件,然后上传即可。
编译OrthancDicomWeb插件
将OrthancDicomWeb-0.解压到/opt/context/Orthanc-1.4.2-plugins/OrthancDicomWeb-0.5⽬录
进⼊/opt/context/Orthanc-1.4.2-plugins/OrthancDicomWeb-0.5执⾏:
cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release
make
最终⽣成libOrthancDicomWeb.so.0.5插件⽂件
编译MySQL plugins插件
将OrthancMySQL-1.解压到/opt/context/Orthanc-1.4.2-plugins/OrthancMySQL-1.1⽬录
进⼊/opt/context/Orthanc-1.4.2-plugins/OrthancMySQL-1.1/MySQL执⾏:
cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release
make
The compilation will produce 2 shared libraries, each containing one plugin for Orthanc:
libOrthancMySQLIndex.so.1.1 replaces the default SQLite index of Orthanc by MySQL.
libOrthancMySQLStorage.so.1.1 makes Orthanc store the DICOM files it receives into MySQL.
使⽤OrthancMySQL插件将dicom元数据存储到MySQL中,不仅仅只是为了更好的性能和可靠性,更重要的是为实现Orthanc负载均衡打基础,⾮常重要!!!如果您不需要长远考虑,那么可以跳过此步骤,直接使⽤默认内置的本地SQLite数据库。
配置
配置⽂件在/opt/context/Orthanc-1.4.2/Resources⽬录下Configuration.json。
只需要关注以下⼏项即可:
//服务名称
"Name" : "JuniperOrthanc"
//dicom⽂件存储路径
"StorageDirectory" : "/data/orthanc",
//索引数据库存储路径
"IndexDirectory" : "/data/orthanc",
//插件配置
"Plugins" : [
"/opt/context/Orthanc-1.4.2-plugins/OrthancDicomWeb-0.5/libOrthancDicomWeb.so.0.5",
"/opt/context/Orthanc-1.4.2-plugins/OrthancMySQL-1.1/MySQL/libOrthancMySQLIndex.so.1.1",
"/opt/context/Orthanc-1.4.2-plugins/OrthancMySQL-1.1/MySQL/libOrthancMySQLStorage.so.1.1"
],
//OrthancDicomWeb插件配置
"DicomWeb" : {
"Enable" : true, // Whether DICOMweb support is enabled
"Root" : "/dicom-web/", // Root URI of the DICOMweb API (for QIDO-RS, STOW-RS and WADO-RS)
"EnableWado" : true, // Whether WADO-URI (previously known as WADO) support is enabled
"WadoRoot" : "/wado", // Root URI of the WADO-URI (aka. WADO) API
"Host" : "localhost", // Hard-codes the name of the host for subsequent WADO-RS requests
"Ssl" : false, // Whether HTTPS should be used for subsequent WADO-RS requests
"StowMaxInstances" : 10, // For STOW-RS client, the maximum number of instances in one single HTTP query (0 = no limit)
"StowMaxSize" : 10, // For STOW-RS client, the maximum size of the body in one single HTTP query (in MB, 0 = no limit)
"QidoCaseSensitive" : true // For QIDO-RS server, whether search is case sensitive (since release 0.5)
},
//Mysql插件配置
"MySQL" : {
"EnableIndex" : true, //使⽤mysql存储⽂件索引
"EnableStorage" : false, //使⽤mysql存储dicom⽂件
"Host" : "node3", // For TCP connections (notably Windows)
"Port" : 3306, // For TCP connections (notably Windows)
"UnixSocket" : "", // For UNIX on localhost, Linux set to blank
"Database" : "orthanc",
"Username" : "root",
"Password" : "123",
"Lock" : false // 单个orthanc server独占数据库,如果使⽤多个orthanc server共享mysql数据库,必须关闭
},
//http服务端⼝
"HttpPort" : 7101,
//允许远程访问
"RemoteAccessAllowed" : true,
⽣产环境的配置⽂件请在测试环境配置⽂件的基础上做修改,因为做了许多优化
mkdir -p /data/orthanc
mysql数据库初始化
开启Mysql超长索引字段
show variables like 'innodb_large_prefix';
set global innodb_large_prefix=1;
show variables like 'innodb_file_format';
SET GLOBAL innodb_file_format = BARRACUDA;
set global innodb_file_format_max=BARRACUDA;
在配置的mysql服务中创建orthanc数据库,字符集utf8mb4 -- UTF-8 Unicode,排序规则utf8mb4_unicode_ci
然后在orthanc数据库中执⾏OrthancMySQL-1.1.sql即可。
启动关闭
#进⼊/opt/context/Orthanc-1.4.2⽬录,编译完成之后这⾥有可执⾏⽂件
#启动
./Orthanc /opt/context/Orthanc-1.4.2/Resources/Configuration.json > /data/logs/orthanc/orthanc.log 2>&1 &
#关闭
./Orthanc stop
kill pid
/data/logs/orthanc/orthanc.log为⽇志⽂件路径
访问Orthanc Explorer
orthanc-server http 接⼝
添加instances
curl -X POST localhost:7101/instances --data-binary @IM0
获取instances的studyid
MainDicomTags:StudyInstanceUID
node1:7101/instances/{id}/study
获取instances序号
MainDicomTags:InstanceNumber
node1:7101/instances/{instances-id}
获取缩略图
node1:7101/instances/{instances-id}/preview
安装OHIF DICOM Viewer
安装Meteor
将meteor-bootstrap-os.linux.x86_⽂件和sh上传到/opt/soft⽬录下。
执⾏sh即可完成安装。
sh
Meteor环境需要git客户端依赖:
yum install -y git
安装OHIF DICOM Viewer
将Viewers-master.zip解压到/opt/context/ohif-dicom-viewer⽬录
进⼊/opt/context/ohif-dicom-viewer/OHIFViewer⽬录,利⽤Meteor安装OHIF DICOM Viewer依赖:
METEOR_PACKAGE_DIRS="../Packages" meteor npm install
配置
编辑/opt/context/ohif-dicom-viewer/config/orthancDICOMWeb.json
关注以下⼏点:
"name": "JuniperOrthanc",
"wadoUriRoot": "localhost:7101/wado",
"qidoRoot": "localhost:7101/dicom-web",
"wadoRoot": "localhost:7101/dicom-web",
启动
进⼊/opt/context/ohif-dicom-viewer/OHIFViewer⽬录,利⽤Meteor启动OHIF DICOM Viewer:
METEOR_PACKAGE_DIRS="../Packages" nohup meteor --settings ../config/orthancDICOMWeb.json --allow-superuser > /data/logs/orthanc/ohif-viewer.log 2>&1 &关闭
kill -9 `ps ax | grep meteor | awk '{print $1}'`
⼀定要⽤exit命令退出shell,否则meteor会⾃动停⽌
访问OHIF DICOM Viewer
AWS部署架构图
本⽂以AWS为例,但并未使⽤AWS独有功能,阿⾥云同理可实现。
后记
本⽂作为⼀篇指导⼿册,抛砖引⽟,并⾮按部就班的详细教程,实际操作过程中可能会遇到各种各样的问题,在本⽂留⾔即可,⼩菜会及时解答。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论