用于虚拟现实/增强现实人机交互的实时手势识别方法的研究

2023-03-14 07:55柯健张量
现代计算机 2023年1期
关键词:食指手掌关键点

柯健,张量

(苏州市职业大学计算机工程学院,苏州 215104)

0 引言

虚拟现实技术的三大基本特征是沉浸感、交互性和想象力,其中交互性是用户与虚拟世界通过特定的交流手段实现信息交互的方式。虚拟现实技术的实现离不开硬件设备的支持,虚拟现实设备主要有两类,第一类是移动头显设备,如Gear VR等,需要插入手机使用,第二类是外接式头显设备,如HTC Vive等,需要外接电脑使用,这两类虚拟现实设备的交互方式基本都是通过操作手柄实现。增强现实技术是一种将虚拟信息与真实世界巧妙融合的技术,目前大多数是通过手机摄像头拍摄现实世界,然后与虚拟信息相融合,从而实现对真实世界的增强,它的交互方式是通过操作手机屏幕实现的。

实现人与虚拟场景的交互方式主要有三种:一是虚拟交互,通过虚拟场景中的虚拟按钮进行控制;二是物理交互,利用控制手柄等物理设备,实现与虚拟场景的交互;三是直接交互,通过数据手套或者手势识别,做出各种不同的动作指令,从而实现对虚拟场景中物体的控制。在VR/AR中人机交互方式大多是通过虚拟交互或者物理交互实现的,随着VR/AR设备以及人机交互的不断发展,直接交互尤其是手势交互成为VR/AR中更为友好,更为自然的交互方式。

1 相关工作

手势识别是手势交互的前提条件,目前手势识别主要由两种实现方式,一是基于传感器的手势识别方法,文献[1]提出了一种基于加速度计和陀螺仪传感器数据的深度学习框架实现手势识别。文献[2]以手势识别和虚拟现实人机交互为研究对象,提出并设计了一种新型的,用于辅助VR设备进行人机交互的原型系统。文献[3]基于Leap Motion对模板匹配的手势识别加以改进。文献[4]提出了基于Leap Motion手势识别和最邻近算法,建立了三维手势交互系统。文献[5]提出了基于Leap Motion的动态手势识别方法。文献[6]设计了一种VR游戏手势运动识别装置。文献[7]提出的基于Kinect视觉功能对体感手势目标识别。文献[8]提出了基于Kinect骨骼数据的手势识别。基于数据手套的手势识别方法,由于数据手套价格昂贵,容易损坏,不容易得到推广,基于Kinect骨骼数据的手势识别方法,由于Kinect只提供人体25个关节点,每只手的手部只提供4个关节点,手部关节点数量较少,影响了对手势的精确识别。

二是基于视觉的手势识别,使用普通摄像头采集数据,成本较低,利用机器学习或神经网络进行手势图像识别。文献[9]提出了基于关键点的残差全连接网络动态手势识别方法。文献[10]提出了基于改进的YOLOv3实现手势识别的人机交互方法。文献[11]提出了融合注意力机制的YOLOv4-Tiny算法,采用基础手势结合手势状态变化实现人机交互。文献[12]提出了基于深度学习的手势识别算法,利用卷积神经网络对关节特征图分类,达到手势识别的目的。基于视觉的深度学习手势识别方法是目前研究的热点,但是使用深度学习需要提供大量的手势样本数据用于训练,当只有少量样本时,深度学习容易出现过拟合。

在计算机科学和人机交互领域中,手势识别是通过数学算法来识别人类手势的一个议题。用户可以使用简单的手势来控制或与设备交互,让计算机理解人的意图。在AR中,通过感知手部形状和动作对于改善用户体验是至关重要的。在手势识别领域常用的一种方法是模板匹配,通过对两个手势样本进行欧式距离计算,得到两个手势样本之间的相似度,根据相似度加以判断手势。

2 手势识别方法

本文针对传统的VR/AR人机交互方式,提出了一种基于MediaPipe平台的手势识别[13],用于VR/AR操作控制方案,计算手部关键点之间的位置、距离,从而进行手势识别决策,它是一种实时的不需要大量样本训练的手势识别方法。如图1所示。

图1 手势识别流程

2.1 手势设计

手势识别的首要工作是先设计好能被识别的手势,手势的设计[14]要遵循几个原则:首先,在用户使用方面,手势的设计要方便简单,符合用户习惯,便于用户理解和掌握;其次,在交互过程方面,要求手势的设计保证流畅和降低操作疲劳;最后,在系统实现方面,由于手势识别的准确度与传统的交互方式存在一定的差距,识别过程容易出现误判,要求手势的设计功能交叉少,风格统一,使系统存在一定的容错性和可靠性。总之,利用手势交互的目的是使人机交互的过程更加自然方便。在单目摄像头下,得到的是二维图像信息,很难获得深度方向的信息,因此在设计手势的时候,不要使用手势离摄像头的远近距离作为判断手势的标准。可以根据手指关节的弯曲程度来决定每根手指是弯曲还是伸直的状态,每个手指的关节位置可以作为不同手势语义的设计标准。本文定义了4组基本的静态手势和标签,如表1所示。

表1 手势定义

2.2 手掌检测器

