基于AR/VR技术的虚拟人体解剖系统的设计与实现
2018-03-04张姁汤琪王灿灿汪涛涛李厚鸿
张姁 汤琪 王灿灿 汪涛涛 李厚鸿
摘要:虚拟人体解剖系统是采用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.
[通联编辑:唐一东]