2017年2月12日 星期日

使用C#抓取PACS系統中的Worklist

PACS系統使用的通訊協定為DICOM,這是一個醫療影像通訊協定,目前大多數實作於TCP/IP基礎上,分為Client (SCU) 與 Server (SCP) 兩種腳色,Server端的認證方式有IP ACL、Port與AE Title,AE Title等同於HL7中的 Sending/Receiving Application 這個資料欄位的用途

Worklist為PACS系統其中的一個組件,可以跟HIS的檢查系統連線取得目前所有開立的檢查項目清單,並提供標準的DICOM協定讓醫療設備或第三方影像軟體可以存取這些資訊

在C#中可以使用fo-dicom這個library https://github.com/fo-dicom/fo-dicom
存取Worklist的動作稱為C-Find,在fo-dicom專案上有提供sample




茶包零號
使用fo-dicom 3.0的版本搭配VS2015,fo-dicom 2.x實作的DICOM協定可能會不相容於現在的PACS系統

茶包一號
原始範例使用的是 CreateStudyQuery 這個取得的資料欄位的比較少改用CreateWorklistQuery比較適合

茶包二號
C-Find要求就像SQL的Select查詢一下會有要求的欄位名稱,在DICOM中就是TagID
如果需要的TagID不在預設清單中需要修改fo-dicom的程式碼
例如需要取得開立檢查的醫生資訊(RequestingPhysician)
需要修改 \DICOM\Network\DicomCFindRequest.cs 這個檔案的 CreateWorklistQuery 函數內容


茶包三號
如果執行於x86x64的windows系統中使用Desktop的dll即可
使用Portable會需要額外相依的dll (主要是圖型Library)