检测人手是一个非常复杂的任务,模型必须适用于各种尺寸的手,而且需要检测被遮挡或者自遮挡的手,手的检测与人脸检测有所不同,人脸具有眼睛、嘴巴等高对比度的轮廓,而人手没有类似的特征,只通过视觉特征来检测很难实现可靠的手部检测。为了解决这个问题,使用手掌检测而不是手检测,这是因为估计手掌的边界框比估计具有关节的手指检测要简单得多,而且手掌目标更小,即使在握手等造成双手自遮挡的情况下,非极大值抑制算法也能良好地工作,另外,手掌是正方形的,只使用正方形的边界框来建模手掌,可以忽略其他长宽比,减少锚框的数量。使用类似于特征金字塔网络的编码解码器进行特征提取,这样即使在大场景中,大物体和小物体都能在不同尺度下感知到。在训练过程中使用FocalLoss损失函数,用于支持大尺度方差所产生的大量的锚框。

2.3 手部关键点检测器

输入图像经过手掌检测器后,检测手部关键点坐标的模型通过回归预测手部的关键点坐标,手部关键点检测器学到了内在的一致性手部姿势表示,即使在手部部分缺失或者自遮挡的情况下也能表现出非常好的鲁棒性。手部关键点检测器将输入图像映射到21个关键点位置pi∈R3,关键点位置包括X,Y坐标和相对手掌的深度Z坐标,Z值越小,表示离摄像头越近,输入图像中包含手的置信度,以及左右手二分类信息。如图2所示。

图2 手部关键点示意图

2.4 手势识别算法

手势识别算法将识别到的手部关键点结构分类成一系列离散手势,使用一系列算法来推导手势。手势识别经常需要判断某个手指是否弯曲,第一种方法是计算手指头关节的第一节和第二节的夹角,根据设定的相关阈值来判断手指是否弯曲,如果它们之间的夹角大于某个阈值则定义为弯曲,小于某个阈值则定义为伸直,但是这种方法有一定的局限性,比较适合手指侧面图像的场合。第二种方法是根据关键点的y坐标判断手指是否伸直,例如食指的关键点8和关键点6,如果关键点8的y坐标小于关键点6的y坐标,则定义食指为伸直。第三种方法是计算每个指尖关键点与手掌的距离,手指尖与手掌的距离小于阈值的时候,定义手指为弯曲,手指尖与手掌的距离大于阈值的时候,定义手指为伸直。在实验中要综合运用几种方法,根据手指是否弯曲,可以识别手势1和手势2。

手势3和手势4的检测,除拇指外,可以使用前面几方面确定其余四指是否伸直,再根据食指的状态确定拇指是否弯曲。如果食指是伸直状态,拇指的关键点4与食指的关键点14的距离小于拇指的关键点3与食指的关键点14的距离,则拇指为弯曲状态;拇指的关键点4与食指的关键点14的距离大于拇指的关键点3与食指的关键点14的距离,则拇指为伸直状态。如果食指是弯曲状态,拇指的关键点4与食指的关键点6的距离小于拇指的关键点3与食指的关键点6的距离,则拇指为弯曲状态;拇指的关键点4与食指的关键点6的距离大于拇指的关键点3与食指的关键点6的距离,则拇指为伸直状态。

3 实验及结果分析

本文的实验环境为Intel 9700K,内存32 GB,显卡Nvidia 2070,操作系统为Windows10,深度学习框架为Pytorch1.10。

本文为手势交互设计了4种手势,根据实验的需要从网络上收集或使用摄像头和计算机视觉技术捕获手势图像,每种手势180张,共采集720张图像。把数据集输入到手势识别系统,输出每个图像中的手部关键点和识别结果,最终得到检测置信度为70%时的各手势识别的混淆矩阵,如表2所示。

表2 预测手势与真实手势的混淆矩阵

表2中X轴为手势的真实标签,Y轴为手势的预测值,表中对角线显示了识别正确的手势数量,当预测的手势不在定义的4种手势内时,归到其它类中。

计算手势识别算法的精确率、召回率、F1综合评价指标,如表3所示。

表3 手势预测的精确率、召回率以及F1综合评价指标 单位:%

通过实验,手势识别平均精确率达到99.0%,平均召回率达到98.1%,平均F1综合评价指标达到98.5%,在实验过程中手势识别算法对拇指是否弯曲还存在一些误判,但整体识别精度能满足VR/AR中对手势交互的要求。

4 结语

本文主要研究了手势识别在VR/AR中的应用,在MediaPipe平台,通过单目摄像头采集手势图像,基于手部关键点特征实现实时手势识别算法,达到了通过手势控制VR/AR系统中的人机交互的目的,在实验中设计了4种不同的手势,平均F1综合指标达到98.5%,该方法的可行性和鲁棒性均得到了验证,可用于基于计算机视觉的手势交互场景的实时识别,为虚拟现实/增强现实的人机交互提供了一种可供选择的方案。

猜你喜欢
食指手掌关键点
聚焦金属关键点
肉兔育肥抓好七个关键点
摊开手掌
磨 刀
手掌上的童话
把手掌放在画纸上描一描,画出一只考拉吧
平衡尺子
拇食指巨指症1例
医联体要把握三个关键点
锁定两个关键点——我这样教《送考》