android毕业设计——基于Android+VR+SITA的青光眼视野检测系统设计与实现(毕业论文+程序源码)——青光眼视野检测系统

基于Android+VR+SITA的青光眼视野检测系统设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于Android+VR+SITA的青光眼视野检测系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

1、项目简介

  1. 青光眼的危害极大,如果不及时处理,可能造成不可逆转的视野损失,视野检测在青光眼的诊断中不可或缺,但检测设备难以获取,为此开发了一款便携式的快速检测系统。只需要将本系统安装到Android设备上,配带VR眼镜,通过姿态传感器与检测程序进行交互,就能实现用户自主进行视野范围的检测,并将结果处理成图片分享给他人,还能将检测结果存放于数据库中,方便随时进行查询。本程序分别以24-2,10-2作为青光眼前后期的检测范围,对SITA快速程序策略加以实现和改进,将其移植到Android设备上。快速检测程序的开发使得够患者即使在不去医院的情况下也能进行视野检查,便能够及早发现并及时治疗,挽救患者视力,极大的提高了青光眼检测的高效性、便捷性。


2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:12611个字28页
包含内容:全套源码+配整论文
开题报告、论文答辩、课题报告等ppt模板推荐下载方式:
在这里插入图片描述


3、关键词

青光眼;图像处理;VR;传感器

4、毕设简介

提示:以下为毕业论文的简略介绍,项目完整源码及完整毕业论文下载地址见文末。

1绪论
1.1 系统概述
1.1.1 研究背景
青光眼的危害极大,据估计全世界该患病者超过六千五百万人,而且还在持续增加,很多青光眼患者在患病初期并没有明显症状,甚至其中一半的人对他们所患的疾病毫无意识,有些人可能只是感觉到眼睛发胀甚至头痛,然而青光眼一直发展下去,很容易造成不可逆转的视力下降,严重的会引起失明,因此青光眼的早期诊断成为保存视力非常重要的一环。

视野检测是现如今诊断和处理青光眼的基本手段,定期进行视野检测有助于发现和追踪病情的进展,以便医生定出最好的治疗方案,视盘图像分析或者视神经纤维缺损分析虽然也非常重要,但他们都不能代替视野检测在青光眼诊断和追踪中的作用[1]。但是由于现如今的检测机器价格普遍比较昂贵,并非普通民众所能承担的起的,故只能在有条件的医院才能进行视野检测。

1.1.2 研究意义

基于以上两点,虽然青光眼危害性大,但如果能够开发一款便携式的快速检测设备,能够使患者即使在不去医院的情况下也能进行视野检查,便能够及早发现并及时治疗,挽救患者视力。于是开发了一款使用Android手机与VR眼镜结合检测的快速视野检测系统。一方面VR眼镜排除了外界因素的干扰,另一方面将检测程序嵌入到手机当中也方便携带,且无需增加额外的花费,即使在没有条件的偏远地区也能进行视野检测[2]。

1.1.3 研究现状
随着VR技术的发展,相关硬件再性能上已经能够更快更精确计算更复杂的模型。VR设备的成本也大大降低,20世纪90年代的V8头盔价格约为10万元,20世纪初期的xSight工业级头盔价格40余万[3],如今的VR眼镜,价格在几百到上千元不等,小米的智能VR一体机价格在2000元左右。相关软件和技术也已经走向成熟稳定,且广泛应用于游戏、影视等领域[4~5]。

随着计算机自动视野计算的不断发展,视野检测程序和策略也在不断更新。从最早的全阈值策略到瑞典交互式阈值算法(SITA)策略,不断为临床诊疗提供更为快捷和有效的检测方法[6~7]。SITA标准程序可用Humphrey全阈值策略的一半时间来完成一次30-2检测,而不会出现重复性或视野丢失敏感度下降。SITA快速程序只用FastPac一半的时间,却能提供相同的结果[8]。

1.1.4 研究内容
本文基于青光眼的检测问题,在VR技术和计算机自动视野计算发展的推动下[9~10],提出了一种基于VR技术的青光眼视野检测系统。本文的主要研究内容如下:
(1) 研究青光眼检测的流程,实现青光眼检测算法。
(2) 研究检测过程中传感器回收的时机和有效响应时间的判定。
(3) 研究检测过程中图像位置和矩阵越界问题。
(4) 研究青光眼检测结果灰度图和概率偏差图的绘制和存储问题。
(5) 研究系统的工作流程和Android开发。

