Very importantly, the DICOM standard specifies DICOM tags that allow to index each single DICOM resource:html
PatientID (0x0010, 0x0020)
(part of the patient module).StudyInstanceUID (0x0020, 0x000d)
(part of the study module).SeriesInstanceUID (0x0020, 0x000e)
(part of the series module).SOPInstanceUID (0x0008, 0x0018)
(part of the SOP module).The DICOM standard orders StudyInstanceUID, SeriesInstanceUID and SOPInstanceUID to be globally unique. 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 own unique identifiers.node
Importantly, even if the PatientID must be unique inside a given hospital, it is not guaranteed to be globally 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.python
Configuring Orthanc simply consists in copying and adapting the default configuration file. This file is in the JSON file format. You can generate a sample configuration file with the following call:mysql
$ Orthanc --config=Configuration.json
Then, start Orthanc by giving it the path to the modified Configuration.json path as a command-line argument:linux
$ Orthanc ./Configuration.json
The default configuration file would:c++
ORTHANC
that listens on the port 4242.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 /
).git
To obtain more diagnostic, you can use the --verbose
or the --trace
options:web
$ 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.sql
systemctl stop firewalld
依赖环境shell
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.2.tar.gz到 /opt/context/Orthanc-1.4.2,进入目录执行:
cmake -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:https://bitbucket.org/sjodogne/orthanc/src/default/LinuxCompilation.txt?fileviewer=file-view-default
其中/opt/context/Orthanc-1.4.2是解压到的目录,根据实际状况酌情修改。
若是Downloading http://www.orthanc-server.com/downloads/third-party/boost_1_67_0_bcpdigest-1.4.0.tar.gz下载不稳定,将出现file DOWNLOAD HASH mismatch错误,将残缺的文件从/opt/context/Orthanc-1.4.2/ThirdPartyDownloads/目录下删除,手动使用迅雷下载再上传到该目录下便可。
若是遇到文件不存在的问题,则手动解压ThirdPartyDownloads目录下对应的压缩包到Orthanc-1.4.2目录下。
若是遇到各类奇怪的错误,那么使用迅雷手动下载所有文件,而后上传便可。
编译OrthancDicomWeb插件
将OrthancDicomWeb-0.5.tar.gz解压到/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.1.tar.gz解压到/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
http://node1:7101/app/explorer.html
添加instances
curl -X POST http://localhost:7101/instances --data-binary @IM0
获取instances的studyid
MainDicomTags:StudyInstanceUID
http://node1:7101/instances/{id}/study
获取instances序号
MainDicomTags:InstanceNumber
http://node1:7101/instances/{instances-id}
获取缩略图
http://node1:7101/instances/{instances-id}/preview
安装Meteor
将meteor-bootstrap-os.linux.x86_64.tar.gz文件和install.meteor.sh上传到/opt/soft目录下。
执行install.meteor.sh便可完成安装。
sh install.meteor.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": "http://localhost:7101/wado", "qidoRoot": "http://localhost:7101/dicom-web", "wadoRoot": "http://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
http://node1:3000
http://node1:3000/viewer/1.2.840.113619.2.25.4.807793.1509756272.891
本文以AWS为例,但并未使用AWS独有功能,阿里云同理可实现。
本文做为一篇指导手册,抛砖引玉,并不是循序渐进的详细教程,实际操做过程当中可能会遇到各类各样的问题,在本文留言便可,小菜会及时解答。