基于动态手势跟踪算法的视力检测系统设计

2023-09-05 09:27李昌锋童文琴
医疗卫生装备 2023年7期
关键词:视标角点手势

李昌锋,童文琴,林 蔚

(福建生物工程职业技术学院康复保健系,福州350007)

0 引言

定期的视力检测是早期发现儿童和青少年近视的最重要和最为有效的手段[1]。传统的《标准对数视力表》检测方式是受检者在医师的引领下完成的。医师通过指示杆依次随机指向某个视标“E”,受检者根据视标方向做出相应的手势移动应答,医师根据应答信息判断受检者是否能看清楚该级别的视标。传统的检测方式需要人工辅助,不够便捷,无法实现单人自助式检测。而基于人机交互技术的视力检测系统取代传统视力检测中依靠人工交互的方式,无需医师辅助,节省医护人力资源成本,提高了视力检测效率,可实现视力自助式检测和共享化检测[2]。

早期的自助式视力检测系统研究多数是基于嵌入式单片机技术,如许剑锐等[3]利用STM32F103RCT6型单片机作为系统控制核心搭建了一套视力检测仪器,该检测仪器在一定程度上可实现自助式视力检测。但该检测仪器以按键输入代替手势信息判别,不符合常规视力检测的手势作答习惯,且不容易实现商场、社区等公共场所的共享检测。近年来,基于计算机视觉的手势识别技术被引入到人机交互设备中,大大提升了人机交互效率,受到越来越多研究人员的关注[4-5]。目前,已有研究人员开始将静态手势识别技术运用到视力检测场景中,构建基于人机交互方式的视力检测系统,其中何启莉提出一种基于肤色分割和GR-AlexNet 的深度学习算法,用于视力检测中的静态手势识别,可提高手势识别的准确率[6]。但此类方法面临着视力检测手势数据集较少,静态手势图像采集容易受到肤色、光照影响,以及利用复杂模型检测的实时性不高等问题的挑战。

动态手势跟踪作为手势交互方式中的重要环节[7],将用户的自然手势转化为可理解的机器指令,从而实现人机交互的无缝连接,因此基于动态手势的跟踪技术广泛应用于人机交互系统[8]。本研究设计一种基于动态手势跟踪算法的视力检测系统,通过构建一个主要由摄像头、信息处理计算机以及用户端的动态手势组成的人机交互环境实现视力检测[9]。在该环境中,摄像头取代了传统医师在视力检测中的视觉信息获取角色,信息处理计算机则承担了流程控制和检测结果判断的任务,而用户的动态手势被引入作为一种新型的输入方式,取代了传统的鼠标和键盘[10]。整个人机交互环境的核心在于动态手势跟踪算法,该算法相当于医师的大脑,可以对摄像头所获取的动态手势信息进行方向识别。本系统可解决视力检测过程中手势启动和终止的识别难题,同时克服受光照条件和人脸肤色等因素影响的问题,从而显著提升手势移动方向识别的准确率;其次系统的实时性好,可以快速识别手势移动,实现高效检测。

1 动态手势跟踪算法

1.1 手势规则定义

动态手势跟踪中存在着手势发起和结束识别的难题[11],因此本研究中需要结合常规的视力检测习惯,定义手势的初始状态、终止状态、移动动作。

(1)初始状态Sstart:受检者在检测开始之前,一只手举起,手掌张开朝正前方,全身保持静止,手势进入待移动状态,如图1 中初始状态所示。

图1 向右移动的手势定义

(2)终止状态Send:手势移动完成后,手势出现的停顿或者静止视为手势结束。

(3)移动动作A(向上移动Aup、向下移动Adown、向左移动Aleft、向右移动Aright):检测开始,视标“E”显示在屏幕上,摄像头启动捕捉图像,语音提示“开始”。手掌开始向上、下、左、右中的一个方向做连续移动,移动轨迹尽可能横平竖直。移动过程中每一帧的状态依次记为S1、S2、…、Sn-1、Sn,n为帧数。为了避免手势移动时间过短以及误启动动作造成的检测错误,经实验测定,一次有效的手势移动帧数需满足n≥10。

