DCMTK を Mac で使う

なぜか次世代 HorliX (PHORLIX) の活動が活発化しているみたいで、私も乗り遅れまいと何かできることを探す。

隙間時間使って、ちょっとしたアウトプット出したいとなると、DICOM のタグ解析あたりか。

しっかりやるとなると大変だが、DICOM のタグ解析のライブラリとして有名な DCMTK を Mac でお試しに使ってみよう。

といっても最新 Ver 3.6.7 のライブラリ構築はできている。

意味あるかどうかはわからないが、コマンドラインツールを Xcode でビルドしてみる。

Xcode で Objective-C のコマンドラインツールのプロジェクトを生成して、バイナリツールのソース(今回は dcm2json にした)を持ってきて・・・とやる。

あっさり成功。

CMake ではできているので、当たり前か。

若干、迷うとしら、リンカオプションの与え方。

ライブラリ自体をビルドした時、私は WITH ZLIB を YES にしたので、zlib 自体のコードはライブラリやヘッダに含まれているはず。

最初、「だから、zlib 関係のオプションは要らんかな」と思っていたが、実際ビルドすると、zlib_version が undefined symbol(s) で見つからないとリンカに怒られてしまった。

dcmtk と zlib は(同包されているとはいえ)本来は、別ライブラリなので、それもそうか。

結局、-lz というオプションを与えて解決。

きれいにビルドできましたとさ。

しかし、libzlib とかって Mac のどこにあるんでしょうね?

時間あったら調べます。

補足:DCMTK ビルド時に zlib や iconv を使ったかどうかは人によって異なるし、しばらく経つと自分でも忘れると思うのでので、dcmtk のライブラリを使いたい時は

#ifdef WITH_ZLIB
#include <zlib.h>                       /* for zlibVersion() */
#endif
#ifdef DCMTK_ENABLE_CHARSET_CONVERSION
#include "dcmtk/ofstd/ofchrenc.h"       /* for OFCharacterEncoding */
#endif

をおまじないのように書いておくといいかもしれません。

参考:libzlib を見つけに行く時に、Xcode で使える環境変数を知っておくと便利。

Xcodeのスクリプトで使える環境変数(備忘録)

あたりを参考に。これは使ってないと忘れる。

なお、Xcode から、ビルドしたいコマンドラインツールに引数を与える方法はこの記事参照。

 

 

 

dcm4chee-arc-light 5.29.2 のデプロイ

前回の記事で、ビルドが完了したので、WildFly 26 へデプロイ。

公式の教えはここ

少々ダルいが、手順通りやっていくか・・・などと言ってましたが、これがとにかく長い。

ポイントのみにします。

Initialize Database

ここはそんなに面倒でもない。

今回は postgreSQL を使用。

pgAdmin が使えるなら、コマンドを叩くより速いので、そうした方がええかも。

ユーザー dcm4che さんを作成し、このユーザーをオーナーとするデータベース dcm4che を作成。

データベースのスキーマの一覧およびスクリプトは、(PostgreSQL に限らず)ここにある。

今回は、

create-psql.sql, create-fk-index.sql, create-case-insensitive-index.sql

が必要ですが、ソースコードの dcm4chee-arc-light -> src -> resources 以下にあります。

sourceforge からバイナリ落としてきた人は解凍すればわかるので説明は割愛。ソースコード落としてきた人は、上の位置にスクリプトはあるので、それを使いましょう。(どっちでやっても同一の内容です)

これも pgAdmin から操作した方が楽。

これで、テーブルが作成されます。

DICOM 仕様書で規定されている patient – study – series の構造がこのテーブル構成からも窺えます。

Setup LDAP Server

LDAP というのは、Lightweight Directory Access Protocol の略で、MS の Active Directory の上位概念みたいなやつです。

Mac では、他の Unix マシン同様、既に入ってます。
各種設定ファイルは、/etc/openldap を参照。

GitLab でソースが公開されていますが、GitHub にもそのミラーサイトがあります。(ちなみに C。もはや Java でもなんでもない…)

wiki の解説にもあるように、この考え方自体は興味深いんですが、いかんせん、後に出てくる諸々のプロジェクトがメンテされてなさすぎ。

ところで、OpenLDAP の設定をするのに

・slapd.conf にschma などをセットする

・dynamic runtime configuration を使う

の二通りの方法が書かれていますが、後者の方が簡単でしょう。

なのですが、後者を使う場合、ldap-utils が必要です。が、この MacOS バージョンはありません。とすると、前者の方法論を取るしかないと思うのですが、これがなかなか大変。検討中です。

Ubuntu にデプロイする場合は『Ubuntu 18.04にDcm4chee-arc-lightをインストールする』がまとまってますので、参考にするといいかと思います。

