Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the all-in-one-seo-pack domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the easy-fancybox domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the urvanov-syntax-highlighter domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the advanced-ads domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。lancr ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Warning: Cannot modify header information - headers already sent by (output started at /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php:6114) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-content/plugins/all-in-one-seo-pack/app/Common/Meta/Robots.php on line 87

Warning: Cannot modify header information - headers already sent by (output started at /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php:6114) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/feed-rss2.php on line 8
pyinstaller | 診療放射線技師がPythonをはじめました。 http://radiology-technologist.info 診療放射線技師のPython日記。解析等で使えるコードを作成、アップしていきたいと思っています。その他いろいろ Wed, 16 Dec 2020 13:36:20 +0000 ja hourly 1 https://wordpress.org/?v=6.7 https://i0.wp.com/radiology-technologist.info/wp-content/uploads/2018/09/cropped-logo5.png?fit=32%2C32 pyinstaller | 診療放射線技師がPythonをはじめました。 http://radiology-technologist.info 32 32 164362728 exe化、python3.7は対応しておらず仮想環境構築してみた。 http://radiology-technologist.info/post-637 Sat, 16 May 2020 22:12:55 +0000 http://radiology-technologist.info/?p=637 はじめに こんにちは。前回、匿名化ソフトを作りまし […]

The post exe化、python3.7は対応しておらず仮想環境構築してみた。 first appeared on 診療放射線技師がPythonをはじめました。.]]>
はじめに

こんにちは。前回、匿名化ソフトを作りましたがpythonのバージョンが3.7の場合はexe化できたとしてもエラーが出て使えなかったと思います。実は、私の環境も3.7でexe化してもエラーが出て使えませんでした。

exe化してもエラーがでて使えず・・・・・

いろいろとググってみたのですが、いい解決方法がみつからず結局pyrhonのバージョンを3.6の環境を構築して対策しましたので、その方法を書いてみたいと思います。


広告
デル株式会社

仮想環境とは

そのそも仮想環境とは何なのかということですが、さまざまなライブラリー(numpyとか、openCv等)はいろんなライブラリーと共に使っていくわけなのですが、常に最新のバージョンに対応しているわけではありません。そのため、それぞれのライブラリーがきちんと動くバージョンの環境を構築しなくてはいけません。

今回のexe化もpyinstallerがpython3.7だときちんと動かないのでpython3.6の環境を作ってあげる。それも仮想環境を構築するという事です。


広告
HP Directplus -HP公式オンラインストア-

仮想環境を構築する

python3.6の環境を構築していきたいと思います。

まず、python3.6のバージョンが入っているか確認してみます。PyCharmを立ち上げて初めの画面の下、構成をクリックして「設定」に入ります。

左メニューの「pythonインタープリタ」を選択後、「プロジェクト・インタープリター」の右側下矢印を押して「追加」をクリック

左「Conda Environment」を選択「pythonのバージョン」をクリックして3.6があるか確認します。

この後はコマンドプロンプトでの作業になります。

コマンドプロンプトを立ち上げ

conda create -n 構築する名前 python = 3.6

のコマンドを打ちます。今回は名前をv3.6、pythonのバージョンを3.6で構築したいので最後にpython = 3.6と付け足します。

途中、anacondaの新しいバージョンがありますよと言われていますが・・・

新しく作る環境内に入るライブラリーが表示されています。pydicomが入っていないのがここで確認できます。環境構築後にインストールしましょう。

これで良ければ「y」を入力しエンターで環境が構築されます。

環境構築が無事に終わりました。新しい環境をアクティブにします。

コマンドは

conda activate 環境名  なので

conda activate v3.6

で新しい環境をアクティブにします。先頭に(v3.6)と入っているので環境がアクティブになっているのが確認できます。

そのまま、pydicomのインストールをしてしまいましょう。

pip install pydicom

でインストールです。


広告
BTOパソコン・パソコン関連商品がお買い得!パソコン工房のセール

プロジェクトに仮想環境を適応

PyCharmに戻って、exe化のプログラムのプロジェクトを開きましょう。

「ファイル」で「設定」をクリック。

左「Conda Environment」を選択「既存の環境」右側の「…」をクリックします。anacondaをインストールしたフォルダから「env」を選択すると先ほど構築した環境名のフォルダがあります。その中の「Tools」「python.exe」を選択します。似たフォルダ「pythonw.exe」というフォルダもあるので間違えないように気を付けてください。

これで、「OK」をクリックして完了です。


さいごに