一次完整的视力检测过程为Sstart→A→Send,即Sstart→S1→S2…Sn-1→Sn→Send,其中Sstart→S1为启动动作Astart,Sn→Send为结束动作Aend,所以移动动作A可分解为启动动作、连续滑动、结束动作。图1 所示为向右移动的手势定义。

1.2 算法设计

算法总体思想:首先,利用帧间差分算法快速识别视力检测过程中的启动动作Astart和结束动作Aend,以及分离出的手势移动动作A在每个状态下的轮廓图;然后,利用Shi-Tomasi 角点检测算法提取每张轮廓图的角点集,并结合手势的几何特征选取合适的角点集作为轮廓的特征代表,计算轮廓图的运动轨迹中心点;最后,根据运动轨迹点集的统计特征进行方向判别。该算法计算量小,能够快速、实时检测出场景中移动目标的运动轮廓轨迹,适用于视力检测中的上、下、左、右手势移动方向判别。

1.2.1 手势目标检测

帧间差分算法的基本原理:将时间上连续的2帧图像数据相减,取绝对值后与设定好的阈值进行比较,大于阈值的为运动目标区域,否则为静止区域[12]。本研究中定义Ik(x,y)和Ik+1(x,y)为采集图像序列中连续2 帧灰度图像,Dk(x,y)为差分后的结果。T为二值化阈值,该值的选取会直接影响到运动目标的检测效果,在本算法中经实验测定T的取值范围为20~30。运动目标Mk(x,y)为二值图像,可表示为

采用帧间差分算法能够在背景图像中找到运动目标,并将运动目标从图像中分离出来,从而确定运动目标的位置[13]。该算法计算量小、灵敏度高、实时性强,可快速检测出动态手势跟踪中的启动动作和结束动作。检测流程如图2、3 所示。

图2 启动动作检测流程图

图3 结束动作检测流程图

1.2.2 形态学处理

数学形态学的基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像进行分析和识别的目的[14]。数学形态学包括膨胀、腐蚀、开运算、闭运算等基本运算。其中开运算是一种先腐蚀后膨胀的形态学处理过程,可用于去除孤立的小点和毛刺,平滑较大物体的边界,同时并不明显改变该物体的面积。

开运算处理过程为:X◦B=(X B)⊕B,其中X为被处理的图像,B为结构元素,◦为开运算符,为腐蚀操作运算符,⊕为膨胀操作运算符。本研究选择结构元素B为3×3 的像素块对手势采集的灰度图像进行腐蚀和膨胀的遍历操作,然后按照先腐蚀后膨胀的开运算对手势运动部分的区域中出现的噪声点进行处理,从而更好地提取手势边缘和轮廓特征。

1.2.3 手势特征提取

角点是图像中最基本的一种兴趣点,角点检测是一种重要的特征检测与匹配方法[15]。本研究选用Shi-Tomasi 角点检测算法进行手势特征提取。该算法的基本思想和简要推导过程[16]如下:

假设某个窗口L的中心位于灰度图像的坐标位置为(x,y),该位置的像素灰度值为I(x,y)。如果该窗口分别向x和y方向移动一个小的位移u和v,新位置的坐标为(x+u,y+v),该位置的像素灰度值就是I(x+u,y+v)。定义窗口在各个方向上移动(u,v)所造成的像素灰度值的变化量为E(u,v):

式中,w(x,y)为位置(x,y)处的窗口函数,表示窗口内各像素的权重。

通过上述公式计算E(u,v),计算量非常大,因此本研究使用泰勒展开式来得到该公式的近似形式。根据泰勒公式,I(x+u,y+v)可以展开简化为

令M 矩阵如下式:

求出M 的特征值λ1和λ2。

(1)当λ1、λ2值都很小时,待检测点落入图像平坦区域,为非特征点;

(2)当λ1>>λ2或者λ1<<λ2时,待检测点落在图像边缘上,为非特征点;

(3)当λ1、λ2值都很大时(较小值大于某阈值),待检测点为特征点。