(前者の方法論は、後日、まとめる予定。以下はメモ的なもの)

OpenDJ のリポジトリ

Apache Directory のソースコード
org.apache.directory.checkstyle-configuration.version のバージョンを 2.0.1 に変更。

Setup WildFly

今回ビルドしたバージョンは 5.29.2 で、5.16.1 onwards (5.16.1 以降)なのでインストラクション通り進めれば OK な(はず)。

と思ってましたが、ここもそこそこ長い。

ポイントだけ書いておくと

・動かすだけでよければ、WildFly の細かなチューニングは後回しにして、まず module などを整備しましょう。

・5.29.2 では、WildFly の full バージョンではなく、web profile を使うので、standalone.xml を dcm4chee-arc.xml とリネームして、ここでポンポンポンと各種設定を行う。

のがいいんではないでしょうか。

一応、デプロイまでできると

フロントの ui を通じて各種操作を行うことができます。

 

dcm4chee-arc-light 5.29.2 のビルド

C++ 系の オープンソースの PACS は Orthanc が有名だが、Java 系では dcm4chee-arc-light が有名なようだ。

某先生も「arc-light は JakartaEE には対応していないので、手を出していないが、ライブラリの方はけっこう使えるようだ」と言っていた。

JavaEE 環境になってしまうがそこら辺は割り切って試してみますかね。

なお、ビルドはそれほど難しくありませんが、デプロイがとにかく手順がかかる。
よほどの事情がない限り、sourceforge で公開されているバイナリを使った方がいいでしょう。

ライブラリ dcm4che をビルド

dcm4che というのが dcm4chee-arc-light を構築するのに必要なライブラリ、arc-light は PACS サーバーそのもの、みたいです。

なので、先に dcm4che をビルド。

mvnw コマンドを使うらしいのですが、まずは maven をインストールしておきましょう。

git コマンドで

git clone git@github.com:dcm4che/dcm4che.git

として、dcm4che のソースをローカルマシンにもってくる。

リポジトリの教えにあるように

./mvnw install

としてビルドが始まりますが、mvnw コマンドは mvn の何かのラッパーのようでやや間があきます。

ビルドが始まってからは速い。

となれば、ビルドは成功。

dcm4chee-arc-light のビルド

これまでと同様にソースコードの準備。

git clone git@github.com:dcm4che/dcm4chee-arc-light.git

としてソースコードをローカルマシンに持ってくる。

ビルドにはオプションがあるので、お好みで。

とりあえず試すだけならセキュアな UI や API は要らないでしょうから、

mvn install -D db=psql

でいいと思います。

数分、かかりますが、ビルド成功。

dcm4chee-arc-light -> dcm4chee-arc-war -> target に war ファイルができているので、これをデプロイすればいいんでしょうか。

デプロイは面倒という記事が散見されるので、これは稿をあらためて。

 

医師免許持ちで臨床をまったくやらない人はそれなりの理由がある場合が多い

それほど強く主張するわけではないが、この記事のタイトルみたいなことは医師界隈ではそれなりのコンセンサスは取れていると思う。

もちろん、ガチガチの基礎系の場合、意識的にやってないという人はいる
(それでも当直や老健あたりの診察業務程度ならやっている人が大半だと思うが)。

結論から言うと、キャリア初期に臨床畑に進もうとして果たせず、その後、臨床業務から離れている人は、それなりの問題を抱えている人が多い。

具体例を挙げるとわかりやすいでしょうか。

何ら経験がないのに患者さんの同意も得ずに難度の高いオペを施行して、当然、失敗。さらにそのことを隠蔽、裁判沙汰になっても自分の非を一切認めない医師。(これに近いことはたまにニュースにも取り上げられてますよね)

患者さんとまったくコミュニケーションが取れない医師。(そんな医師いないと思うでしょ? でもいるんですよ、実際。今だと面接でハジかれるとは思いますが)

・・・などなど。

で、こういった医師は、臨床現場の主流からオミットされ、いつの間にか消えているというか、行方知れずになっている場合が多い。

ところで、先日、フェイザーの方々が、こんなコメントの投稿などに関して注意喚起の記事を公開した。

著作権法違反が疑われるコメントの掲載はできかねます

細かいことには触れませんが、ここに至るまでに警告のようなことは発していたのに小林さん完全無視でしたから、しょうがないと言えるでしょう。

私も某MLに入会しようとしたとき、管理人の方から「小林慎治は喧嘩売るような感じできますから、気をつけてくださいね」とアドバイスをもらったことはある。

快く思っていなかった医師は多かったようですね。

 

ANN2b