前回の、匿名化のプログラムが動かなかった方は前回の記事にそってexe化を試してみてください。きちんと動くプログラムが出来上がっていると思います。

おつかれさまでした。


環境

  • windows10
  • python3.6.1
  • Anaconda custom(64-bit)
  • PyCharm2020.2(Communication Edition)

広告
上新電機 パソコン買取サービス
The post exe化、python3.7は対応しておらず仮想環境構築してみた。 first appeared on 診療放射線技師がPythonをはじめました。.]]>
637
DICOM画像を匿名化するソフトを作ってみる http://radiology-technologist.info/post-615 Fri, 15 May 2020 00:25:00 +0000 http://radiology-technologist.info/?p=615 はじめに 前回、「DICOMタグをいじってみる」と […]

The post DICOM画像を匿名化するソフトを作ってみる first appeared on 診療放射線技師がPythonをはじめました。.]]>
はじめに

前回、「DICOMタグをいじってみる」という記事を書きました。

DICOMタグをいじれるのなら、それをソフトとして作ってしまおうというのが今回の記事になります。

完成系としては、exeファイルまで作っていきたいと思います。

注意:pythonのバージョン3.7はexe化に対応していませんのでバージョン3.6にダウングレードしてください。


広告
デル株式会社

変更するタグを確認

まずは、匿名化していくタグの確認をしていきましょう。

患者情報のタグは予約タグなので検査画像のDICOMタグを開けば確認できます。

以下は、MRI画像のタグです。匿名化処理をして画像出力したもののタグです。

患者情報は ’0010’ のブロックに登録されています。

この画像出力の装置では患者IDと患者名が匿名化されています。

誕生日や、年齢は匿名化されていませんでした。(念のためモザイク処理をしています。)

なので、今回は患者名(0010,0010)と患者ID(0010,0020)の値を匿名化していきたいと思います。


広告
HP Directplus -HP公式オンラインストア-

プログラムの流れを組む

それでは、簡単に流れを組んでみたいと思います。

  1. ファイルを選択する
  2. 匿名化する値を考える
  3. DICOM画像を読み込む
  4. DICOMタグを書き換える
  5. DICOMを保存する

といった流れになると思います。

変数は必要なさそうですね。

DICOMタグの値表現方式は患者名に関してはPNで文字列、患者IDに関してはLOでLongStringで文字列との認識ですが、数値にて埋めることとします。

匿名化する値ですが、患者名に関しては単純に’Patient^name’、患者IDに関しては元が数値なので0で10桁を埋めることとします。。

DICOMタグを書き換えるにはまず画像を読み込みます。

DICOM画像を読み込むのはpydicom.dcmread(filepath)でできます。

その次はタグの変更です。

[タグの番地].value=値

で出来ます。

DICOMを保存するのは前回の記事「DICOMタグをいじってみる」で記載しましたが

save_as(file_path, write_like_original=False)

で出来ます。


広告
BTOパソコン・パソコン関連商品がお買い得!パソコン工房のセール

プログラムを組む

  1. ファイルを選択する
  2. 匿名化する値を考える
  3. DICOMタグを書き換える
  4. DICOMを保存する

まずは、ファイルを選択するのですがDICOMタグを変更する画像はフォルダごと一気に変えてしまう事が多いと思いますのでフォルダで選択できるようにしましょう。以前の記事で「ダイアログで使って、フォルダでファイルを一括選択する。」で作成したモジュールを使います。

# -*- coding: utf-8 -*-
import fileselect as fs   #ファイルパス取得のモジュールをインポート

ファイルを選択するコードを書きます。

ファイルはfilenamesという変数名で受けるとします。

# -*- coding: utf-8 -*-
import fileselect as fs   #ファイルパス取得のモジュールをインポート

filenames = fs.folder_fileselect()

選択した画像にタグを変更するので、先ほど選択したフォルダ内の画像に対して一つ一つ行っていきますので、for文で処理をしていきます。繰り返す回数はfilenamesに格納されているファイル数だけ繰り返します。(下コード7行目)

# -*- coding: utf-8 -*-
import fileselect as fs   #ファイルパス取得のモジュールをインポート

filenames = fs.folder_fileselect()

for i in range(len(filenames)):

その後は一つ一つDICOM画像を読み込み、DICOMタグを変更し、保存していく作業となります。DICOM画像を読み込むのはpydicomモジュールを使いますのでpydicomをimportしておきましょう。(下コードの4行目)