Shi-Tomasi 角点检测算法是在Harris 算法的基础上进行创新与改进,稳定性较好,自适应能力强,不易受到图像旋转、光照条件、视角变化和噪声等影响[17]。图4 展示了一个手势移动的某个状态下经过帧间差分、二值化、开运算和角点检测等处理后的图像效果。这些处理步骤能够有效地去除噪声、增强角点特征,并为后续的手势分析提供了有力的数据支持。

图4 某个状态下的手势特征提取效果图

1.2.4 手势方向判别

移动动作A包含的状态集合S={Si}(i=1,2,…,n;n≥10),共采集到n帧轮廓图像。Si表示第i个状态,Si状态下的轮廓图记为第i帧轮廓图,采集到的角点个数记为ci,第i帧轮廓图的角点集合记为Mi={(xij,yij)|j=1,2,...,ci},所有帧轮廓的角点集合记为M={M1,M2,…,Mn}。移动动作的检测流程如图5 所示。

图5 移动动作检测流程图

如图4(d)中所示,在做移动动作A时,手掌移动会带动手臂做整体移动,手臂移动轮廓的角点分散、不稳定,会对运动轨迹点的计算造成干扰。而除拇指外的四指指尖的角点特征典型,在任何方向的移动中均可被稳定检测,因此本研究选取四指指尖区域的角点集Mi'的中心点作为该帧图像轮廓运动的轨迹坐标点。

四指指尖区域的定位如图6 所示,从沿y轴方向的几何特征上看,四指指尖区域的高度占比满足如下要求:

图6 四指指尖区域定位

移动动作A所有状态下的轮廓图的运动轨迹点集记为D,D={p1,p2…,pn}={(x1,y1),(x2,y2),…,(xn,yn)}。图7 为随机采集到的4 个方向的有效手势移动轨迹。手势在移动过程中如果遇到摄像头抖动、背景物体运动、受检者身体或者头部晃动等干扰时,运动轨迹点就会大幅度脱离原来的移动路径。假设第i个轨迹点的移动距离记为前i-1 个轨迹点的移动平均距离记为为了排除上述干扰,需要设定有效手势移动应该满足一定的条件,即每一帧轮廓轨迹点的移动距离di应保持在一定倍数的范围内波动。因此,本研究引入波动参数γ(一般取值为2~3 倍),使移动距离满足

通过上述的干扰排除处理后,就可以获取到单次有效手势移动的轨迹点集D。由图7 可以看出,手势在横向方向移动(向左、向右移动)的轨迹点集在纵坐标上的波动幅度远小于在横坐标上的波动幅度,手势在纵向方向移动(向上、向下移动)的轨迹点集规律刚好相反,因此利用统计学方法可以进行手势移动方向判别。

对于某次手势移动动作A,所有轨迹点的横坐标均值纵坐标均值W为摄像头采集图像的宽度,H为摄像头采集图像的高度,通过归一化处理后,轨迹点的横坐标方差纵坐标方差手势移动横向位移Dh=xn-x1,纵向位移Dv=yn-y1。

2 视力检测系统设计

2.1 硬件

本系统的硬件包括Windows 系统主机、显示屏、摄像头(前置)、语音播报器以及数据通信装置等。主机为森克SK-15 型号,采用Windows 10 操作系统,是视力检测系统的控制核心,负责全流程的控制。前置摄像头为800 万像素的奥尼A8S 高清摄像头,用于采集手势移动信息。显示屏为主机系统配置的电容触控屏,尺寸为32 in(1 in=25.4 mm),屏幕分辨力为1 080 像素×1 920 像素,亮度值为500 cd/m2,显示屏发光均匀、亮度恒定,满足视力检测要求。主机内置的语音播报器可进行语音播报提示,提高人机交互的便捷性;内置的数据通信装置用于网络的连接,实现数据通信、存储和传输。本系统的硬件实物图如图8所示,该立式一体机已应用于学校、社区、商场等场景区域,可提供共享式视力检测服务。

图8 视力检测立式一体机

