2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Orthanc を使ってみた-その1

Last updated at Posted at 2021-09-12

Orthanc を使ってみた

 医療用画像の規格である DICOM をお使いの皆さん、Orthanc ってご存知でしょうか。私も最近知って使ってみたのですが、とても便利ですよね!

 Orthanc の公式サイトでは「Open-source, lightweight DICOM server.」とうたっています。まさにこの通りで、とても簡単に構築でき、トラブルもなく大変便利に使っています。REST API や Lua 言語によるスクリプトも組めるし、フリーだし、素晴らしいです。数百 Study の MRI を溜め込んでますが、今の所トラブルフリーです。

 この記事は試しに Orthanc を少々使ってみた、個人的備忘録的にまとめてみものです。

参考にした web site
本家:https://www.orthanc-server.com/
説明書 (Orthanc book):https://book.orthanc-server.com/

サーバ環境の整備

私の環境
今回使用した環境はこちら

  • OS: Ubuntu 20.04.2 LTS
  • Docker version 20.10.8
  • Mozilla Firefox 90.0.2

Docker rootless
まずはこちらの公式サイトの手順で Docker を整備しました。
https://docs.docker.com/engine/install/ubuntu/
さらに Docker rootless の環境を用意しました。これも公式サイトの手順で OK でした。「Caution: This is experimental function. Please use carefully.」とあるので注意します。
https://docs.docker.jp/engine/security/rootless.html

カスタマイズせずに Orthanc を起動してみる

Orthanc の公式 Docker は様々な repository があります。
https://hub.docker.com/u/jodogne
今回は公式プラグイン全部のせを使ってみます。
https://hub.docker.com/r/jodogne/orthanc-plugins
コマンドはこちら。Port 8042 は http 用です。

$ docker pull jodogne/orthanc-plugins
$ docker run --rm -d --name orthanc1 -p 8042:8042 \
    jodogne/orthanc-plugins

$ docker ps -a などで無事に動作したことが確認できれば、http://localhost:8042/ にアクセスしてみましょう。ID と Password の入力を求められますので、それぞれ「orthanc」、「orthanc」と入力します。すると、このような Orthanc Explorer の画面が見えましたか?
202108162242.png
この Orthanc Explorer 画面の操作は非常に簡単でわかりやすいです。手元にデータが有れば、「Upload」でデータをアップロードしたり、「Do lookup」で保存されたデータを確認したり、画像を見たり、色々やってみましょう。

一通り楽しんだら、コンテナを止めましょう。

$ docker stop orthanc1

Orthanc のカスタマイズ

Orthanc の設定をカスタマイズをしてみましょう。
"orthanc.json" が設定ファイルです。デフォルトの設定ファイルを "~/Orthanc/Config1/" に保存してみましょう。

$ mkdir ~/Orthanc
$ mkdir ~/Orthanc/Config1 
$ docker pull jodogne/orthanc-plugins:1.9.6
$ docker run --rm --entrypoint=cat \
    jodogne/orthanc-plugins:1.9.6 \
    /etc/orthanc/orthanc.json > ~/Orthanc/Config1/orthanc.json

これで "~/Orthanc/Config1/orthanc.json" が生成されました。このファイルを編集しましょう。
変更部分を抜粋すると、この様になりました。

orthanc.json
  // HTTP port 番号の変更 (line 81)
  "HttpPort" : 50010,

  // AET の変更 (line 119)
  "DicomAet" : "ORTHANC1",

  // DICOM port 番号の変更 (line 126)
  "DicomPort" : 60010,

  // すべての SOP class を受け入れる (line 160)
  "UnknownSopClassAccepted" : true,

  // ID, Password を入力させるための "//" の削除 (line 229)
  "RegisteredUsers" : {
    "alice" : "alicePassword"
  },

  // 末尾に "," の追加 (line 826)
  "SynchronousZipStream" : true,

  // PostgreSQL を使うための設定 (line 827)
  "PostgreSQL":{
    "EnableIndex":true,
    "EnableStorage":true,
    "Host":"192.168.10.12",
    "Port":5432,
    "Database":"orthanc",
    "Username":"otpostgres",
    "Password":"otpassword"
  }

設定ファイルに文法的な問題がないか確認します。

$ cat ~/Orthanc/Config1/orthanc.json |json_verify -c
JSON is valid

 Orthanc のデフォルトでは、データベースとして SQLite を使用していますが、性能やスケーラビリティの面から他のデータベースの利用が推奨されています。今回は postgreSQL を使用することにします。設定ファイルでは、最後に記述されている部分がそれに対応します。
 コンテナやサーバ再起動後にもデータが消失しないように、 PostgreSQL 用のディレクトリを作成します。DB はここに保管されることになります。