1.2 系统可行性研究
1.2.1 技术可行性
Google VR SDK有着良好的解决方案,我们只需要将其引入无需主动调用,便可实现VR效果,解决了VR框架搭建的问题。
Unity 有着直观的用户可视界面和工具,能够快速启动工作原型,并规避在低级编程上花费的时间,比如画图,使得模型的建立更为简单,我们仅需要处理逻辑即可。
FastAPI 以其轻量的特性,可以快速搭建一个服务器,我们需要做的就是接收与处理请求,无需把大量的时间花费在搭建服务器上。
SQLite 也以其轻量的特性,可以快速建立数据库连接,我们只需实现我们所要的增删改查操作。
对于开发所用的Java,Python,C#,Shell,都是已经相对成熟的语言,且熟于使用,可为开发提供有力的支撑。

1.2.2 经济可行性
系统开发所使用的工具IDEA、Unity、SQLite、JDK和开发框架FastAPI均为免费版且易于下载获取,第三方库Google VR SDK、Android API、canvas和所涉及的开发语言Java,Python,C#,Shell都是开源免费的,且系统部署在手机上,无需购买专用设备,且减轻了工作量,节省了大量开发成本。因此,系统的开发在经济方面是可行的。

2系统总体描述
本章讲述了系统实现所使用到的相关技术,为系统的实现提供了有效保障,紧接着结合需求分析对系统进行了简单介绍,最后对开发系统的相关环境进行限制,最大程度的减小了因环境问题造成系统的异常情况。
2.1 关键技术
系统的不同模块使用了不同的技术,客户端使用了Java,JDK版本为1.8,由于直接使用真机调试,Android API版本为30,使用了 canvas 进行结果的复现,使用了 base64 对传输内容进行了加密,使用了 加速度传感器与地磁传感器 监听人体的点头,检测算法使用了C#,版本8.8.3,使用了反畸变处理图像,服务端使用了Python,版本为Python3.9,使用了FastAPI框架搭建服务器,SQLite 作为数据库。
2.1.1 开发语言
Java:面向对象设计语言;C#:面向对象设计语言;Python:面向对象设计语言
2.1.2 开源库
(1) Android API:开源,免费的代码库,由于其开放性的原因,很多厂商对Android加以改造,出现了三星,小米等独具特色的Android系统。
(2) canvas:canvas类暴露了很多绘图方法,比如drawText可以绘制文字,drawPoint可以绘制点等等,canvas绘图有三个基本要素:画布,坐标,画笔,我们通过canvas的各种绘制方法将图形绘制到画布上,传入的坐标决定了我们绘制的形状,而画笔决定了绘制的样式,比如颜色,线条宽度等。
(3) base64:base64其实是一个编码再解码的过程,是将每三个字节转化成二进制然后再转为四个字符。
2.1.3 加速度传感器与地磁传感器
角度变化使用方向传感器即可满足要求,但由于方向传感器在高版本的Android API中已经过时,故使用加速度传感器与地磁传感器作为替代的解决方案,要获取坐标中x,y,z的值,坐标系如图2-1所示,就要使用getOrientation,而getOrientation需要获取一个旋转矩阵,这时就要用到加速度传感器与地磁传感器提供数据源。
在这里插入图片描述

图2-1设备坐标系
2.1.4 反畸变
由于VR镜头中心与边缘处放大系数不同的原因,会使图像产生畸变,这时我们就需要对图片做反畸变,达到抵消畸变的目的,Carboard中将图形畸变封装成了两个类,一个是Distortion,用于计算畸变因子和做畸变与反畸变,一个是DistortionRenderer,用于做图形的渲染。
2.1.5 FastAPI和SQLite
(1) FastAPI:一个用于快速构建服务端的web框架。
(2) SQLite:一个无需配置的轻量数据库,支持SQL92标准的大多数查询功能,适配UNIX,Windows常用平台。

2.2 系统简介
本系统通过与用户进行交互,不断计算用户眼睛各处的视野状况,完成视野范围的检测,并将检测结果转换为图像显示在界面上,同时还能将检测结果存放于远端数据库之中,方便跨设备查看,也可生成报告分享给他人。

2.3 功能性需求
本系统的功能大致分为以下几块:
(1) 视野检测:通过选择对应的检测程序以及眼睛进行视野检测。
(2) 登陆:输入账号密码进行登陆。
(3) 注册:创建一个账号供保存个人信息
(4) 匿名检测:不输入账号密码匿名检测。
(5) 修改密码:修改登陆账号所使用的密码。
(6) 查看结果:查看检测的结果。
(7) 分享:将检测的结果分享给他人。
(8) 数据可视化:将检测的结果以图像的方式展示在界面上。
(9) 数据同步:保持客户端与服务端数据的一致性。
(10) 生成检测报告:将检测结果合并。
(11) 控制器:控制检测的正常进行。
(12) 数据库操作:对数据库进行相应的操作,比如创建表以及增删改查。

