基于fo-dicom 的 Worklist CStore 我的学习实现路线
學(xué)習(xí)了三個周的DICOM協(xié)議,主要進(jìn)行了Worklist、CStore應(yīng)用測試,下面總結(jié)一下過程中收獲的心得
剛開始接觸DICOM這個東西領(lǐng)導(dǎo)提出兩個需求測試實現(xiàn)Worklist和DICOM文件下載,后面又加了壓縮DCM文件,而且他說網(wǎng)上有代碼,讓我下下來馬上在機(jī)器上測試,我當(dāng)時還是一頭霧水,不知從何下手,先沒管代碼的事,最直接的入手材料就是DICOM協(xié)議
[DICOM標(biāo)準(zhǔn)網(wǎng)站](https://www.dicomstandard.org/ - https://www.dicomstandard.org/current/),在CSDN下了中文版的協(xié)議,三個文件講到第十章,應(yīng)該不全,不過了解基本內(nèi)容是夠了,陸續(xù)看了兩天協(xié)議,醫(yī)學(xué)影像領(lǐng)域算是入門了,知道醫(yī)學(xué)影像按照DICOM協(xié)議規(guī)定的數(shù)據(jù)格式、含義、條目存儲為二進(jìn)制文件,收集各種概念HIS、RIS、PACS,對協(xié)議的基本元素、組成、含義有了大致的了解,但對于自己接下來的任務(wù)還不明確,要怎么做。
之前無醫(yī)療行業(yè)開發(fā)經(jīng)驗,表示連HIS都不知道,了解正常的就醫(yī)流程是把我開發(fā)方向的重要支持。
病人在HIS上注冊,經(jīng)hl7消息傳至RIS,RIS上便有了病人的登記信息。做檢查時,成像設(shè)備通過DICOM?Worklist來從RIS上取得需做檢查的病人列表,選擇后做檢查。檢查完成后,圖像便可以傳到PACS中進(jìn)行存儲。在這個過程中,病人信息僅在HIS端輸入一遍,但它流經(jīng)RIS,Modality以及PACS。可以節(jié)省時間,減少錯誤,規(guī)范流程,互聯(lián)互通,形成數(shù)據(jù)共享。理想的情況下,讓醫(yī)生專注于檢查及診斷,而縮短的時間,也會提高病人的滿意度。
第一個任務(wù)是實現(xiàn)worklist,我在各個地方找關(guān)于worklist的信息,協(xié)議里其實講的很清楚
A worklist is the structure to present information related to a particular set of tasks. It specifies particular details for each task. The information supports the selection of the task to be performed first, and supports the perfomance of that task.
簡單理解就是把數(shù)據(jù)庫中的客戶信息上傳至設(shè)備界面,免去手動輸入客戶信息可能錄入錯誤的問題。?
如何實現(xiàn)呢?
有了點基礎(chǔ)只是就可以看代碼了,一開始搜到關(guān)于Worklist的都提到了DCMTK,這是什么東東,也不管三七二十一,
跟著教程就開始愉快的操作啦,就是參考下面這兩個博客
[dcmtk在PACS開發(fā)中的應(yīng)用(基礎(chǔ)篇) 第三章 工作列表(Work List)(一)](https://blog.csdn.net/pachleng/article/details/5800513)
[dcmtk在PACS開發(fā)中的應(yīng)用(基礎(chǔ)篇) 第四章 工作列表(Work List)(二)](https://blog.csdn.net/pachleng/article/details/5827232)
經(jīng)過DCMTK的編譯和配置(也沒管這個是DICOM的C++支持庫,就跟著做,在一抹黑的時候盡量不去管是什么,先弄出來再說)、準(zhǔn)備dump文件,執(zhí)行指令,整個過程還比較順利,命令窗口展示如下
親眼看到了協(xié)議中提到信息,比如病人姓名PN,這應(yīng)該是設(shè)備機(jī)需要的數(shù)據(jù)吧,一下和DICOM拉近了距離,這些和worklist有什么關(guān)系?看到指令中有wlistqry 應(yīng)該是worklist query
wlmscpfs指令指定了wlistdb和端口信息,應(yīng)該是提供數(shù)據(jù)的服務(wù)端,findscu指令執(zhí)行完就看到了查詢的數(shù)據(jù),明白了大概的過程,但是怎么測試設(shè)備機(jī)呢,需要說明的是在沒接觸設(shè)備前我一直沒搞清楚服務(wù)端和客戶端的問題。。
繼續(xù)搜索,終于遇到了DICOM大神的博客(https://blog.csdn.net/zssureqh),他的博客應(yīng)該是我們學(xué)習(xí)DICOM最佳參考,我后面的很多疑問都是看了他的博客才清楚了,收獲很大。
然后就看到了這篇[DICOM:fo-dicom、dcm4che14、dcm4chee等開源庫持續(xù)自我維護(hù)](https://blog.csdn.net/zssureqh/article/details/51926908),原來有基于.net的DICOM庫,喜極而泣,終于要跑上正軌了
基于.net 4.5 [fo-dicom](https://github.com/fo-dicom/fo-dicom)
和示例程序[fo-dicom-samples](https://github.com/fo-dicom/fo-dicom-samples)
然而。。示例程序下下來卻不知道如何上手,這么多項目,運行也直接看不到結(jié)果,令我感到驚喜的是確實有worklist相關(guān)的項目,一個是SCP 一個是SCU,再看協(xié)議,知道是服務(wù)端和客戶端,又不能兩個項目一起啟動,那怎么辦,,后來知道debugge下有可執(zhí)行程序,于是先啟動SCP 再啟動SCU,程序運行起來我就踏實多了,結(jié)合源碼又看了很多相關(guān)的文章,基本程序都理解通了,下一步可以上機(jī)測試了,只是后又遇到客戶機(jī)竟然是XP系統(tǒng)不支持.net4.5 哭了,于是找到下面的庫版本:
基于.net 4.0 [fo-dicom](https://github.com/zssure-thu/fo-dicom)
基于兩個版本的實現(xiàn)方式差別很大,根據(jù)4.5的示例程序,在4.0上進(jìn)行編碼,也是由于對worklist理解不透徹,一直沒跑通,折騰了兩三天,不過CStore一下就通了,后來得知并不一定要在那臺XP系統(tǒng)電腦上部署,就沒怎么再看4.0的程序了
在見到設(shè)備電腦之前,我一直沒怎么想通我的程序要怎么運行,看到儀器設(shè)備的操作界面,我一下懂了,設(shè)備就是所謂的客戶端,我只需要提供服務(wù)端就可以了,又經(jīng)過一個周的測試,幾個儀器都測試通了worklist和CStore。
后面的學(xué)習(xí)我都是參考zssureqh的博客指導(dǎo),特別是下面這篇
[DICOM:DICOM標(biāo)準(zhǔn)學(xué)習(xí)路線圖](https://blog.csdn.net/weixin_42665418/article/details/82112865)
CStore沒有問題,但是花了很多時間折騰下載直接壓縮dcm,后來通過完全下載再在本地壓縮然后上傳云端的方式解決
DICOM的學(xué)習(xí)研究告一段落
?
總結(jié)
以上是生活随笔為你收集整理的基于fo-dicom 的 Worklist CStore 我的学习实现路线的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java打印数组_Java中打印数组内容
- 下一篇: 如何macOS 上优雅的使用 Gauss