張姁 湯琪 王燦燦 汪濤濤 李厚鴻
摘要:虛擬人體解剖系統是采用AR/VR技術將“互聯網+醫療”有機融合。使用3Dmax、unity3D、數據庫等技術在Android平臺設計開發的一款APP。用戶可以在APP上了解疾病信息,更直觀的感受病變與正常的人體組織器官的區別,通過選擇病變部位查看具體信息或通過首頁關鍵詞搜索自我診斷。
關鍵詞:AR/VR;疾病知識庫;疾病診斷;虛擬人體解剖
中圖分類號:TP311? ? ? ? 文獻標識碼:A? ? ? ? 文章編號:1009-3044(2018)36-0049-03
1 概述
AR技術最早于1990年提出。隨著芯片計算能力的大幅提高,AR技術被應用在多個領域。現代醫療教育在大數據、互聯網+的助力下有了明顯的進步,但仍然不滿足現代社會的需求。為此,本文提出開發一款基于AR技術的虛擬人體解剖系統。結合醫學知識庫的信息匹配技術,實現疾病模型對比,疾病查詢等功能。虛擬人體解剖系統的開發與實現,緩解了現代醫療教育對人體解剖學相關知識的需求。
2 系統設計
2.1 總體設計
虛擬人體解剖系統采用3Dmax建立骨骼模型,通過Unity3D融合,建立了完整清晰的模型,此模型將用于AR/VR和疾病查詢診斷功能。當啟用疾病查詢診斷時,通過疾病知識庫的過濾,返回用戶相關疾病的致病原因和治療方法等信息。虛擬人體解剖系統功能實現如圖1所示。
2.2 功能模塊
2.2.1 AR/VR體驗模塊
1)? AR
AR(Augmented Reality)即增強現實技術,可以實現虛擬世界與真實世界的即時互動,具有實時交互性,用戶能夠在移動端觀察人體骨骼的構造。
2)? VR
此模塊用于實現用戶界面與虛擬現實世界的連接,采用Unity 3D游戲引擎技術。Unity 3D目前是最著名的虛擬現實系統開發工具之一。該模塊根據患者不同部位的識別以及醫療器械數據進行分析,通過VR眼鏡虛擬呈現。
2.2.2 疾病診斷模塊
此模塊適用于患者的自我診斷和科普教育。用戶在搜索框中輸入疾病的相關信息或人體組織器官名稱,點擊“搜索”后APP會調用疾病知識庫里的匹配信息,返回相關疾病的癥狀、病因、療法以及3D模型。還可對3D模型進行移動、縮放、點擊出剖面圖等操作。為確保內容的準確性,系統增加了報錯功能,當用戶對APP信息有異議,可填寫反饋信息,系統維護人員會咨詢領域專家酌情修改。
1) 人體模型對比
此模塊將正常的人體組織器官三維模型與病變模型對比,讓用戶更直觀地感受到病變部位與正常組織器官的區別,對用戶了解病變過程和治療過程有極大的幫助。
2) 人體部位對應疾病
打開人體組織器官3D模型,對模型上的特定部位進行點擊操作,會顯示出該部位易發生的疾病列表;當用戶再次點擊列表上的疾病時,會得到該疾病的癥狀、病因、療法以及3D模型。點擊返回主菜單按鈕退回到首頁。
3 系統實現
3.1 3D建模
在 3Dmax 中按照真實采集人體骨骼的比例,對模型進行調整,統一軸心與質心位置,制作出三維結構與真實模型一致的精細模型,如圖2所示。
為了保證人體骨骼以及相關骨塊的高度真實感,在 3D模型結構仿真的同時,還要對模型的材質進行渲染。材質是指物體的材料、質感,即物體本身的材料屬性與紋理。在Unity3D中采用標準Shader功能布局,首先設置Shader標準著色器,其次需要根據這個材質球(Materials)要渲染的骨骼的特性(不透明物體,透明物體)設置不同的渲染模式。最后利用Shader主要貼圖設置這個區域的貼圖和設置項控制模型最終的渲染效果,而Shader的次要貼圖,用于給模型增加細節。設置完主貼圖,再設置次要貼圖能增加人體骨骼及骨塊的精致度。建模過程如圖3。
3.2 AR/VR體驗實現
3.2.1 AR實現
利用Unity3D開發引擎及高通AR插件制作出一個三維可視化的人體模型,并發布到Android系統的手機上進行運行測試。基于高通SDK的良好封裝和Unity3D引擎強大的功能支持,最終生成可執行的APK文件。
首先在Unity中創建一個Android工程,并且將剛剛Unity打包的工程作為model導入Android工程中去,關鍵代碼如下:
using? UnityEngine;
Using? System.Collections;
Public class chanCtrl : Bones {? //聲明人體骨骼模型類
Private Bones _bones;
Private BonesStateInfo _currentStateInfo;
Private BonesStateInfo_preStateInfo;
sourceSets? ?{
main? {
jniLibs.srcDirs =[ ‘libs ] //配置軟件開發工具包SDK
}
}
運行效果如圖4所示。
3.2.2VR實現
此功能使用的是Valve公司發布的SteamVR插件,并將該插件導入到Unity3D游戲開發引擎中,再經過腳本命令的編寫,完善其精細程度,將其導出為APK文件安裝至手機,即可實現三維人骨模型的虛擬增強。
部分代碼如下:
using UnityEngine;
using Valve.VR;? //系統調用VR插件
Public class UpdateEyeAnchors: Monobehaviour{? //聲明人眼動作行為的類
GameObject[] eyes = new GameObject[2];
String[ ] eyeAnchorNames ={ “LeftEyeAnchor”, “RightEyeAnchor” }
//初始化左右眼睛
Eyes[ i ].transform.localPosition=InputTracking.GetLocalPosition((VRNode)i);
Eyes[ i ].transform.localRotation=InputTracking.GetLocalRotation((VRNode)i);
// 設置人體左右眼睛的位置
3.3 自我查詢
該功能以3D建模與疾病知識庫為基礎,實現骨頭對照和疾病查詢的模塊功能,以下對三個模塊詳細介紹。
3.3.1 疾病知識庫
該疾病知識庫利用“國家人口與健康科學數據共享平臺”中數據,構建了2459種疾病知識庫。通過正則表達式與自然語言處理結合進行數據相關檢索,自動返回相關疾病列表及詳細信息,其中包括疾病名稱、所屬科室、常見癥狀、常見病因和治療藥物等,用戶根據系統返回信息進行自我診斷。疾病知識庫如圖5所示。
3.3.2 骨骼對照
計算機視覺庫的相關算法是實現骨骼對照的關鍵,首先將骨骼模型截取為上下兩個部分,然后比較兩個部分截面圖的RGB值,將兩幅截面圖的矩陣相減生成結果圖,即可看出兩塊骨骼不同的部位,實現壞死或損傷骨頭部位的分辨,關鍵代碼如下:
IplImage *pSrc = cvLoadImage("bones.jpg", 1);
CvSize size = cvSize(500, 400); //圖形大小
cvSetImageROI(pSrc, cvRect(0, 0, size.width, size.height)); //設置源圖像ROI
……
cvResetImageROI(pDest1); //源圖像用完后,清空ROI
cvSaveImage("bones_1.jpg", pDest1); //保存目標圖像
……
cvResetImageROI(pDest2); //源圖像用完后,清空ROI
cvSaveImage("bones_2.jpg", pDest2); //保存目標圖像
……
cvNamedWindow("Compare_twobones", 1);
cvShowImage("Compare_twobones", dst);
骨頭信息模塊重點處理模型的觸控點及知識庫匹配問題。通過選中模型某一個部分作為觸發對象,給該部分綁定BoxCollider組件,接收到鼠標或手指點擊事件,添加過程為選中模塊Component-Physics-zhBoxCollider,增加碰撞組件,與知識庫建立聯系。在骨頭中點擊不同區域時有不同表現,就需要對圖片設置熱點,完善相關骨塊的信息解釋及致病原因。
3.3.3 疾病查詢
疾病的快速查詢是疾病知識庫與輸入框內的內容的快速匹配,需要將疾病知識庫載入Android SQLlite數據庫,引用ListView類包含解決與ScrollView的嵌套沖突,使用OnTouchEvent()事件響應,實現疾病與知識庫疾病編碼相匹配,關鍵代碼如下:
public class Search_Listview extends ListView { //建立ListView類
……
public Search_Listview(Context context, AttributeSetattrs, int defStyle) {
super(context, attrs, defStyle);
}// 通過復寫其onMeasure方法,達到對ScrollView適配的效果
……
et_search.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {? ?// 點擊搜索按鍵后,根據輸入的搜索疾病進行查詢
4 結論
虛擬人體解剖系統是基于AR/VR技術為基礎,在移動平臺下開發的一款集輔助教學和疾病診斷為一體的App。其界面清晰簡潔,功能豐富健全,獲得了用戶的一致好評。在安卓市場累計下載量超過2萬次。該項目于2017年入選教育部“國創計劃十周年”慶典暨第十屆全國大學生創新創業年會參展項目,獲得大學生計算機設計大賽全國總決賽二等獎,安徽省雙百科普大賽一等獎,安徽省“互聯網+”大學生創新創業大賽、“挑戰杯”大學生課外科技作品競賽等多個省級以上獎項十余個。
系統仍有許多可以改進之處。如疾病查詢的疾病知識庫未完善; 目前系統只能顯示3D人體骨骼模型和部分骨頭模型; 只有人體重要部位進行了觸點設置和致病原因; 用戶體驗方面還有極大的提升空間,后期將進一步完善,讓更多的用戶受益。
參考文獻:
[1] 王松濤,陶晶,崔衛剛,等.數字人解剖系統在解剖學實驗教學中的應用初探[J].中國高等醫學教育,2018(2):84-85.
[2] 張慶金,陳金緒,李桂成,等.數字人解剖系統在人體解剖學實驗教學中的應用體會[J].右江民族醫學院學報,2015,37(4):649,658.
[3] 翟菊葉,楊樞,陳春燕,等.面向移動學習的人體解剖系統的設計與實現[J].中華醫學圖書情報雜志,2014,23(12):73-76.
[4] 羅嘉倫,廖丙修,饒勇星. 虛擬三維人體解剖學展示系統的設計[J]. 中國組織工程研究與臨床康復. 2011(26).
[5] 李小龍. 基于Kinect手勢識別的虛擬人體解剖教學系統的設計與實現[D].北京:北京工業大學,2014.
[通聯編輯:唐一東]