视力检测示意图如图9 所示,人眼与视标处在同一水平面上,两者之间的水平距离为检测距离d,本系统可设置d的范围为1.5~5 m。摄像头被设置在正对受检者手势的位置。摄像头与手部之间的水平距离为摄像头的工作距离d',其可调节范围一般为0.5~1.5 m。本系统的硬件配置要求可扩展兼容家庭用便携式计算机,当采用集成摄像头的便携式计算机进行视力检测时d=d',为了保证摄像头处于正常工作距离以及防止视标“E”显示变形,建议设置d=d'=1.5 m。

图9 视力检测示意图

2.2 软件

2.2.1 视标生成

根据国家标准GB 11533—2011《标准对数视力表》,目前常用视力记录是5 分记录L,L=5-lg α,其中α 为外界物体上两点在眼结点处所夹的角[18]。L与α 是一一对应的关系,两者的数据可通过查询国家标准得到。不同视力水平对应的视标“E”的边长l与检测距离d和视角α 存在的关系为:l=5d×tan α,即l=5d×tan 105-L,通过此式可以计算出在不同视力水平和不同检测距离情况下视标“E”的大小。视标在液晶屏上显示,因此又与屏幕的分辨力和尺寸有关系。假设屏幕的分辨力为W×H,尺寸为w×h,则视标“E”在横轴方向的边长的像素点个数为nx=[l/w×W],在纵轴方向的边长的像素点个数为ny=[l/h×H]。

2.2.2 视力检索

受检者单次辨认某个视标是通过调用动态手势跟踪算法完成。对于某一个级别视力水平的判定规则为:受检者连续2 次辨认正确或者在3 次辨认中只有1 次失败则认定为可看清楚该级别视标;连续2 次辨认错误或者在3 次辨认中只有1 次成功则认定为不能看清该级别视标。视力检索算法是调用单级别视力水平判定规则,根据历史视力水平Eb选择顺序或者二分检索方式,从4.0~5.3 中检索出受检者的当前视力水平Ec。该视力检索算法的性能直接影响视力检测的速度。

启动视力检测前会要求用户输入历史视力水平Eb以及检测距离d等参数,Eb作为可选项,其默认值为0。视力检索会根据Eb是否已知分成2 种不同的检索方式。如果已知Eb,采用初始值为Eb的顺序检索方法;如果Eb=0,采用二分法检索,从视力水平中间值4.6 开始进行折半搜索。相对于传统的顺序检索方式,这种方法将级别水平从7 个降低到4 个,从而有效地缩短了检测所需时间,显著提升了检测效率,也提高了用户的体验度。

2.2.3 软件设计

根据《标准对数视力表》进行软件设计,并在Windows 环境下采用Python 3.7 语言开发完成。软件中设定了一套完整的流程模拟人工视力检测,全程均有语音提示,用户根据语音提示进行操作即可完成整个视力检测过程,检测流程如图10 所示,软件界面如图11 所示。软件实现的主体功能为:由主机按预设规则在显示屏上随机显示视标“E”,受检者观察到视标方向后,按照手势规则进行移动,主机通过摄像头进行图像采集,并调用动态手势跟踪算法进行方向判别,进而调整视标“E”的大小和方向,重复循环,直至可以确定受检者能看清的最小视标。

图10 视力检测流程图

图11 视力检测软件界面

3 性能测试

3.1 手势移动识别测试

测试群体:随机选取60 名志愿者,为年龄7~25岁的儿童和青少年,其视力水平覆盖4.0~5.3 的范围。

测试环境:室内,光线明亮,显示屏和摄像头无阳光或者强光直射,人身后的背景无移动物体干扰。

系统参数设置:可移动摄像头和手势的距离d'=0.5 m。

算法参数设置:二值化阈值T=25,高度占比参数α=0.1,波动参数γ=3。

测试方法:每位志愿者按照定义的手势规则完成100 次手势移动识别测试,包括向上、向下、向左、向右4 个方向各25 次。测试过程中屏幕上会随机出现手势移动方向说明,测试软件界面如图12 所示。

图12 动态手势跟踪算法测试软件界面

