🙆‍♀️

OrthancのLua script機能拡張を試す

2023/07/31に公開

OrthancのLua機能拡張を試してみます。
公式ドキュメントは以下
https://book.orthanc-server.com/users/lua.html

検証環境

OS: Ubuntu20.04
Docker: 23.0.1
Docker Compose: v2.16.0(plugin)

今回試すこと

DICOM SRを受信したらXMLに変換する

準備

DockerコンテナにDCMTKをインストール

DICOM SR→XML変換は、DCMTKのdsr2xmlコマンドを用いる。
orthancのDockerイメージはUbuntuベースのため、aptでインストールが可能。
以下のようなDockerFileを作成する。

Dockerfile
FROM jodogne/orthanc-plugins:1.12.0
RUN apt-get update
RUN apt-get -y install dcmtk

docker-compose.ymlを修正する。

  • DockerImageを設定していた部分をDockerfileからビルドするように変更
  • Lua scriptとエクスポートディレクトリの設定を追加
docker-compose.yml
 orthanc:
    #image: jodogne/orthanc-plugins:1.12.0
    build: ./docker/orthanc  #Dockerfileがある相対パス
    (中略)
    volumes:
      - ./orthanc_config/orthanc.json:/etc/orthanc/orthanc.json:ro
      - ./orthanc_data:/var/lib/orthanc/data
      - ./orthanc_config/test.lua:/etc/orthanc/test.lua #Lua script
      - ./orthanc_export:/var/lib/orthanc/export #エクスポートディレクトリ

Lua scriptの準備

以下のようなLua scriptファイルを作成する。

test.lua
function OnStoredInstance(instanceId, tags, metadata,origin)
    if tags['Modality']=="SR" then
        local export_path='/var/lib/orthanc/export/'
        local export_file_name = export_path .. tags['SOPInstanceUID'] .. '.dcm'
        local output_file = assert(io.open(export_file_name, 'wb'))
        local dicom = RestApiGet('/instances/' .. instanceId .. '/file')
        output_file:write(dicom)
        output_file:close()
        os.execute('dsr2xml -Ee ' .. export_file_name .. ' ' .. export_file_name .. '.xml' )
    end
end

orthanc.jsonの修正

以下のLuaScriptsの行を追加する。

orthanc.json
"LuaScripts": ["/etc/orthanc/test.lua"],

実行

$ docker compose build
$ docker compose up -d

モダリティや別のPACSよりDICOM送信した際にSRが含まれれば、./orthanc_exportディレクトリにxmlファイルが生成される。

Discussion