2.4 非功能性需求
为了能给用户更好的体验,一些非功能能性需求也是必要的:
(1) 性能需求:页面跳转时间<3s,由于需要对数据库进行全表查询求得检测着的检测结果在所有人中所占的比例,故随着数据库中表的增大,搜索 返回结果的时间也会越来越长。
(2) 安全性:传输数据皆使用base64加密,用户只有权修改数据库中属于自己的数据,如用户密码等,无权修改其他人的数据。
(3) 可维护性:每个功能都单独拆分成模块,且使用日志,遵从代码开发规范,易于拓展和维护。
(4) 易用性:app中给予和许多提示性的文字用于帮助用户尽快适应。

2.5 设计约束
(1) 需要运行在 Android 4.4 ‘KitKat’ 或者更高版本的安卓设备上[11]。
(2) 需要LTS release 2018.4 或者更高版本的 Unity。
(3) 需要在Unity 上安装支持安卓构建的组件(Android Bulid Support(*))。
(4) 需要在Unity 中的用户配置(Player Setting)下的XR Setting中设置支持VR,即Virtual Reality Support=true。
(5) 需要JDK>1.8。
(6) 需要Python>3。

2.6 本章小结
本章阐述了系统开发所用的关键技术,对系统进行了简单介绍。接着介绍了系统的功能性需求,从性能、安全性、可维护性和易用性四个方面描述了系统的非功能性需求,最后介绍了系统开发所需的约束条件。

3系统设计
本章主要讲述系统的总体设计,从模块、流程、用例三个方面讲述了系统是如何进行运作的,为系统的实现建立了坚实的基础,同时规定了系统中所使用到的接口,是系统的开发更为简洁,并对使用到的数据库进行了详细设计,降低了数据管理的难度和成本。
3.1 总体设计
3.1.1 模块设计
该检测程序通过不断在设备屏幕的不同位置上显示视标,受检测者则使用控制器对是否可见视标做出响应,从而得出一系列检测结果,并将结果转换成图像以展示给用户,从功能上划分,主要分为三大部分,如图3-1,用于展示界面的视图模块,用于图像处理以,数据处理,以及与服务其之间通信的业务逻辑模块,用于与客户端通信以及操作数据库进行增删改查的数据模块。
在这里插入图片描述

图3-1系统模块
每次展示结果之前,视图层都会向业务逻辑层请求更新数据,以确保数据结果是最新的。此时业务逻辑层会向服务器提出查询请求,如果可以从服务端拿到数据,则视图层会根据这个结果重新生成结果图,如果没有拿到数据,则视图层会展示无数据的提示。
每当完成一次检测时,如果是使用id密码进行登陆,则业务逻辑层会向服务器提出插入请求,服务端会首先判断用户存不存在,如果存在,则进行刷新操作,如果不存在,则进行插入操作,如果是匿名检测,则结果只会保存到程序退出之前。
当进行登陆操作时,业务逻辑层会向服务器发送查询请求进行验证,此时服务器会对发送过来的用户id和密码进行匹配,客户端根据服务器端的返回值来控制是否允许用户进行登陆。
当进行注册时,业务逻辑层会向服务器发送注册请求进行注册,此时服务器端会查询数据库中有没有相同的id,如果存在,则返回false,提示用户已存在,如果不存在,则返回true,跳转页面。

3.1.2 流程设计
流程如图3-2,打开app后可以选择是否登陆,无论是否登陆都会跳转到主界面,登陆与否的区别只是检测结果的有效时长,进入到主界面后可以查看结果,也可进行视野范围检测,检测完成后可再次进行检测或者查看结果,查看结果的同时页能将结果分享给他人。
在这里插入图片描述

图3-2 使用流程
3.1.3 用例设计
由于开发范围只设计客户端,故只对用户进行设计,用户可以进行视野检测,在检测的过程中,如果出现不适症状,还可进行暂停,待症状缓解后再行手动恢复,可查看检测结果,并将检测结果分享给他人,可进行登陆,登陆后可修改密码,也可进行注册,用例图如3-3所示。
在这里插入图片描述

图3-3 用例图
3.2 接口设计
(1) onKeyDown:用于处理控制器与检测程序之间的通信。
(2) onClick:用于处理各种点击事件。
(3) onCreate:用于初始化view。
(4) ifExistAir:用于检测控制器是否连接。
(5) DrawGrayIMage:用于控制生成灰度图。
(6) DrawRatioImage:用于生成概率偏差图。
(7) HttpService:用于向服务端发送各种请求,并接收返回结果,比如:注册、校验、查询等。
(8) onPress:用于分享生成的报告。
(9) onActivityCreate:用于初始化view。
(10) onResume: 用户刷新view。
(11) Start:用于初始化数据。
(12) Update:用于更新数据。
(13) SightingPostLocationDeal:用于加载检测场景响应交互。
(14) ThresholdCalculate:用于控制检测程序进行结果的计算。
(15) Service:用于接收客户端的各种请求并加以响应,比如注册,校验,查询等。
(16) TableTools: 用于操作数据库中表,比如增删改查。

