Orthanc+OHIF DICOM Viewer最佳Dicom解析、在線瀏覽實踐指南(解決方案)

概念

DICOM identifiers

Very importantly, the DICOM standard specifies DICOM tags that allow to index each single DICOM resource:html

  • 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 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

Configuration of Orthanc

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++

  • 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 /).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

安裝orthanc-server

依賴環境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

orthanc-server http 接口

添加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

安裝OHIF DICOM Viewer

安裝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爲例,但並未使用AWS獨有功能,阿里雲同理可實現。

dicom上傳、解析、在線預覽解決方案架構圖

後記

本文做爲一篇指導手冊,拋磚引玉,並不是循序漸進的詳細教程,實際操做過程當中可能會遇到各類各樣的問題,在本文留言便可,小菜會及時解答。

相關文章
相關標籤/搜索