# -*- coding: utf-8 -*-
import fileselect as fs   #ファイルパス取得のモジュールをインポート
import pydicom

filenames = fs.folder_fileselect()

for i in range(len(filenames)):

DICOM画像を読み込みます。DICOM画像のパスはfilenamesのリストに格納されています。リストから読みだすのはfilenames[番号]ですので、for文の中ではfilenames[i]で読みだせます。

# -*- coding: utf-8 -*-
import fileselect as fs   #ファイルパス取得のモジュールをインポート
import pydicom

filenames = fs.folder_fileselect()

for i in range(len(filenames)):
    dcm = pydicom.dcmread(filenames[i])

読み込みが終わったらタグの編集に入ります。変更するタグは

患者名(0010,0010)と患者ID(0010,0020)です。それぞれ、’Patient name’と’0000000000’で書き換えをしたいと思います。

# -*- coding: utf-8 -*-
import fileselect as fs   #ファイルパス取得のモジュールをインポート
import pydicom

filenames = fs.folder_fileselect()

for i in range(len(filenames)):
    dcm = pydicom.dcmread(filenames[i])
    dcm[0x0010,0x0010].value = ’Patient name’
    dcm[0x0010,0x0020].value = ’0000000000’

書き換えが終了しましたので画像として保存していきます。

先ほども記載しましたが保存は

save_as(file_path, write_like_original=False)

file_pathはDICOM画像を読み込んだfilenamesですので、filenames[i]でいけます。

# -*- coding: utf-8 -*-
import fileselect as fs   #ファイルパス取得のモジュールをインポート
import pydicom

filenames = fs.folder_fileselect()

for i in range(len(filenames)):
    dcm = pydicom.dcmread(filenames[i])
    dcm[0x0010,0x0010].value = 'Patient^name'
    dcm[0x0010,0x0020].value = '0000000000'
    dcm.save_as(filenames[i], write_like_original=False)

これで、先ほど考えた流れは全て完了でプログラムは完成です。

それではプログラムを動かしてみましょう。

実行後の確認ですimage-Jで確認です。

左側が実行前、右側が実行後です。きちんと指定した値に変更されています。

プログラムは計画通りに動いてくれました。

この後は、このプログラムをexe化(アプリとして保存)していきたいとおもいます。


exe化(アプリ化)

プロフラムをexe化するためには’pyinstaller’というモジュールを使います。インストールしていない場合は、コマンドプロンプトを開いてインストールしましょう。(分からない方は「OpenCV,pydicomのインストール」をお手本にしてください。)

コマンドプロンプトを開いたのち以下のコードを実行します。

pip install pyinstaller

この後はコマンドプロンプト上での作業となります。

まずは、ファイルが保存しているフォルダまで移動します。コマンドは’cd’です。

pycharmをインストール先を変更していなければ以下のディレクトリとなります。

C:\Users\ユーザー名\PycharmProjects

基本的に、コマンドプロンプトを立ち上げると

C:\Users\ユーザー名\ (\は¥で表示されていると思います)

で表示されていますので、その後に

cd p

と打ち込み、キーボードの’Tab’を押す度にPから始まるフォルダが表示されていきます。’PycharmProjects’が表示されたらEnterキーを押します。

その後、同様に ’cd フォルダ名’ でプログラムを保存したフォルダに移動します。

もし面倒であったら、プログラムがあるフォルダを開いてアドレスバーを右クリック、アドレスをコピーしてコマンドプロンプトに「cd 」の後にペーストで一気に移動できます。

移動した後に以下のコマンドを実行します。

pyinstaller ファイル名.py --onefile

いかがでしょうか?フォルダ内にbuildとdistというフォルダが作成されdistフォルダの中に、exe化されたファイルがありませんか? これをダブルクリックすることでプログラムが実行されます。

このファイルは、pythonがインストールされていないパソコンでも利用出ることができるので大変便利です。


いかがでしたか?きちんとできましたか?

お疲れ様でした。


さいごに

今回は、DICOMの匿名化処理のプログラムを作成し、exe化(アプリ化)してみました。

ただ、pythonのバージョンが3.7を使っている方は多分エラーが出てしまっていると思いますので次回その対処法をやっていきたいと思います。


環境

  • windows10
  • python3.6.1
  • Anaconda custom(64-bit)
  • PyCharm2020.2(Communication Edition)

広告
上新電機 パソコン買取サービス
The post DICOM画像を匿名化するソフトを作ってみる first appeared on 診療放射線技師がPythonをはじめました。.]]>
615