3.3 数据库设计
本检测系统采用了SQLite数据库,SQLite不依赖第三方软件,无需安装,他所有的数据库信息都存储在一个文件内,SQLite无需配置复杂的连接驱动,连接数据库只需要sqlite3.connect(“数据库地址”),就像是打开了一个文件。SQLite 支持常规sql语句,只需要sqlite3.connect(“数据库地址”).execute(“sql语句”),就能实现对表的增删改查。
为了保持数据的持久性,使用户登陆之后就能查询到自己之前最近一次的检测记录,故使用了early_date,late_date两张表来分别保存用户选择不同检测程序后的检测数据。
为了保证数据的唯一性,故又采用id与eye作为联合主键的方式来保证每个人的每只眼睛都是唯一存在的,early_date中的字段包括id、eye、sightingLoseRatio(固视丢失率)、falseNegativeRatio(假阴性率)、falsePositiveRatio(假阳性率),location1-72(72个位点的视野阈值情况),late_date中的只是将描述视野阈值情况的位点增加到了100个,其余字段与early_date相同。
为了数据的准确性,确保每个人获得的测试数据都是自己的,故使用了一个user表来进行id与passWord的校验,id作为唯一主键,user中的字段包括id,passWord。每个id在user表中对应一条数据,在两张data表中分别对应两条数据。

3.4 本章小结
本章阐述了从功能上阐述了系统的主要构成部分,以及个模块之间是如何进行通信的,实现了模块与模块之间数据流的打通,并对系统中主要用到的接口和采用数据库的目的进行了阐述。

4系统实现与测试
本章通过讲述模块工作流程的方式对系统各个模块具体实现进行详细阐述,并配以图标加以说明,之后讲述了开发中所遇到的较为突出的问题以及解决方案,增强了系统实现的可信度。
4.1 视图模块
4.1.1 功能描述
该模块主要用于视图展示,将业务逻辑层处理好的结果显示在手机屏幕上,在用户使用的过程中,给予相关提示性文字描述,辅助用户进行测试,以及展示检测过程中所用到的相关组件。
4.1.2 关键流程
打开检测程序首先会跳转到登陆界面。再登陆界面中首先会出跳出弹窗,如图4-1,弹窗的实现使用了Android提供的AlertDialog,这里并没有直接使用Android自带的样式,其实setMessage同样可以简单设置文字描述,但是如果需要更复杂的样式,比如设置字体的颜色setMessage就解决不了,而且AlertDialog也没有提供其他设置字体的方法,这时我们就需要是自定义一个view,这个view就是在XML文件中设置的样式,对于XML文件而言,我们可以根据需求设置各种样式,然后使用setView去加载这个view,这样就可以对弹窗进行定制开发,就能显示出我们想要的效果。
在这里插入图片描述

图4-1 提示弹窗
点击屏幕任意位置后会开始进行新手引导,在登陆界面的新手引导中包含了对此页面上主要组件的解释,如图4-2,引导层的实现使用了开源框架GuideView,与弹窗的用法相似,同样是自定义一个view,不同的是,这里可以定义多个不同的view,然后指定他们显示的顺序,这样就能在你点击遮罩层后跳出下一个遮罩层,达到新手指引的目的。引导完成后显示登陆页面,如图4-3。

在这里插入图片描述

当在编辑框中填写好用户名和密码点击登陆按钮时,会对编辑框中输入的id进行校验,如果校验不通过,则会显示相应提示,如图4-4,id校验的实现使用了正则表达式进行匹配,只有当输入的id属于身份证号、电话号、邮箱中的一种时,才能匹配通过。
在这里插入图片描述

图4-4 警告弹窗
通过校验后,会跳转到主界面。同样在进行完新手引导后显示主页面,当选中主界面底部的导航栏时,会根据选中的tab进入到不同的Fragment中,当点击导航栏中的主页时,会跳转到选择检测程序界面,屏幕中会显示检测程序选择页面,如图4-5。
在这里插入图片描述

图4-5 选择程序界面
此时可在本页面上选择相应的检测程序与检测眼睛,点击开始检测按钮后,会提示佩戴VR眼镜开始进行检测,如图4-6。、
在这里插入图片描述

