linux mint の端末の flask から ubuntu 上にある mysql にアクセスして必要な情報を取得して、その情報により NAS 内にある dicom ファイルを ftp ダウンロードして weasis を起動して dicom ファイルを閲覧します。
以前は、dcm4chee のディレクトリ構造を解析して、処理すべき dicom ファイルのタグ情報を読み込んで、dcm4chee と同じようなディレクトリ構造を作成していましたが、今度は dcm4chee とは無関係にディレクトリ構造を構築します。
とは言っても、dcm4chee とちょっと似ている構造にします。
これまでは以下のように、年/月/日でディレクトリを作成しその中にカルテ番号さらに検査IDディレクトリを作成していました。
pDICOM
└── 2021
└── 11
└── 12
├── 20100761
│ └── 9473
│ ├── 9473_00000.dcm
│ ├── 9473_00001.dcm
│ ├── 9473_00002.dcm
│ ├── 9473_00003.dcm
│ ├── 9473_00004.dcm
│ ├── 9473_00005.dcm
│ ├── 9473_00006.dcm
│ ├── 9473_00007.dcm
│ ├── 9473_00008.dcm
│ └── 9473_00009.dcm
├── 21202817
│ └── 999
│ ├── 999_00000.dcm
│ ├── 999_00001.dcm
│ ├── 999_00002.dcm
│ ├── 999_00003.dcm
│ ├── 999_00004.dcm
│ ├── 999_00005.dcm
│ └── 999_00006.dcm
└── 9501731
└── 976
├── 976_00000.dcm
├── 976_00001.dcm
├── 976_00002.dcm
├── 976_00003.dcm
├── 976_00004.dcm
├── 976_00005.dcm
├── 976_00006.dcm
├── 976_00007.dcm
├── 976_00008.dcm
├── 976_00009.dcm
└── 976_00010.dcm
最初の「年/月/日」は dcm4chee のものをそのまま持ってきていました。
これは検査日ではなくて、dicom ファイルを処理した日付です。
これはこれでいいと思っていました。
しかし、よく考えたら、やはり「年/月/日」は検査施行日の方がいいと思います。
そうすれば、同じ dicom ファイルを python で処理すると同じディレクトリ構造になるはず。
検査施行日のディレクトリを作成する
dicom ファイルのタグ情報には studyDate という項目があり、例えば「20211209」というような文字列になっています。
この文字列を日付に変換して、「年/月/日」を抽出しディレクトリを作成します。
@classmethod
def getBdir(self, studyDate ):
dte = datetime.datetime.strptime( studyDate, '%Y%m%d')
fpath = dte.strftime('%Y/%m/%d')
return fpath
def copyDicomFile( self, dicomArr ):
dicomFileDir = self.localpydcm
for eachFile in dicomArr:
ds = pydicom.read_file(eachFile)
studyID = ds[0x0020, 0x0010].value
studyDate = ds[0x0008, 0x0020].value
karteNo = ds[0x0010, 0x0020].value
firstDir = Dicom.getBdir( studyDate )
destinationDir = self.localpydcm + firstDir + '/' + karteNo + '/' + studyID
os.makedirs(destinationDir, exist_ok=True)
dicomCount = self.countDicom(destinationDir)
newFileName = studyID + "_%05d.dcm" %(dicomCount)
destination = destinationDir + '/' + newFileName
shutil.copyfile(eachFile, destination)
このようにすれば、検査日によるディレクトリ構造が出来上がるため、やはりバックアップがとても簡単になります。