1.简介
姿势和手势都可以用于交流,因为它们能够传达某种意义。姿势和手势识别旨在识别人类执行的此类有意义的表情。这些表情通常包括手、手臂、头部、面部表情,在某些情况下还包括整个身体的运动。他们的认可通常旨在促进人与计算机之间的接口。目前的应用范围从手语到游戏、医疗应用,甚至虚拟现实。通常,用户站在摄像机前,他/她的身体的某些部位会被检测和跟踪。然后提取特征并与模型进行比较,以便转换为一些预定义的手势。
在这项工作中,我们提出了一种手臂手势识别方法,该方法引入了一组新的特征。更具体地说,我们使用Kinect传感器及其软件开发工具包(SDK)提取和跟踪骨骼关节。使用这些关节的子集(对于我们要识别的手势集有意义),我们提取它们的三维坐标。然后,我们计算上述坐标集和描述特定手势的整个视频帧集的一组统计特征。在下文中,术语“手势”应指可能涉及手、手腕和肘部的手臂手势。我们研究了一些著名的机器学习算法在这些特征上的使用。此外,我们采用了两个真实场景。我们考虑这样一种方法可能被(a)一组有限的已知用户和(b)一组无限的已知和未知用户使用的情况。前一种情况对应于系统的所有用户都是预先已知的情况;即,系统应设计为仅在其上工作。后一种情况是,系统预先接受了一组可用用户的培训,但还需要使用以前未见过的用户。我们认为,这两种情况都可能涉及到实际场景,因为它们可能适合实际用户的需求,因此都需要解决和评估。
我们还提出了一个新的手势数据集,用于评估上述算法和场景。这组特征的定义是为了在语义上有意义,以反映小的手势变化到小的特征变化,并需要恒定的时间(就复杂性而言)。此外,我们还调查了手动过滤来自“恶作剧”用户的数据集,这些用户无法(有意或无意)提供可靠的手势,这是否会显著改善结果,同时值得付出努力。由于我们的最终目标是使用经过训练的模型实时提取特征并对相应的手势进行分类,因此我们在通用硬件架构中对我们的方法进行评估,更具体地说,是根据手势识别所需的时间进行评估。我们讨论了哪些算法适合在现实生活和实时应用中采用,以及精度和响应性之间的权衡。最后,我们与最新技术进行了广泛的比较,并讨论了与本文目标相似的研究工作。我们应该澄清,我们的方法不执行任何时间分割来检测可能手势的开始和结束;相反,我们认为这个问题已经解决了,即我们使用预先分割的视频,目的只是识别每个片段的手势。请注意,每个片段最多只能包含一个手势。
本文的其余部分组织如下:第2节介绍了利用骨骼数据进行手势识别的相关研究工作。第3节介绍了Kinect SDK和建议的特征提取方法。数据集和实验结果如所示第4节,其中我们还包括对最先进技术的讨论和比较。最后第5节,我们得出结论并讨论未来工作的计划。 2.相关工作
在过去的几年里,许多研究工作都集中在手势识别问题上。在本节中,我们展示了试图识别类似手势的作品,与本作品中识别的手势相似,并重点介绍了包括(但不限于)手臂手势的作品。
传统的机器学习方法,如人工神经网络(ANN)、支持向量机(SVM)、决策树(DT)或K近邻分类器(KNN)已经得到了广泛的应用。Bhattacharya等人[1]使用示例手势标记识别过程的开始,避免时间分割。他们的方法在三维骨骼关节坐标上使用SVM和DT。Lai等人[2]选择脊椎关节作为参考,计算肘部和手部的距离,并将其用作特征。为了识别手势,他们使用了KNN分类器。Mangera等人[三]利用提取的序列关键帧和神经网络级联计算出的三维关节,首先对手势侧(左/右)进行分类,然后进行相应的手势识别。米兰达等人[4]使用SVM识别独特的关键姿势。他们将手势建模为关键姿势的序列,并使用决策森林进行识别。Ting等人[5]使用4D四元数描述关节,使用SVM识别手势。 由于一般来说,手势是速度不同的时间序列(例如,当由不同用户执行时),动态时间扭曲算法(DTW)[6]已经在许多作品中被利用,因为它能够精确地解决这个问题。Celebi等人[7]对每个人标准化的3D点使用动态时间扭曲(DTW)。Reyes等人[8]提出了一种以颈部为参考点的三维关节DTW特征加权变化。Ribó等人[9]提出了一种基于DTW、KNN分类器和一些启发式算法来提高性能的类似方法。Ibañez等人[10]使用三维关节,并将DTW与HMM进行比较,获得相同的精度。 隐马尔可夫模型(HMM)和高斯混合模型(GMM)也被频繁使用,因为它们能够解决时间模式识别问题。Anuj等人[11]通过将跟踪的关节投影到附加到用户的坐标系并与用户的方向对齐,将三维跟踪问题减少到二维。他们基于规则的方法基于HMM和自适应阈值。Gonzalez–Sanchez和Puig提出的技术[12]依赖于背景差分和头部/手部检测。手和头的3D位置与GHMM一起使用。Gu等人[13]对聚集的3D关节集使用HMM。Tran和Trivedi[14]检测头部和手,然后通过在过程中施加运动学约束来训练GMM。最后,尹和戴维斯[15]基于HOG和运动特征跟踪手并导出表示手形状的特征向量。然后,他们使用HMM的分层模型进行实时识别。 在第5节我们总结了上述方法,重点介绍了使用的特征、应用的学习算法、处理的手势以及在每个数据集上实现的准确性。可以看出,在这项工作中,我们评估了传统的机器学习算法,如SVM、KNN、HMM、GMM和树模型。然而,我们应该在此提及,在过去几年中,研究工作已经转向基于深度学习的方法。后者能够学习特征,而不是使用算法计算特征。Lin等人[16]提出使用三维卷积神经网络(CNN)提取的深层时空特征和基于长短期记忆网络(LSTM)的骨架信息模型。王和王[17]采用两流递归神经网络,对动作的时间动态和空间配置进行建模。Mathe等人[18]使用CNN的原始骨骼数据,而Zhang等人[19]使用了3D CNN和卷积LSTM。然而,正如我们稍后将在第5节与基于特征的方法(如本文中提出的方法)产生的简单模型相比,深度学习方法通常会导致更复杂的模型,需要更多的计算资源。 3.手臂姿势识别
众所周知,姿势和手势都可以用来表达意思。我们可以将姿势定义为暂时停止运动,身体关节在空间中呈现出不同的形态。另一方面,手势的定义可能更复杂。根据韦氏词典(https://www.merriam-webster.com/dictionary/手势)手势可以被定义为“通常是身体或肢体的运动,表达或强调一种想法、情感或态度”,也可以被定义成“肢体运动作为一种表达方式的使用”。在科学文献中,对手势有几种定义。在计算机视觉和模式识别领域,Mitra和Acharya对手势的通用定义[20]已形成如下:“手势是一种富有表现力的、有意义的身体运动,包括手指、手、手臂、头部、面部或身体的物理运动,目的是:(1)传递有意义的信息或(2)与环境交互。”在这项工作的背景下,我们关注手势的子集,这可以称为“手势”[21]. 更具体地说,我们可以将手臂手势定义为一组(子)手臂关节(即手、腕、肘)从某一点的转移A类到点B类,使用模糊预定义的轨迹。 3.1. Microsoft Kinect SDK
为了提取骨骼数据,我们使用Microsoft Kinect[22]相机,它提供实时RGB、深度和骨骼跟踪信息,并基于Shotton等人的工作[23],为任何背景下的每个人提供了一个稳健的算法,无需校准步骤。人体由关节的结构图描述,表示其主要身体部位(例如手臂、腿、头、肩等)。对于每个关节,实时提取相应的三维坐标。在图1我们描述了使用Kinect SDK提取的人体骨骼关节。我们应该注意到,在这项工作中,我们只对左右肘、手和手腕感兴趣。正如我们已经讨论过的,这些数据由每个关节的id和3D坐标组成。我们应该注意,关节是按层次结构组织的,其中隐含着父子关系;例如,根是髋关节中心,它的子代是脊柱、左堆和右堆等等。 3.2. 手势识别
所提议的一系列功能部分受到了盛的启发[24],他的作品扩展了鲁宾的作品[25]从二维空间到三维空间。更具体地说,让J型表示给定的接头。然后,通过和我们相应地表示其子关节和父关节。还让表示给定的视频帧和与三维坐标对应的向量J型在帧处此外,让成为所有人的集合.签署人我们表示的3D边界框,由和它两侧的两个不同长度。提取的特征如所示表1注意,每个特征都是针对给定关节计算的J型并且可能涉及不同的帧子集。符号总结如下表2. 更具体地说,我们提取了前两帧之间的空间角度(即。,和),最后两帧(即。,和)以及第一帧和最后一帧(即。,和),在所有情况下都使用对应向量的内积。此外,我们提取了总矢量角和平方总矢量角和使用相应向量的内积,即。,和总矢量位移是对应于初始和最终位置的矢量差的大小J型,而总位移是J型在任意两个给定的连续帧内。同样,最大位移是J型在任意两个给定帧内。最后,我们为所有帧中关节的所有位置集建立了一个3D边界框,并相应地估计其对角线的长度和角度。请注意,从骨骼数据来看,我们只使用了关节的子集(即其3D坐标)。另外,请注意,左肘,右肘,左手,右手,左腕,右腕}。标有*的特征仅使用HandLeft和/或HandRight计算。
也在两个父关节和子关节之间,即。,,(或同等)我们计算初始和最终(即和平均和最大角度(即). 角度在这些计算中使用的是哪里 注意,对于三角形的公式,我们使用带坐标的参考点(可以使用任何给定的点)。该三角形的可视化表示如所示图1b、 其中和已绘制。最后,在HandLeft(HL)和HandRight(HR)之间,我们提取最大值和平均距离,在手势中。由d日我们表示欧几里德距离和是每个手势的帧数,也用作特征。距离d日HL和HR之间的关系如所示图1b。 根据[24]提取的特征应该被定义为满足以下标准:(a)它们需要恒定的时间;(b) 小的手势变化应该反映为对提取特征的小变化;(c)特征应具有语义意义。对于(a),上述提取的特征允许非常快速的特征提取,因为计算需要恒定的时间(即。,)每帧更新。符合标准(b)和(c),因为我们选择使用角度和位移相关特征,能够区分轻微的关节运动。此外,它们还包含关节执行手势的方式的良好语义表示,即作为一组相互连接但又不连续的点。 4.实验结果
4.1. 数据集
为了评估所提出的方法,我们构建了一个由10名用户(7名男性和3名女性)组成的真实数据集,这些用户都是22至36岁的人,身高从155厘米到190厘米不等。我们为双手定义了一组“滑动”(向上/向下/向内/向外滑动),从而产生了八种不同的手臂姿势。在“向上滑动”手势中,用户从双臂靠近臀部开始。然后,其中一只手臂垂直移动,手掌朝上,直到到达头部,然后返回。在“插入”手势中,用户开始时双臂紧贴臀部。然后,其中一只手臂垂直移动,手掌朝上,直到到达肩膀中心和臀部中心的大约中间。然后,它转向另一只手的方向,进行水平运动,手掌朝向它,直到它与连接肩膀中心和臀部中心的假想线对齐。然后,通过对角线运动,它返回到原来的位置。在图2我们展示了一系列RGB和骨骼帧,用于同一用户用右手执行的“刷入”和“刷上”手势。“向外滑动”和“向下滑动”以及左手手势可能很容易想到,因为它们与上述对称。请注意,手掌的方向并不重要,但是,用户被指示执行上述更改,以便生成的手势更加“自然” 用户坐在Kinect前面;他们的距离约为2米,以确保骨骼被提取出来。从与手势对应的每个序列中,我们提取RGB-D原始数据和骨骼数据。请注意,RGB-D数据仅用于可视化目的,因为提议的方法仅依赖于骨骼数据。我们首先向用户演示了这些手势,以便他们在手势收集过程之前变得熟悉。在这个过程中,我们要求所有用户执行每个手势至少10次,然后我们手动清理数据集,让用户决定在他们觉得执行错误时“删除”一些已执行的手势。其中一名用户“调皮捣蛋”;他被要求在数据集生成过程中引入错误,因为我们想观察这些错误的影响。超过50%的手势都是故意做出的,而不是按照指示的正确方式做出的(例如,不完整、非常快/很慢、执行错误等)。该过程总共导致820个手势,其中约7.5%是上述用户的恶作剧行为的结果。请注意,除了恶作剧的用户外,没有一个用户有意伤害实验,他被明确指示这样做。
为了处理每个手势前后的“噪音模式”,并避免昂贵的时间分割步骤,用户配备了一个切换按钮,当按下该按钮时,相应地初始化/结束手势的录制。我们通过测试5-10次,让每个用户熟悉这个过程。通过这种方式,我们能够将手势与其他动作隔离开来。对于每个手势,我们记录了相关的骨骼数据并提取了中描述的特征集第3.2节这些手势中涉及的所有关节,即肘部、手腕和手。 4.2. 实验
我们已经对一组广泛使用的分类器进行了实验,这些分类器来自Scikit-learn工具箱[26]:(a)支持向量机[27]线性(LSVM)和非线性(RBFSVM,即具有径向基函数核);(b) k-最近邻分类[28]; (c) 朴素贝叶斯(NB)[29]; (d) 二次判别分析[30]; (e) 线性判别分析[30]; (f) 决策树(DT)[31]; (g) 随机森林(RF)分类器[32]; (h) 极随机树[33](它们是使用每个特征的随机阈值进行训练的集合,虽然倾向于生成更复杂的树,但需要的训练时间更少);(i) AdaBoost公司[34]使用DT(ABDT)和ET(ABDT)分类器。 为了对提出的方法进行实验评估,我们进行了两系列广泛的实验。第一个实验的目的是调查一组已知用户的性能。换句话说,我们将学习方法应用于一组“封闭”的用户,因此我们能够使用来自所有用户的训练和测试示例手势(当然,示例手势可能不会出现在两组中)。第二个实验的目的是调查一组未知用户的性能,即训练和测试集由不同用户的手势样本组成。通过这种方式,我们旨在研究我们的方法的泛化。实验是使用scikit-learn API进行的[26]. 在每个实验中,分类器都使用最佳参数值集进行训练,该参数值集是通过交叉验证确定的。对于第一个实验,我们使用分层K折交叉验证程序评估了上述算法(). 相应结果如所示图3,而最佳参数设置在表3我们可以观察到,ET分类器在RF之后取得了最佳性能。这表明集成树打包方法对于在由我们的特征构建的特征空间中分离样本是最佳的。尽管如此,其余分类器仍具有足够的性能,这给了我们权衡的灵活性(例如,计算复杂性的分类准确性)。 对于我们的第二个实验,我们选择了第一个实验中最准确的方法,即ET。我们对由1到9个用户组成的训练集进行了实验,而其余的样本则保留用于构建测试集。由于我们没有很好的启发式方法来在训练集和测试集中分割用户,因此我们考虑了每一种可能的组合,并用训练集中给定数量的用户计算了每个组合的平均准确度。这个实验有两个目标:(a)估计我们的方法对看不见的用户的泛化能力;以及(b)调查哪一个是最小用户数,以便在实际应用中获得可用的结果。
我们开始了这一系列的实验,使用了“留一个”(用户)的情况。对于这个实验,我们为测试集保留了一个用户的样本,同时在其他用户的样本上训练算法。在表4我们看到了每个未知用户的手势分类得分。我们列出了每个手势的详细评分和平均值。 在下一个实验中,我们计算了训练集中用户数的平均分类精度。在表4我们可以观察到,正如预期的那样,淘气的用户的分类分数要低得多,我们重复了这个实验,让这个用户完全从数据集中过滤掉。两个实验的结果在图4正如预期的那样,在没有恶意用户的情况下,系统的整体准确性要高得多,但由于我们包含了更多的用户,上述情况下的性能差异有所下降。值得注意的是,我们只使用了3-4个用户就能够训练出具有足够性能的分类器。在图5和图6我们分别绘制了每个手势的平均分类准确度,并将其作为训练中使用的用户数的函数,这些用户包括调皮的用户和不包括调皮用户的用户。此信息可用于更有效地设计自然用户界面(NUI),例如,通过将识别率较高的手势分配给最常见的操作。 最后,由于所提出方法的最终目标是实时识别手势,我们使用不同的体系结构进行了一系列实验,考虑到分类器可能(a)在功能强大的桌面处理器上运行,(b)在资源有限的系统上运行,如Raspberry Pi。我们构建了一个基准,其中将数据集的作为测试数据。我们对测试数据中的每个样本进行了1000次分类,并计算了每个分类器对样本所需的平均时间。结果如所示图7我们可以观察到,最准确的分类器,即ET和RF,比其他分类器慢得多,在桌面系统上的分类时间约为100 ms,在覆盆子Pi 2上的分类速度约为300 ms。然而,我们认为,尽管这些分类时间比其他算法慢,但ET分类器仍然可以在实时场景中使用,而不会影响用户体验。 4.3. 与最新技术的比较
为了评估所提方法的效率,我们使用MSR动作数据集进行了比较[35]. 该数据集包含20个手势,由10名受试者执行,每个动作执行2-3次,并使用与Kinect类似的深度传感器进行捕获。我们与李等人的工作进行了比较[35],它们是数据集的作者。我们还将其与Miranda等人的上述工作进行了比较[4],仅报告了测试III的结果表5根据建议的评估程序,对三个不同的数据集(即AS1、AS2和AS3)进行了三项测试,即测试I、II和III。在测试一和测试二中,所有受试者的样本都用于训练和测试(分别为1/3–2/3和1/2–1/2),而在测试三中,一半受试者用于训练,剩下的用于测试。我们可以观察到,我们的方法在使用AS3数据集时表现很好,在使用AS1时取得了令人满意的结果,而在使用AS2时,其性能下降。这是由于每个数据集中涉及的手势的复杂性。AS3由更简单的手势组成,这些手势更接近于我们在数据集中使用的手势,而AS2则由更复杂、更精细的手势组成。这些手势无法通过使用聚合特征进行一致和准确的识别。此外,AS1位于中间。我们还必须注意,我们的方法在测试III上表现良好,该测试评估了看不见的用户的性能,这是设计NUI时的一个主要问题。实验表明,我们的方法优于Li等人的方法[35]在AS1和AS3两者中并且平均而言。然而,Li等人的方法在测试I和II中取得了更好的结果,主要是因为我们的方法在AS2中表现最差。当然,由于在测试三评估中只考虑看不见的对象,我们觉得我们的方法与这两种方法相比具有优越性[35]而且[4]是MSR数据集评估的最显著结果。 我们还对[7],也用于评估[三,9]. 该数据集包含与我们的数据集相似的手势,与MSR数据集的手势相比,这些手势要简单得多。相应结果如所示表6可以看出,通过识别所有示例,我们的方法表现出了出色的性能。终于到了表7我们将我们的系统与[36]. 该数据集由与我们相似的手势组成,并被分为三个子集:RotationDB、RelaxedDB和Rotation/RelaxedDB。对于第一个子集,用户通过相对于摄影机的位置插入旋转变形。对于第二个子集,用户以一种更轻松的方式执行手势,插入比手势需要更多的关节运动(例如,在执行刷子时搔搔头)。第三个子集包含两种类型的失真。我们可以观察到,我们的系统优于[36]对于这两种类型的注入畸变。最后,我们使用自己的数据集和Mathe等人的深度学习方法进行了比较[18]它使用卷积神经网络(CNN)。本案例的结果见表8可以看出,所提议的基于特征的方法显示了准确性,与CNN相比略有提高。请注意,在每种情况下,都遵循了所用数据集的评估协议,以确保研究工作之间的公平比较。 5.结论与讨论
在本文中,我们提出了一种旨在实时识别一组简单手势的方法。我们提出了一组从骨骼关节的三维位置提取的新特征,并使用几种著名的机器学习方法对其进行了评估。我们还介绍了一个由RGB、深度和骨骼数据组成的数据集,用于几种手势。
我们的方法是基于以下假设进行评估的:(a)一组有限的已知用户可以使用手势驱动的NUI,即训练集和测试集都将使用所有用户的手势示例构建;和(b)未知(以前看不到的)用户,即训练和测试集将不会有普通用户。实验结果表明,当使用ET进行分类时,我们的方法能够获得令人满意的结果,优于最先进的方法。此外,我们调查了恶作剧用户的影响,即(有意或无意)未能成功模仿示例手势的用户。我们表明,通过对这些用户的数据集进行清理,我们能够显著提高准确性。最后,我们比较了不同CPU结构下训练分类器的预测时间。
在表9我们总结了第2节可以观察到,所包含的大多数研究工作并没有提出关节的一组特征;相反,它们使用关节坐标和许多情况下的启发式,这限制了它们扩展到其他手势的能力。此外,在大多数情况下进行的评估较差,大多数情况下仅限于3-5名受试者。使用自定义数据集和非公开数据集可实现高准确率。另一方面,我们提出了一种可扩展的方法,该方法使用特征,不依赖于启发式,并使用更大的用户集进行评估。 未来的工作将侧重于通过添加更复杂的手势和现有手势的更多示例来扩展手势集。我们还致力于研究更多的机器学习方法,并向更多的用户扩展我们的数据集。我们还打算在智能会议室的背景下使用这种方法[37]在物联网生态系统中开发[38]. 其中,它可以作为控制室内设备(例如HVAC、灯光、投影仪等)的替代手段,并将转换为公开的web服务。当然,在这种情况下,需要对执行的手臂手势进行时间分割或连续识别。这样的分割可以通过查找参与者的静态位置来执行[39],通过应用由连续视频帧组成的滑动窗口卷[40],甚至通过使用聚类和关键帧提取以完全无监督的方式[41]. 我们应该注意到,为了避免上述时间分割的计算昂贵的任务,手势识别的初始化可能会被触发,例如,使用预定义的姿势,这也应作为选择要控制的设备的手段。我们计划进行定量和定性评估,也就是说,在智能环境中使用这种方法时,还要评估用户体验。最后,在完成上述功能后,我们计划由实际用户进行评估。我们计划调查的问题之一是,对于无法成功执行(某些)预定义手势的用户,即患有限制、残疾或帕金森氏症等疾病的人,所提议的方法的有效性。
最后,我们应该注意到,手势识别领域的研究已经转向使用原始RGB-D数据的深度学习方法,例如,在Zhang等人的工作中[19]和复杂的深层网络架构。然而,尽管这些方法能够实现更高的准确率,通常不需要手工制作的特征,但它们通常会生成需要大量数据进行训练的更复杂模型。此外,此类模型可能无法使用低端硬件(如Raspberry Pi)实时运行推断,这在多个物联网项目中经常采用。另一方面,如果模型运行在功能更强大的服务器上,则原始数据流的网络开销可能是一个瓶颈。因此,我们认为在未来几年内,结合传统机器学习方法的手工特征仍将用于数据或计算受限的应用程序。