图4-6 提示弹窗
为了使用户能够有足够的时间佩戴好设备,这里使线程休眠了10秒,10秒钟后,会跳转检测界面并开启VR模式,此时屏幕上会显示检测界面。当用户确认开始检测后,会加载组件开始检测。在此期间屏幕上会随机出现不同亮度的视标,检测着只需在视标出现时完成对其响应,便可得到受检者的视野状况,检测完成后会重新返回到主界面,如图4-7。
在这里插入图片描述

图4-7 检测界面
当点击导航栏中的结果时,会跳转到结果界面,此时屏幕上会显示检测结果,如图4-8,每次重新进入到结果界面中时,都会调用onResume,用于保持结果最新,Fragment的切换使用了FragmentTransaction,当需要从一个Fragment切换到另一个Fragment时,调用FragmentTransaction中的hide将之隐藏,同时调用show将要跳转到的Fragment显示,如果需要显示的Fragment不存在,则调用add进行显示。

在这里插入图片描述

当点击结果界面中的分享按钮时,会根据选择的app(如图4-9)跳转到其当前的Activity中,并将结果报告发送出去,分享的实现使用了Android中Intent,只需要隐式指定其Action为ACTION_SEND,因为我们并不清楚他要发送到哪个Activity,然后设置需要发送的内容和类型,之后当点击分享时,系统就会打开分享选择器。
4.2 业务逻辑模块
4.2.1 功能描述
该模块主要用与响应视图模块的请求,以及向数据模块发送并接收数据模块返回的数据,同时还能控制检测的进行,主要包括视标位置,检测进度,检测结果的计算,程序的速度,以及图形的绘制。
4.2.2 关键流程
打开检测程序,当填写完用户id和密码后点击登陆按钮时,如果id合规,则会将用户id和密码包装成json数据,然后会向服务器发送一条校验请求,同样从服务器返回过来的内容也是经过加密的json数据,经过解密后如果得到的值是true,如图4-10,则校验通过,跳转到主界面,如果得到的值是false,如图4-11,则校验不通过,直接return,如果id不合规,则直接return。
在这里插入图片描述

图4-10 校验通过
在这里插入图片描述

图4-11 校验不通过
也可先进行注册,此时会将用户id和密码包装成json数据,向服务器发送一条注册请求,如果服务器返回success,如图4-12,则注册成功,跳转到主界面,如果服务器返回fail,如图4-13,则注册失败,直接return。
在这里插入图片描述

图4-12 注册成功
在这里插入图片描述

图4-13 注册失败
当每次选择结果界面后,会首先携带用户id,以及选择的eye,program向服务器发送一条查询请求,如果获取到的数据不为空,如图4-14,则更新全局变量中的值,并加载结果图,如果获取到的数据为空,如图4-15,则提示无数据,更新的实现依靠这一个全局变量GlobalVal,所有共享的资源都被存储在这个GlobalVal对象中,每当有值需要进行更新时,都会调用这个全局变量中对应的set方法去更新GlobalVal对象中的值。
在这里插入图片描述

图4-14 获取到数据
在这里插入图片描述

图4-15 获取不到数据
当点击分享按钮时,首先会调用合并方法,将所有的结果重新写入一张图片中,如果写入时发现对应的结果不存在,则写入数据缺失,之后在以Intent的方式携带合并后的结果图进入到其他app的Activity,合并的实现是先通过BitmapFactory中的decodeFile将图片读取为Bitmap,Bitmap中包含了图像的各种信息,如长,宽等,再这里做了如下规定,如果获取不到任意一张结果图,则新图片的大小被赋予一个默认值,如果能够获取到任意一张结果图,那么新图片的大小4倍结果图的大小,为了保证规则成立,在结果图生成时,就限制了每张结果图的大小是一致的。
当进入到检测界面开始检测之前,会先调用传感器来监听检测着是否确认开始检测,那么如何根据传感器去获取设备的方向呢,首先我们需要做出一个参考系来,如果手机水平放置在平面上,那么他的加速度方向就是竖直向下的,而加速度传感器可以获取到这个向量,不考虑环境的影响,磁场的方向就是水平朝南北的,而地磁传感器可以获取到这个向量,这样我们就有了一个二维向量,再对这两个向量做差乘,就能得到一个水平东西方向的向量,至此,就能获得一个三维向量作为参考来计算设备的方向。

如果确认检测开始,则向Unity发送消息开始检测,每次操作控制器或者每隔两秒的时间都会进行一次检测结果计算,都会调用都一次结果计算,但这有极大的概率两个方式会产生冲突,解决的办法就是加上锁,当调用一次完成后,所才会被释放,下一次计算才会执行。为了保证不会发生冲突,只有当没有计算正在进行时,才会执行结果计算,否则调用的检测结果计算都将视为无效,流程如图4-16,检测结束后,将检测结果返回给Android,重新跳转回主界面,传感器的实现调用了Android硬件传感器中的加速度传感器Sensor.TYPE_ACCELEROMETER与地磁传感器Sensor.TYPE_MAGNETIC_FIELD实现获取Android设备x,y,z轴的偏转角度[12]。
在这里插入图片描述