$ mkdir ~/Orthanc/DB1/

PostgreSQL のコンテナを起動し、Database を作成します。このとき先ほど作成したディレクトリを指定します。また、 Docker の network として "orthanc_nw" も作成します。

$ docker pull postgres:13.3
$ docker network create --subnet=192.168.10.0/24 orthanc_nw
$ docker run -d --name orthanc-postgres1 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /etc/timezone:/etc/timezone:ro \
    -v /home/hogehoge/Orthanc/DB1/:/var/lib/postgresql/data \
    -e POSTGRES_USER=otpostgres \
    -e POSTGRES_PASSWORD=otpassword \
    --net=orthanc_nw --ip=192.168.10.12 \
    postgres:13.3
$ docker run -it --link orthanc-postgres1:postfres \
    --net=orthanc_nw --rm postgres:13.3 \
    sh -c 'echo "CREATE DATABASE orthanc;" \
    |exec psql -h 192.168.10.12 -p 5432 -U otpostgres -h 192.168.10.12'

 このあとPassword for user otpostgres:と表示されるので、設定ファイルで指定した "otpassword" と入力します。 これで Database が生成されました。

 それでは、Orthanc を起動しますが、先の設定ファイルの場所を指定し、タイムゾーンをサーバ環境と同じものを使うようにし、IPアドレスを指定し、詳細なログを吐くように設定します。

$ docker run -d --name orthanc1 \
    -p 50010:50010 \
    -p 60010:60010 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /etc/timezone:/etc/timezone:ro \
    -v /home/hogehoge/Orthanc/Config1/:/etc/orthanc/ \
    --net=orthanc_nw --ip=192.168.10.11 \
    jodogne/orthanc-plugins:1.9.6 \
    --verbose /etc/orthanc

Orthanc の コンテナが起動に成功したかどうか $ docker ps -aで確認します。
成功したなら、 http://localhost:50010 にアクセスします。ID と Password の入力を求められますので、それぞれ「alice」、「alicePassword」と入力します。無事起動できたでしょうか。

OK ならデータを Push してみます。今回は、dcm4che/dcm4che-tools を使用します。

$ docker pull dcm4che/dcm4che-tools:5.25.0
$ docker run --rm --net=orthanc_nw --ip=192.168.10.100 \
    dcm4che/dcm4che-tools:5.25.0 \
    storescu -bDCM4CHEE \
    -cORTHANC1@192.168.10.11:60010 \
    /opt dmc4che/etc/testdata/dicom

ブラウザの "Do lookup" をクリックすると送ったデータが見えるはずです。図のように "DOE^J1 - LEFT WRIST" が見えればOKです。

無題.png

コンテナを止めた後に再度起動して、送ったデータが保存されているか確認します。

$ docker stop orthanc1 orthanc-postgres1
$ docker rm orthanc1 orthanc-postgres1
$ docker run -d --name orthanc-postgres1 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /etc/timezone:/etc/timezone:ro \
    -v /home/hogehoge/Orthanc/DB1/:/var/lib/postgresql/data \
    -e POSTGRES_USER=otpostgres \
    -e POSTGRES_PASSWORD=otpassword \
    --net=orthanc_nw --ip=192.168.10.12 \
    postgres:13.3
$ docker run -d --name orthanc1 \
    -p 50010:50010 \
    -p 60010:60010 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /etc/timezone:/etc/timezone:ro \
    -v /home/hogehoge/Orthanc/Config1/:/etc/orthanc/ \
    --net=orthanc_nw --ip=192.168.10.11 \
    jodogne/orthanc-plugins:1.9.6 \
    --verbose /etc/orthanc

 http://localhost:50010 にアクセスして "Do lookup" をクリックします。
先程同様、 " DOE^J1 - LEFT WRIST" が見えていたら成功です。

 これでその1は完走です。大した苦労もなくできてしまいました。素晴らしい。

 実用上は、サーバ再起動後も自動でコンテナが立ち上がってほしいとか、通信する相手を指定しなければならないとか、受信したデータに対して何らかの処理をしたい、といった要望が出て来ることになると思います。そのあたりを簡単に試したので、その2をいつの日かまとめられたらなぁ、と思っています。いつになりますやら。

つづく

追記

その2を書きました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?