技术领域
[0001] 本发明涉及自动化视力检测技术领域,特别涉及一种快速准确的自动化视力检测方法及系统。
相关背景技术
[0002] 目前,视力检测方法主要包括基于虚拟现实的可穿戴技术、基于验光的光学传感器设备、基于视力表的人工测试以及人机交互测试等。基于虚拟现实的可穿戴技术:这种方法利用虚拟现实技术,通过佩戴头戴式显示设备或眼镜等可穿戴设备,让用户沉浸在虚拟的视景中进行视力测试。这些设备通常配备了内置的屏幕和传感器,可以显示各种视觉刺激并记录用户的反应。尽管这种技术具有较高的沉浸感和交互性,但设备成本较高,且存在接触式检测引起的交叉感染等健康问题。基于验光的光学传感器设备:这种方法利用光学传感器设备,如自动验光仪或自动折射计,测量眼睛的折射和屈光度,并据此评估视力情况。这些设备通常由专业医疗机构使用,具有较高的准确性和可靠性。然而,这些设备通常较昂贵,且需要专业操作员操作。
[0003] 基于视力表的人工测试:这是一种传统的视力测试方法,遵循国家标准GB/T 11533‑2011,采用逐行扫描测试流程。从最大尺寸的视标开始,逐渐缩小尺寸,直至受检用户无法正确识别特定尺寸的大多数视标为止。尽管操作简单,但需要人工交互,增加了人力成本。在规模化的视力测试中,效率较低,且容易因测试人员疲劳而产生错误。基于视力表的人机交互测试:利用语音识别、手势识别等人机交互技术,使受检用户通过语音指令、手势指令与计算机交互完成视力测试。这种非接触式的方法可以实现自助式和自动化测试,降低了人力成本,提高了测试效率和便捷性。但仍采用逐行扫描测试流程,需要在所有的视力级别上进行广泛的测试,因此在检测效率方面仍有提升空间。
[0004] 综上所述,现有技术中存在以下待解决的问题:
[0005] 1、接触式检测的卫生问题:一些现有的视力检测方法采用接触式检测,存在卫生问题,可能导致交叉感染等健康风险,不利于规模化检测的实现。
[0006] 2、高成本和设备依赖问题:一些视力检测方法,如基于虚拟现实的可穿戴技术和基于验光的光学传感器设备,存在高成本和对专门设备的依赖性,实用性和普适性不足,限制了其在居家等多种场景应用和推广普及。
[0007] 3、检测效率仍然不够高:传统的人工交互的视力测试方法,测试过程耗时且需要大量的人力投入,导致效率不高;虽然基于人机交互技术的视力测试相比于传统的人工交互方法,效率有所提升,但仍然采用的是逐行扫描测试流程,因此在检测效率方面仍有提升空间。
[0008] 4、检测准确率的稳定性不足:基于人机交互技术的视力测试在准确率方面受到外界干扰影响较大。例如,语音识别技术容易受到背景噪音、口音以及语速变化等因素的干扰;动态手势识别可能受到手势起点和终点以及目标跟踪过程中的环境干扰影响;传统的基于图像处理的静态手势识别方法可能受到肤色、光照等因素的影响。因此,检测准确率的稳定性需要进一步提升。
具体实施方式
[0056] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
[0057] 实施例1
[0058] 本实施例提供的是一种快速准确的自动化视力检测方法,其流程图参见图1,其中,该方法包括如下步骤:
[0059] S1、启动流程控制模块,流程控制模块向辅助功能模块发送第一指令,激活辅助功能模块,辅助功能模块驱动相应提示装置对受检用户进行提示,并在设定待测视力级别后,进入视力检测循环过程;本实施例中,激活辅助功能模块后,会进入参数输入界面,等待受检用户输入必要参数,如是否近视、在当前视力检测时间之前最近一次的视力检测值以及检测距离等。本实施例中,可以将待测视力级别 设定为4.0。
[0060] S2、流程控制模块向视标显示模块发送第二指令,视标显示模块收到第二指令后,根据所述设定的待测视力级别驱动显示屏显示对应尺寸的视标,对受检用户进行视标刺激;这里,所述视标显示模块收到指令后,根据所述设定的待测视力级别驱动显示屏显示对应尺寸的视标,所述视标的方向在显示过程中是随机生成的,视标的大小根据检测距离进行设置。由于视标显示模块负责控制视标E的显示,确保视标的精准呈现,因此,为了防止用户任何潜在的预先记忆,视标的方向在显示过程中是随机生成的,此外,视标的大小可以根据检测距离灵活调整,从而减少距离对检测环境的限制。
[0061] S3、流程控制模块向手势识别模块发送第三指令,手势识别模块收到第三指令后驱动摄像头进行手势图像采集。
[0062] S4、受检用户收到提示和视标刺激后,作出相应的静态手势。
[0063] S5、手势识别模块调用单个视标的手势识别算法检测受检用户对视标刺激的反应时间并对采集的手势图像进行识别,生成检测和识别结果并发送给流程控制模块。
[0064] S6、流程控制模块收到检测和识别结果后,调用视力阈值确定机制判断是否继续视力检测循环过程,若循环继续,则重复视力检测循环过程,若循环结束,则确定出视力阈值。
[0065] S7、在确定出的视力阈值对应级别的视力水平下,分别进行多次视标检测,确定出视标级别,确定出的视标级别即为该受检用户的实际视力值。
[0066] 实际检测过程中,由于需要受检用户的参与,因此,在启动流程控制模块之前,还需要包括:
[0067] 受检用户的眼睛与显示屏中显示的视标处在同一水平面,并设置受检用户的眼睛与视标之间的水平距离为检测距离;
[0068] 将摄像头放置在正对受检用户手势的位置,并设置摄像头与受检用户手部之间的水平距离为摄像头的工作距离,所述摄像头进行手势图像采集时,摄像头视野中只允许出现一只手。
[0069] 需要指出的是,辅助功能模块旨在辅助视力测试流程,这些功能可以提升自助式和自动化测试的便捷性和用户友好性,从而提升整体的用户体验。因此,所述辅助功能模块驱动相应提示装置对受检用户进行提示,可以包括:
[0070] 辅助功能模块驱动语音提示装置对受检用户进行语音提示,和/或辅助功能模块驱动文字提示装置对受检用户进行文字提示。
[0071] 需要说明的是,本实施例中,所述手势识别模块调用单个视标的手势识别算法检测受检用户对视标刺激的反应时间并对采集的手势图像进行识别,可以包括:
[0072] 确定静态手势规则;
[0073] 从单张手势图像中识别出静态手势;
[0074] 从手势识别过程中检测受检用户对视标刺激的反应时间;
[0075] 识别单个视标的手势;
[0076] 进行静态手势识别准确性以及视力检测准确性评估。
[0077] 优选的,本实施例采用基于朴素贝叶斯分类器的视力阈值确定机制进行视力阈值的确定,所述采用基于朴素贝叶斯分类器的视力阈值确定机制进行视力阈值的确定,可以包括如下步骤:
[0078] 执行手势识别模块,输出结果,所述结果包括包含受检用户对视标刺激反应时间参数的特征向量和手势识别结果;
[0079] 更新视力阈值的边界差;
[0080] 判断更新的视力阈值的边界差是否等于所设定的视力阈值的间距,若是,则输出视力阈值,并结束,否则判断手势识别结果是否等于1,若等于,则执行朴素贝叶斯分类器,输出当前估计的视力级别,并通过总结公式计算即将测试的下一次视力级别,若不等于,则直接通过总结公式计算即将测试的下一次视力级别;
[0081] 通过总结公式计算即将测试的下一次视力级别后,返回执行手势识别模块,直至更新的视力阈值的边界差等于所设定的视力阈值的间距。
[0082] 实施例2
[0083] 在实施例1的基础上,本实施例提供的是一种快速准确的自动化视力检测系统,包括:
[0084] 辅助功能模块,用于在辅助功能模块激活后,驱动相应提示装置对受检用户进行提示,并在设定待测视力级别后,进入视力检测循环过程;
[0085] 视标显示模块,用于收到第二指令后,根据所述设定的待测视力级别驱动显示屏显示对应尺寸的视标,对受检用户进行视标刺激;
[0086] 手势识别模块,用于收到第三指令后驱动摄像头进行手势图像采集,并用于受检用户收到提示和视标刺激,作出相应的静态手势后,调用单个视标的手势识别算法检测受检用户对视标刺激的反应时间并对采集的手势图像进行识别,生成检测和识别结果并发送给流程控制模块;
[0087] 流程控制模块,用于在启动流程控制模块后,通过流程控制模块向辅助功能模块发送第一指令,激活辅助功能模块;并用于向视标显示模块发送第二指令;并用于向手势识别模块发送第三指令;
[0088] 并用于收到从手势识别模块中发送的检测和识别结果后,调用视力阈值确定机制判断是否继续视力检测循环过程,若循环继续,则重复视力检测循环过程,若循环结束,则确定出视力阈值,在确定出的视力阈值对应级别的视力水平下,分别进行多次视标检测,确定出视标级别,确定出的视标级别即为该受检用户的实际视力值。
[0089] 本实施例的应用环境与实现原理与实施例1一致,因此不再赘述。
[0090] 实施例3
[0091] 在实施例1和实施例2的基础上,本实施例提供的是一种快速准确的自动化视力检测系统,参见图2,该系统中的硬件组件包括电脑主机、显示器、摄像头和扬声器。其中电脑2
显示幕的分辨率设置为:1,920×1,080,像素密度:96,亮度值:500cd/m。摄像头的分辨率为:200到400万像素。在检测开始前,人眼与显示屏的视标处在同一水平面上,两者之间的水平距离为检测距离,可设置的范围为2米到5米。摄像头被放置在正对受检用户手势的位置。摄像头与手部之间的水平距离为摄像头的工作距离,其可调节范围为0.5米到1.5米。为了准确识别静态手势,摄像头视野中只能出现一只手。
[0092] 本实施例采用实施例1中的视力检测流程进行视力检测,其中,对于本实施例中的手势识别模块在确定静态手势规则时,利用静态手势来作为视标方向的指向,如图3所示。当测试开始但视标尚未显示在屏幕上时,受检用户的手势处于准备状态,用握拳表示,如图
3(a)。一旦视标出现,受检用户用食指的指向代表所观察到的视标方向,如图3(b)‑3(e)。在无法清晰识别视标方向的情况下,受检用户应以张开的手掌表示,如图3(f),并避免在没有把握的情况下随意猜测方向。单个视标的手势识别完成后,视标会被清除,此时受检用户的手势再次恢复到准备状态。
[0093] 本实施例中,从单张手势图像中识别出静态手势时,可以包括以下步骤:
[0094] a、手部检测:将单张图像输入到MediaPipe Hands模块中以检测手部。如果检测到多只手或未检测到手,则程序会终止,并将手势状态值返回为None。如果检测到单只手,则继续下一步。
[0095] b、食指状态确定:坐标点如图4所示,提取食指上索引号为5、6、7和8四个点的坐标(xi,yi)。通过连接6号和7号点形成向量 其方向从点6指向点7。同样,连接7号和8号点形成向量 其方向从点7指向点8。如果食指的状态是直的,那么两个向量 和 之间的夹角θl必须小于预设定阈值θ0(本方法中θ0设为15度),即 同时,利用公式 计算得到食指上的四个点到索引号为0的手腕点(x0,y0)
的距离,5≤i≤8。如果食指处于张开状态,指尖点(8号点)到手腕点(0号点)的距离必须满足最大,即 同时满足上述两个条件,则继续下一步。如果条件不满足,则终止该过程,并将手势状态值返回为None。
[0096] c、中指状态确定:运用类似于食指状态判定的方法,如果中指满足张开伸直的状态,此时手势为张开的手掌,那么手势状态值返回为Unclear,并终止程序;否则继续下一步。d、手势方向确定:为了确定手势的方向,首先需要计算向量 与x轴正向的单位向量之间的夹角 然后考虑沿y轴的位移差Δdy=y7‑y6和沿着x轴位移差Δdx=x7‑x6来确定最终的方向。如果‑45°<θx<45°,表示手势为水平方向,如果Δdx>0则手势状态值为Right,Δdx≤0则手势状态值为Left。反之,如果θx≤‑45°或者θx≥45°,表示手势为垂直方向,如果Δdy>0则手势状态值为Up,Δdy≤0则手势状态值为Down。至此,可确定单张采集图像的手势状态。
[0097] 需要指出的是,本实施例中,对于识别单个视标手势过程,单个视标的手势识别包括从准备状态到指向状态的过渡期间采集的所有手势图像的识别过程,直到满足识别终止条件为止。识别终止条件:当连续三张图像被识别为相同手势或者累计执行时间超过预定义限制。该算法的流程图如图5所示。
[0098] 单个视标的手势识别结果包括两个元素:受检用户的反应时间Tr和手势识别结果Rg,其中Rg=1表示识别正确,Rg=0表示识别错误。其中,反应时间Tr的测量是从视标出现在屏幕上开始计时到首次检测到手势则终止计时,它的大小可作为衡量受检用户视力值的重要参量,因此将被装进特征向量F。特征向量F由当前测试的视力级别 反应时间Tr以及近视状态Sm(其中近视表示为1,反之为0)所组成。然后向量F与Rg一起作为手势识别模块的输出结果,传递给流程控制模块,为后续的视力预测提供重要信息。
[0099] 具体而言,本实施例中,可以通过实验进行静态手势识别准确性以及视力检测准确性评估。
[0100] 对于静态手势识别准确性评估实验,本次实验对100名受检用户进行了评估,他们使用左右手分别进行上、下、左、右四个不同方向以及看不清楚的手势测试。每种手势进行了10次识别,共产生了10,000个手势识别实例。其中,有9,760个实例被正确识别,总体准确率达到97.6%。具体结果见表1。
[0101] 表1
[0102]
[0103] 对于视力检测准确性评估实验,本实施例的视力检测方法(基于静态手势交互的系统)和传统视力检测方法(人工交互)在标准测试距离为5米的实际应用场景下进行对比评估实验。从样本200只眼睛中随机选择了122只眼睛,并对其分别进行了两轮的视力测试。为了评估两种测量方法的一致性,采用了Bland‑Altman分析方法。经过计算,两种视力检测方法所测结果差值的平均值为‑0.0123,标准差为0.0687,两种方法所测得的视力数据未呈现显著性差异,即差值并未明显偏离零,说明两种测量方法所测量的结果具有一致性。从图
6中也可以看出,大多数数据点都在95%的一致性界限内,没有明显的趋势,且96.72%(122只眼中的118只)处于指定的±0.1的偏差阈值内,因此可以得出本实施例采集的视力数据和传统方法所采集的数据具有高度一致性。
[0104] 需要说明的是,本实施例中,流程控制模块通过执行视力阈值确定机制,有效地管理视力测试过程的启动、迭代和结束。视力阈值确定机制可以有效地绕过了耗时的逐行扫描方法,减少了所需的视标测试次数,大幅提高了效率。
[0105] 视力阈值确定机制的核心是估计受检用户的实际视力值,因此,选择适当的预测模型至关重要。在机器学习领域,常用的经典分类方法包括支持向量机(SVM)、人工神经网络(ANN)和朴素贝叶斯分类器(NBC)等。其中,NBC具有简单高效、分类性能稳定以及可处理多分类问题等优点。而且它适用于小样本数据和增量训练场景,使其特别适用于视力值的估计。此外,通过初步实验验证,NBC在视力级别估计性能上也表现出优于SVM和ANN。因此,本实施例选择使用NBC进行视力检测。
[0106] 本实施例中,假设样本训练集为 其中n为样本数,m为样本特征的维度。对应的标签数据集为 标签 其中类别集合
ω={ω1,ω1,…,ωk}共有k个类别。每个类别ωi的先验概率为P(ωi)。当一个新的未知样本x=(x1,x2,…,xm),其属于类别ωi的条件概率表示为P(x|ωi)。通过贝叶斯定理,可以计算后验概率:
[0107]
[0108] 在朴素贝叶斯算法中,假设特征x1,x2,…,xm是相互独立的。这个假设使得可以将条件概率P(x|ωi)转化为:
[0109]
[0110] 因此,本实施例中的NBC模型可以表示为:
[0111]
[0112] 其中H(x)表示最大后验概率。
[0113] 对于一个连续的特征值,比如第d个特征取值为xd,给定类别为ωi的情况下,且符合均值为 方差为 的高斯分布,其条件概率密度描述为:
[0114]
[0115] 本实施例中,为建立初始的NBC模型,按照以下步骤进行:
[0116] a、确定特征属性和类别集合:选择特征向量 在每个采集的样本x=x1,x2,x3)中,xi表示第i个特征的采样值,其中y为对应的标签值。类别集合ω包括了13个视力水平,范围从4.0到5.2。
[0117] b、获取训练数据集:数据来自于100名受检用户的200只眼睛。每只眼睛进行了5轮测试,每轮包括13个不同级别的视标测试,共计13000个数据点。排除Rg值为0的数据点,共收集到的有效样本数据总量为7405个。随机选择80%用于创建训练集,剩下的20%构成了测试集。
[0118] c、模型训练:将训练数据输入NBC模型,计算P(ωi)和P(xj|ωi),高斯密度函数用于处理连续变量Tr。
[0119] d、应用分类器进行估计:考虑到估计的视力值始终大于当前测试的视力水平且小于所测试过的看不清楚的视力级别集合Linc中的最小值,即min{Linc},因此只需要计算满足条件 的情况下的H(x),即:
[0120]
[0121] 训练好的分类器用于对目标数据进行分类。对于给定的新样本x,如果存在P(ωk|x)=H(x),则将x分类为类别ωk。
[0122] 需要说明的是,本实施例中,可以采用增量学习进行NBC更新,引入增量学习来更新NBC,可以动态调整到新的数据模式,而无需进行完整的重新训练,确保了实时数据处理能力,同时提高了模型的适应性和效率。使用初始模型的先验信息和新添加样本进行模型更新。在测试开始之前,受检用户可以选择自愿输入他们的实际视力值。当提供这些值时,系统根据测试过程中的数据生成新样本,并添加到新的训练数据集Xnew中。系统定期检查是否有新样本填充,如果有就会触发离线模型更新任务。
[0123] 本实施例中,当前的样本集XS共有n个样本, 表示类别ωi中的样本数量,对于Xnew中的每个新样本xt,其标签为yt,通过以下步骤进行更新分类器:
[0124] a、通过移除xt更新Xnew。
[0125] b、通过添加xt更新XS。
[0126] c、根据下面的公式更新分类器的参数。
[0127]
[0128] d、检查Xnew是否为空。如果为空,则更新过程完成;否则,返回到步骤a,继续处理Xnew中的剩余样本。
[0129] 本实施例中,还可以进行NBC输出误差评估实验,对三种机器学习模型(SVM、ANN和NBC)在预测视力值性能方面进行评估。模型的性能通过估计值与实际视力值之间的误差来衡量。表2提供了在特定误差范围内的预测准确率的统计分析,在误差边界为0.1、0.2和0.3时NBC的准确率分别为91.02%、96.98%和99.47%,优于ANN和SVM模型,表明NBC模型具有较好预测能力。
[0130] 表2
[0131]
[0132]
[0133] 本实施例中,对于视力阈值确定机制,基于单次的视力测试数据进行估计实际的视力值是非常有挑战的,因此本实施例中的视力阈值确定机制是在NBC的基础上开发的,旨在防止NBC预测误差过大而导致视力的搜索过程发散。在了解这个机制的测试过程之前,首先需要解释其中涉及的变量。
[0134] Rg:手势识别结果。
[0135] 当前测试的视力级别。
[0136] 前一次测试的视力级别。
[0137] 即将测试的下一次视力级别。
[0138] 当前估计的视力级别。
[0139] Lc:已完成测试中Rg=1的视力级别集合。
[0140] Linc:已完成测试中Rg=0的视力级别集合。
[0141] Δl:视力阈值的边界差Δl=min{Linc}‑max{Lc}。
[0142] ∈:视力阈值的间距。
[0143] 在这个机制中,有两个关键的决策点。首先是决定视力阈值搜索过程何时结束。主要取决于是否满足收敛条件Δl=∈。其次,下一次循环的 的计算取决于Rg的值。当Rg=1时,特征向量F被传递给NBC模型,产生估计值为 此时, 在Rg=0的情况下,从手势识别中获得的反应时间不能作为实际视力值的预测。因此,跳过NBC模型, 的计算取决于和 归纳起来, 的计算可以用公式总结为:具体的工作流程图如图7所示。
[0144] 本实施例中,还可以进行视力检测效率评估实验。从100名受试者中随机选择了62只眼睛,其视力水平范围从4.0到5.2。实验平台都是在基于静态手势识别的人机交互平台上完成实验,不同的是这些眼睛分别使用基于NBC的视力阈值确定机制以及传统的逐行扫描方法进行了视力测试,每种方法在不同视力级别上进行的平均视标测试次数均详细记录在表3中。从表3可以看出,基于NBC的视力阈值确定机制在所有视力水平的视力检测中所需的测试次数是最少,62只受试眼睛平均每只眼睛仅需要9.01次视标测试,而传统的逐行扫描方法所需的次数为27.85次。因此,基于NBC的视力阈值确定机制在提高效率方面具有明显优势,可以大幅减少了视标的测试次数,从总体测试时间上看与传统的逐行扫描方法相比减少了约68%((27.85‑9.01)/27.85)。
[0145] 表3
[0146]
[0147]
[0148] 以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。