图4-16 检测流程图
青光眼前后期检测算法的逻辑大体上相同,视标的位置由一个二维数组记录,同时以二维数组的大小建立两个随机数,使检测期间视标会在规定的范围内随机出现,位置的状态也是由一个一维数组记录着,那么为了使记录状态的一维数组与记录位置的二维数组能够对应,他们之前应存在这样一个关系,b=ax+y,其中b代表一维数组中的位置,a代表二维数组中的一维长度,x,y代表二维数组中的位置,当同一个位置被检测过两次以上后,则此位置视标不会再次出现,视野阈值同样由一维数组记录,与位置数组的对应关系同上,将阈值数组取出来的值作为分母,从而达到视标的亮度会随着视野阈值的降低而增加的目的。

从视标在某一位置出现开始到在另一位置上出现记为一次检测,在检测的过程中,视标的显示时间只有短短的0.2秒,如果仅在这0.2秒内同时完成发现,响应这两个动作是极为不合理的,所以在视标消失的空隙时间里,应有一部分时间被视为是有效的响应时间。

在这次检测过程中,如果之前进行了对视标的响应,而本次没有响应,则假阴性次数加一,如果在视标消失的过程中进行了对视标的响应,则假阳性次数加一,如果对非有效位置上显示的视标进行响应,则固视丢失次数加一,如果对有效位置的视标进行了响应,且视标是处于显示状态,则此位置上的检测次数加一,如果没有对有效位置的视标进行响应,且视标处于显示状态,则不仅此位置上的视野阈值会降低,与其相邻的周围八个位置(如果存在)的视野阈值也会降低,流程如图4-17。
在这里插入图片描述

图4-17 计算流程图
为了加快检测进度,在视标所处位置的视野阈值下降时,与其相邻的位置视野阈值也跟着下降,但如何确定有多少个位置与之相邻成为一个问题,例如中心点相邻的位置有八个,而边缘处相邻的位置小于八个,如果要分情况讨论,那么结果将是巨大的,为了解决这个问题,使用了八次try-catch操作,当发生越界时,捕获这个异常不进行任何操作,继续向下执行。不同的是视标的大小,检测位置以及检测的次数,前期的测试范围大致是后期的3倍,如图4-18,4-19。
在这里插入图片描述

图像处理使用了canvas进行结果的绘制,灰度图的绘制范围是根据对应检测程序中视野的有效范围来进行绘制的,有效范围也是由一个一维数组进行记录的,如果进行绘制的位置在有效范围内,则使用drawRect绘制方块,如果不再,则跳过绘制,移动canvas的位置,绘制下一个方块,依据检测结果中阈值的大小为每个方块设置不同的颜色,每当一个方块绘制完成后,由于canvas的特性,之前绘制的结果不会消失,最终绘制成灰度图,如图4-20,4-21。

在这里插入图片描述

概率偏差图是根据自己的检测结果在数据库中的占比计算后得到的结果,绘制的方法大致与灰度图相同,绘制流程如图4-22。
在这里插入图片描述

图 4-22绘制流程图
不过概率偏差图使用的点的密集程度来表示结果值的大小,关于点状方块的绘制,其实是使用了drawPoints,drawPoints中需要传入一个一维数组,数组中每两个值代表一个位置,这时我们只需确定需要绘制点的位置,然后使用一个双层循环创建一个一维数组,每一次内循环,即代表写入了一列点,只需要控制循环中的步长,便可控制绘制点的密集程度,然后在重复灰度图的绘制操作,最终绘制成概率偏差图,如图4-23,4-24。

在这里插入图片描述

4.3 数据模块
4.3.1 功能描述
该模块主要用于处理客户端发送过来的请求,根据不同的请求生成并执行对应的sql,根据操作返回结果和请求类型判断是否进行下一步处理,处理完成后会将结果包装成json并返回。

4.3.2 关键流程
当接收到客户端发送来的插入请求时,首先调用TableTools中的插入方法向对应data表中插入数据,如果插入失败则进行更新操作调用TableTools中的更新方法,插入成功则返回True否则返回false。
当接收到客户端发送来的校验请求时,首先调用TableTools中的校验方法,向user表中查询请求过来的值与表中的值是否一致,如果id不存在,则返回false,如果id存在,passWord不一致,则返回false,如果一致,则返回true。
当接受到客户端发送来的注册请求时,首先调用TableTools中的注册方法向user表中插入数据,插入失败则会返回fail,插入成功则返会success。
当接收到客户端发送过来的查询请求时,首先调用TableTools中的查询方法向对应data表中查询数据,然后会以查询的结果中的视野阈值为依据,调用TableTools中的计算比例方法,再次向对应data表中查询每个值占总体的比例,同时根据相似度算法计算个体与总体的相似度,之后将结果返回。

