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