(追記)これは某掲示板の書き込み。
出どころが出どころなので信頼性に乏しいし(まず、なにより「医者の資格はない」というのは明らかな誤り。愛媛大学第一内科に所属していたれっきとした医師)、この「小林慎治」が件の小林さんと同一かという保証はないんですが、医師-患者の信頼関係ができていないと、こういった感じの悪評立てられますね。(実際は、単なるちょっとした行き違いで患者さんが逆上して、腹いせに勢い任せで書いた、なんてのが多いんですが)

精神科なんて、こんな話は山ほどあるんで、いちいち気にしてたら身が持たないです(苦笑)。

(追記)これはある方tweet 。真偽のほどはわかりませんが、こういうことは医療現場ではよくあります。


それはともかく、旦那さんが受けた治療に大変深い憤りと不信感を持たれていることは伝わってきます。
このような事態を未然に防ぐのも医師の務めだと私は思っております。

Apple Watch の心電図アプリの計測データを外部に取り出す

iPhone の準備が整ったところで Apple Watch も導入。
6 シリーズの Nike モデルにした。


アルミスペースグレイの筐体に黒系のバンドにしたので「ちょっと重くなるかな?」と心配していたが、あまり強い自己主張なくすっきりとまとまっていてこれはこれでアリだと思うようになった。

ついでで書いておくとバンドはかなり容易に変えられるし、文字盤なども画面操作一発で変更できる。だから、購入アイテムの選択肢に迷ったとき、まず決めるべきは、シリーズ(モデル)筐体の材質と大きさと色だ。

 

それでは、本題。

私の興味の中心はやはり心電図アプリなんだが、その意義とか測定方法などは色々な人が様々なやり方で情報発信しているので、ここでは割愛。

Apple Watch で取得したデータは iPhone に送られるのだが、そのデータの取り出し方に関して書く。

手軽にできる方法は次の二通り。

PDF で書き出す

これはよく知られた方法。
ヘルスケア→心電図(ECG)→ PDF に書き出したいデータを選択
で、この画面になる。

「医師に渡すためにPDFを書き出す」をタップして適当なプリンタから打ち出すか、AirDrop などで Mac に PDF ファイルとして送りあとはファイルとして保管すればいい。

気の利いた医療者ならば、医療システム(電子カルテやPACSと呼ばれる画像サーバなど)のどこかに保管してくれる(はず)だ。

電子カルテにこのように貼ってもらえれば、心電図アプリも本望だろう。

 

PACS や画像ビューアなどにも「画像として」取り込むことはできる(後述するように「データとして」取り込む方がメリット大きいんですが)。

ちなみに PHR (Personal Health Record) という概念があり、今後は日本でも自分の医療データは自分で管理するという時代になると言われている。
今のところ、興味深い試みはあるもののなかなか実現できそうな感じがないんですが・・・。

ヘルスケアデータ全体を zip ファイルで取り出す

これはあまり知られていないかもしれないが、iPhone 内に記録されているヘルスケア系のデータを完全な形ですべて取ってこれるので、以下の方法は有用。

ヘルスケアアイコンをタップして概要のページが出てきたら、画面右上のユーザーアイコンをタップする。


すると次の画面に遷移するので、「すべてのヘルスケアデータを書き出す」を選べばよい。


データをどこに送るか iPhone が訊いてくるので、適当に選ぶ。
たぶん、一番簡単なのは AirDrop で Mac に送ること。
送受信が上手くいけば、Mac の「ダウンロード」フォルダ内に「書き出したデータ.zip」が送られているはずなので、これを解凍する。
apple_health_export フォルダがあるので、これを「書類」あたりに配置しておけばいいでしょう。
なお、心電図データは apple_health_export -> electrocardiograms フォルダ内に CSV ファイル形式で記録されています。
この方法のいい点は、(おそらく)生データが取得できるところ。

「データとして」情報が取って来れると2次的な利用もしやすくなる。
実は apple watch は心電図アプリを使って計測を始めると、生体からの電気シグナルを 1 秒間におおよそ 512 回程度サンプリングしており、そのデータを直接加工することができる。
例えば、


などというデータがあった場合、(この場合は)「S波が歪んでいるのでもうちょっと詳しくみてみたい」ということがある。
これは、適当なプログラムを組めば、以下のように実現できる。
(python という言語を使用。コードはここを参考にさせてもらった)

1550 〜 1650 回のサンプリング値のみを表示させているので、波形形状がより詳細に描かれているのがわかると思う。

もっとマニアックな方法

実は、上記二つ以外にもやり方はあるのだが、プログラミングまで踏み込まないと実現できないのでここでは説明は省略。

 

air-h-128k-il