4.4 主要问题及解决方法
由于Unity在VR模式下会主动开器陀螺仪,故眼前的图形不会是固定不动的,这将对检测产生很大的影响,为了解决这个问题,将Unity所有的组件都绑定到了Camera上,这样,不管检测者怎样移动,图像始终是在眼前,但是随着测试者移动,组件的坐标确是在不断发生变化的,假如还是以固定的坐标作为视标的出现的位置,那么当测试者移动后,将看不到视标,故为了解决这个问题,将视标的位置改为相对于背景的位置,每次显示前,都回去刷新背景的位置。

4.5 测试与验证
4.5.1 测试原则
(1) 该测试的目的是为了找出程序中存在的缺陷。
(2) 不可能测试到每一个角落。
(3) 尽早的开始测试有助于减少开发成本。
(4) 不要只专注于某一点的测试。
(5) 测试用例要经常性的进行更新。
(6) 不能对不同的模块使用相同的测试方法。
(7) 必须严格按照测试流程。
4.5.2 测试目的
系统测试的目的如下:
(1) 为了以最低的成本,找出程序中存在的漏洞和缺陷,衡量系统的兼容性。
(2) 测试系统运行时是否会出现系统崩溃的情况,衡量系统的稳定性。
(3) 测试系统进行青光眼检测的响应时间和数据反馈时间,衡量系统的性能。
(4) 测试系统进行一次青光眼检测的过程,衡量青光眼检测流程设计的合理性,完善程序提升用户体验。
4.5.3 功能测试
(1) 测试对象:基于VR技术的青光眼视野检测系统。
(2) 测试内容:程序是否正常运行,结果是否准确。
(3) 测试方法:单元测试 集成测试。
(4) 测试结果:程序运行正常,结果准确。
(5) 兼容性测试:在华为上运行状况良好。
(6) 测试结论:程序正常运行,结果准确,兼容性良好。

4.6 本章小结
本章节主要包含详细设计和系统测试两大块。详细设计从视图模块、业务逻辑模块、数据模块、开发过程中所遇到的问题及解决方法和系统测试四个方面进行详细阐述。视图模块主要用来进行视图渲染,展示了app的页面设计。业务逻辑模块讲述了检测系统中各模块之间是如何进行运作的,并对开发中主要用到的算法是如何实现的进行了详细介绍。数据模块主要是处理客户端请求,对数据库进行操作。至此完成了系统的详细设计工作。之后介绍了开发过程中所遇到的较为突出的几个问题以及相对应的解决方案。系统测试主要从测试原则、测试目的、测试环境和测试功能四个方面进行介绍。最后对系统的稳定性、兼容性、流程合理性和时间性能进行测试,给出测试结论。

5总结
基于VR的青光眼检测系统以实现用户无需去医院便能进行青光眼的视野检查为核心,以及时发现、及早治疗、挽救患者视力为目标,解决了目前青光眼检测对医疗设备对依赖问题,提高了青光眼的早期发现率,为保护患者视力做出了突出贡献,同时也有助于患者进行病情追踪,为医生提出合理有效的治疗方案提供了保障。便携式青光眼检测系统将会成为未来医学领域青光眼检测的发展趋势,VR技术的发展加快了这一趋势的实现和推进,因此基于VR的青光眼检测系统的开发是应运而生的。本系统的优势和不足之处如下:
系统优势:
(1) 对目前最新的视野检测策略SITA做了移动端的实现。
(2) SITA提高检查速度的原因是参考临近点的反应选择刺激光标的强度,对估计的阈值不断更新[13-15],基于这一点,设计了一个二维数组,每当数组中的某个位置变化时,其周围相邻的位置也跟着同样变化。
(3) 使用canvas实现数据的可视化。
(4) 使用了base64对客户端与服务器端的传输结果进行加密,增加了网络传输中的安全性
(5) 将结果存放于服务器端SQLite数据库中,使之每当更换设备进行登录时,也能获取到最近一次测试的结果。
(6) 使用了余弦相似度算法对数据进行分析,参照数据选用人群的平均值,将自身数据与参照数据当作向量求其余弦值,越接近1则结果越与人群相似,反之则不相似。
(7) 提供分享功能,可将结果分享给他人