测试结果与分析:准确率测试结果见表1,测试总样本数为60×100=6 000 次,总的误检次数为134次,正确率达到97.8%。横向左右移动的正确率略高于纵向上下移动,原因在于常规习惯下人们在横向的手势移动跨度会高于纵向方向,这对于本研究中的动态手势跟踪算法的敏感度更高。从图12 中还可以看出,单次手势移动识别平均耗时为0.568 s,表明算法的实时性高,检测速度快。

表1 手势移动识别准确率测试结果

3.2 视力检测测试

在视力检测实验中,测试群体、测试环境、系统参数、算法参数这些设置和手势移动识别测试实验一致。不同的是视力测试涉及检测距离的设置,为了更好地与《标准对数视力表》检测法进行地对比,设置检测距离d=5 m。

测试方法:60 名志愿者按照定义的手势规则以及视力水平的判定规则完成2 组测试。测试一:在医师的指引下,按照《标准对数视力表》完成左眼和右眼的视力检测,一共获得120 组单只眼睛的视力数据;测试二:志愿者根据本研究的视力检测系统语音流程提示自助完成视力检测,同样获得120 组单只眼睛的视力数据。

测试结果与分析:在临床医学,特别是医疗器械的研究中,经常会涉及评价2 种不同方法(金标准和新方法)测量结果一致性的问题。Bland-Altman 方法因具备理解简单、分析直观、结果可靠等特点,在临床医学研究中得到广泛应用[19-20]。因此,本研究采用Bland-Altman 图对利用本系统进行视力检测和利用《标准对数视力表》进行视力检测的结果一致性进行评价。经过计算,2 种视力检测方法所测结果的差值的平均值=-0.000 8,采用配对t检验,P(H0:平均值=0)=0.828 3>0.05,2 种方法所测得的视力数据未呈现显著性差异,即差值并未明显偏离零,说明2 种测量方法所测量的结果具有一致性。从图13 中也可以看出,中间的红色水平实线(代表差值平均值为0的位置)与黑色水平虚线(代表差值的平均值d)基本处于重合状态,同样也表示2 种方法测量结果的一致程度非常高。另外,上、下2 条蓝色水平实线表示偏差在0.1 内可接受的范围界限,高达96.7%的数据点处在这个范围内,也表明2 种方法测量结果的一致程度很高。综上所述,本系统采集的视力数据和《标准对数视力表》所采集的数据具有高度一致性。

图13 Bland-Altman 一致性评价图

再从检测时间维度上进行比较分析,受检者准备工作就绪后第一个视标出现时开始计时,根据视力水平判定规则无法看清视标时结束计时。采用本系统完成双眼视力检测的平均时间为99 s,略高于采用《标准对数视力表》方法的平均时间(92 s),检测效率高,用户体验度好。

4 结语

本研究利用基于帧间差分、开运算、Shi-Tomasi角点检测、手势方向判别等处理流程的动态手势跟踪算法,根据《标准对数视力表》国家标准以及视力检索算法,设计了一种基于人机交互的视力检测系统。本系统硬件搭建便捷、人机交互操作体验好、检测效率高、准确度高,能够实现视力自助式检测和共享化检测,适用于家庭、学校、社区等多场景应用,可更好地帮助儿童和青少年实现高频次定期视力检测。本系统的核心算法是建立在自主定义的手势规则基础上的,虽然算法的手势规则和常规视力检测的手势规则基本相同,但还是存在细节上的差异,因此脱离手势规则将会影响视力检测的准确性。后续一方面需要继续深入研究算法,以降低因个人手势移动习惯差异而导致的手势识别错误率;另一方面需要增加测试样本数量,以及增加不同检测距离下的视力检测对比实验,以验证视力检测系统的稳定性和可靠性。

猜你喜欢
视标角点手势
挑战!神秘手势
V字手势的由来
基于FAST角点检测算法上对Y型与X型角点的检测
胜利的手势
基于边缘的角点分类和描述算法
基于圆环模板的改进Harris角点检测算法
基于Harris角点和质量评价的图像篡改检测
视近最大辐辏力及开散力检测
远方及近方水平斜位量的检测
视力表(一)