参考文献
[1] 袁援生. Humphrey视野检测分析原则[M]. 人民卫生出版社. 2005.
[2] 刘雨辰,秦海旸.预防失明:用手机早期发现青光眼[J].中国高新科技,2019(24):108-111.
[3] 范秀敏.深度沉浸:VR技术的发展[J].互联网经济,2016(11):32-35.
[4] 任远,吴梦蝶,刘光丽,宋国强,王常青.移动医疗研究现状和趋势的文献计量学分析[J].医学信息,2021,34(03):12-15+19.
[5] 余飞,赵晶,陈万里,苏涛永,范理宏.上海三级甲等医院移动医疗应用现状调查[J].中国医院管理,2017,37(02):69-71.
[6] 钟华,钱朝旭.Humphrey视野计最新程序和策略的临床解读[J].中华眼科杂志,2020(01):71-72-73-74-75-76.
[7] 谭永琳,黄润楷,郭俏丽,林绮珊,林岳新.移动医疗app的应用效果及完善研究[J].继续医学教育,2019,33(06):64-66.
[8] 龚滢欣,朱佩文,邵毅.移动互联网医疗在眼科的应用现状及分析[J].转化医学电子杂志,2018,5(05):39-43.
[9] 杨金东.移动医疗app现状与展望[J].医学信息学杂志,2016,37(01):59-61+71.
[10] 刘佩玉,刘倩,张小曼.可用性评估方法在移动医疗app中的应用现状[J].医学信息学杂志,2020,41(11):37-40.
[11] 辛杰. 基于Unity3D的XR装配式开发关键技术研究[D].华中师范大学,2019.
[12] 李津,徐红波.基于Android操作系统的指南针应用的研究与实现[J].中国新通信,2020,22(21):96-98.
[13] 王兰,刘磊,林丁.视野计的原理及发展[J].国外医学.眼科学分册,1999(05):309-314.
[14] Pham Alex T,Ramulu Pradeep Y,Boland Michael V,Yohannan Jithin. The Effect of Transitioning from SITA Standard to SITA Faster on Visual Field Performance.[J]. Ophthalmology,2021.
[15] Anderson Scott,Battiston Adrian,Bong Donna,Carrell Nathan,Damji Karim F. Using the 24-2 Sita Fast Humphrey to Detect Visual Field Defects Noted in Patients with Neurological Lesions Impacting the Visual Field NormallyAssessed by Octopus Visual Field Testing[J]. Journal of Clinical and Experimental Ophthalmology,2021,12(1).

致谢
省略


5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号毕业设计全套资源(点击下载)
本项目源码基于Android+VR+SITA的青光眼视野检测系统设计与实现(源码+文档)_Android_青光眼视野检测系统.zip

6、更多android毕业设计项目

精选android毕业设计10套——源码+论文完整资源

《视力测试》帮助 系统欢迎使用本程序,这是领养医生系列程序中的一个。本软件可进行视力测试 。视力即视锐度(visual acuity),它可分为远,近视力。WHO规定低于0.05为盲。 使用说明 1.设置测试结果的表示方法,国际标准视力表正常视力值为 1.0,对数视力表5分纪录法,正常视力值为5.0 2. 测试距离以标尺上的距离单位为准,输入你的眼睛屏幕之间的距离。 警告:不要太近了,不然屏幕上的“E”会小于显示器所能表示的最小的点然后消失掉,除非你的视力差的可以。 也不要太远了,不然屏幕上的“E”会大于显示器的整个屏幕。如果你只有一个人的话;并且你没有无线键盘的的话,那你就得来回奔跑于测试地点键盘的之间。这会很累的。至于最佳距离是多少?这取决于你的显示器的大小,更取决于您的视力的好坏。所以先定一个距离,开始测试,如果您的视力好到使“E”消失那就走的近一点,反之亦然。 另注:您最好先看一下屏幕上的“E”是否是正方形,若不是的话就把它调成正方形(用显示器下面的调节屏幕高宽的按钮,就是那些标着v.size h.size或同一个意思的图形的按钮或旋钮。 ( 例子:若是14'的显示器用640x480的分辨率,那么屏幕上刻度为40的标尺的实际长度就大约为17cm,所以5米的距离转化为标尺的长度即约为 5*100*40/17=1176 实际上你可以不用尺子而只用一根绳子得到标尺的长度,再用这根绳子量得你屏幕之间的距离就可以了。 3. 点击开始 4. 闭上一直眼睛 5. 以你看到的“E”的缺口方向为准,用键盘上的四个方向键对应“E”的四个缺口方向,按一下对应的方向键。就算你以看不请了那也随便按一下。好了,不断重复步骤“5。”很快你就得到了你的视力值。 6. 换一只眼睛。再测。 天哪!不要告诉我你不知道什么叫视力测试,或没有进行过视力测试!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业设计方案专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值