李 浩,杨森林,张晓丽
(1.西安文理学院 西安市物联网应用工程实验室,陕西 西安 710065;2.西安文理学院 陕西省表面工程与再制造重点实验室,陕西 西安 710065)
准确的火车驾驶员手势识别是智能交通管理系统的重要组成部分,基于计算机视觉的手势识别属于非接触式的手势采集方式,该类方法设备成本低,且能更好的满足人机交互所需的自然度和舒适度,是目前研究的一个热点[1]。
动态手势相比于静态手势更具直观性,适应于灵活的人机交互应用。由于其种类多、特征复杂、变化快,因而导致动态手势识别较为困难[2]。文献[3]提出了一种利用手部骨架变换的识别方法,对二值化的图像进行距离变换,以生成具有骨架抽取效果的手部区域图,连接中心点获得手部骨架,从而对手势进行识别分类,识别正确率几乎100 %,但方法仅适应于单一背景下的手势检测,缺少对于复杂背景条件下的识别检测,也无法满足动态手势中手掌手指的精确识别。文献[4]利用Kinect传感器开发了一种非侵入式实时手势识别系统,通过OpenNI和NITE将Kinect获取的图像转换为具有15个节点的刚性骨架,并采用隐马尔可夫模型(hidden Markov model,HMM)对手势进行识别,对训练集内的对象识别准确率达到85 %,而非训练集内的对象识别准确率达到73 %。然而,该方法仅能够实现对左手手势和人体躯干的识别,缺少对手掌骨骼的识别[4]。文献[5]利用Kinect对手部算术(阿拉伯数字及运算符号)及石头剪刀布进行识别,通过深度阈值分割获得手部区域精确图像,并使用指地移动距离(finger Earth moving distance,FEMD)度量测量不同手型之间的差异性来进行识别分类,最高识别率达到了93.9 %。但在手势识别过程中,测试者手部佩戴的黑色腕带对识别结果将产生一定影响,未佩戴腕带情况下的识别准确度较低[5]。目前大多数方法都是针对普通场景下的静态通用手势识别,而对于某些特定场景下的动态专业手势识别效果不佳,无法对这些场景手势进行有效的判断和识别。
基于以上问题,本文采用Kinect获取人体骨骼节点信息,设定距离差阈值确定近似手掌节点位置,得到手势分割图像,采用支持向量机(SVM)进行手势识别和评价,并结合骨骼节点的运动序列,采用DTW算法对火车驾驶员手臂动作进行识别检测,最终得到有效的手势信息。
手势图像的获取容易受到外界光照和复杂背景的影响,选择合适的手势采集设备尤为重要[6]。本文采用Kinect传感器将手掌姿势深度信息从复杂的背景中分割出来。Kinect可以检测出环境中物体距离摄像头之间的距离,在手势人机交互中,手掌总是在摄像头的前方,因此通过选取合适的深度距离阈值可以将手掌姿势信息从背景中进行分离[7]。然而,距离阈值的选取非常困难,阈值选择不合适容易导致分割出的手势包含手臂,或者当手势距离身体较近时根本无法分割出手掌信息。为了克服单纯的阈值选择带来的缺点,本文采用结合人体骨骼节点信息和深度图像信息的手势检测方法,采用Kinect获取人体骨骼节点数据,找出手掌节点的位置,在手掌节点范围内搜索手势,当整个手掌上的所有像素点离摄像头较近时,再设定一个距离差阈值就可以将手势信息从背景中分离,方法流程如图1所示。
图1 手势图像分割方法示意
由于Kinect跟踪人体骨骼节点时容易发生节点漂移现象,此时手掌节点到Kinect的距离并不是实际手掌节点到Kinect的距离,在进行距离差阈值进行分割时会导致手势分割失败。为此,开发了一种近似的手掌节点位置确定方法,以手掌节点为圆心,手掌节点到手腕节点之间的距离r为半径的圆内对所有白色像素点的位置坐标求均值,以均值代表手掌节点的位置坐标因此手掌节点的(xp,yp)位置为
(1)
式中T为圆内白色像素点的个数xi表示第i个白色像素点的横坐标,yi为第i个白色像素点的纵坐标。在找出手掌节点的位置后,通过判断手掌节点和周围区域像素点到Kinect之间的距离差将手势分割出来。当找到手掌节点后,需要在手掌节点周围搜寻手势像素点,为了防止因手掌节点发生漂移导致手势像素点搜寻出现偏差,在以手掌节点为中心的一个大的矩形区域内进行手势像素点搜寻,算法过程如下:
k=1,2,…,W×H
(2)
式中k为搜寻的次数,threshold为手掌节点与矩形区域内手势像素点到Kinect之间距离差的阈值,abs(dp-dij)为掌心节点与手势像素区域距离之差的绝对值,Sk为最终检测到的手势像素点集。
手势动作识别方法有很多种,比如神经网络、SVM、卷积神经网络(convolutional neural network,CNN)等,SVM对二分类处理效果明显,其训练集之外的数据能够做到预测准确、泛化错误率低和实时性能好,因此,本文采用SVM算法对分割后的手势图像进行识别并对手势规范性进行评价[8]。SVM分类结果为测试手势与标准手势之间的置信度,可以作为手掌手势规范的评价标准,如式(3)所示
(3)
手势动作识别流程图如图2所示。
图2 手掌手势识别流程框图
Kinect传感器获取图像深度数据以及驾驶员骨骼数据[9]。驾驶员完成一整套手势动作不仅包含手掌部分的手势,还包含手臂部分的动作,因此Kinect传感器获取的数据应包含手掌、手腕、手肘、肩、肩中心等若干个关键骨骼节点坐标数据[10]。驾驶员在做不同手势动作时,一般来说肩中心节点相对位置基本保持不变,设肩中心节点的坐标为Ps=(xs,ys,zs),剩余的手臂骨骼节点坐标为Pi=(xi,yi,zi),i=1,2,3,4,因此节点Pi和肩中心节点Ps之间的距离为
i=1,2,3,4
(4)
(5)
根据得出的DTW距离对输入的动态手势进行识别并评价。驾驶员动态手势识别结果与标准动态手势库中DTW距离最小的样本类别一致,表示为
(6)
式中Xi为标准动态手势样本,Y为输入的动态手势,i为动态手势样本类别,O为最终识别的动态手势类别。
手臂动态手势得分的度量方式为DTW距离,测试手势序列与标准手势样本序列越接近,DTW距离也就越小,手臂动态手势得分表示为
Parm=
(7)
式中Xi为标准动态手势序列,Y为测试手势序列,N为标准手势序列样本数目,α为标准手势序列样本之间的DTW距离平均值。
驾驶员手臂动作识别流程图如图3所示。
图3 驾驶员手臂动作识别流程框图
由于Kinect获取的骨骼特征点数据较粗糙,特征点少,难以精确描述相近或非标准手势之间的区别,选取4种区别较大的动态手势进行分析和建库[11]。同时,选取了手掌、手腕、手肘、肩、肩中心等18个3D特征点来分析手势变化,未考虑其它区域特征点对手势识别的影响,所建立的样本库包含不同光照、不同高度的4个人手掌握拳食指中指伸出、手掌握拳大拇指翘起、手掌握拳大拇指和小拇指伸出、手掌张开五指并拢4种动作,以及手臂抬起、手臂朝前、手臂手肘弯曲、手臂左右摆动4种手臂动作,如图5所示,每种动作100组数据,共25 600组,手势图像录制时在Kinect前方1.0~2.5 m转动范围为左右±30°,上下±90°,样本库中每张手势图像包含144个特征点的3D坐标,8个手部运动单元AUs数值以及4个手部几何特征角度。实验设备为i7 2.6 GHz 处理器、16 GB RAM的图形工作站和Kinect 2.0传感器,软件开发平台为VS2008、OpenCV、Kinect for Windows SDK2.0。选择90组数据作为训练集,10组作为测试样本。测试时Kinect深度传感器距离地面1.0 m,传感器与人的距离在1.0~2.5 m范围内。
手势检测流程如图5所示首先处理Kinect传感器采集到的深度图像,一方面在手掌区域内进行像素点搜寻,另一方面采用人体骨骼节点图像判断掌心节点位置,由于Kinect检测骨骼节点精度较低,节点容易发生漂移,因此为了避免手掌检测的不完全,矩形搜索区域的大小阈值设置不能过小,实验中,当t≥3,即矩形搜索区域大小大于3倍的手掌节点和手腕节点之间的距离,此时手势搜索效果较为理想。手掌节点与手势像素区域距离差阈值(threshold)的设置对于手势分割的结果同样重要,当threshold设置过小,手势分割会不完整;而当threshold设置过大,则容易将手腕等部分分离[12]。实验结果表明,当threshold∈(15,25)mm时,手势检测效果较为理想。图4为不同threshold值时,手势检测与分割效果。
图4 手势检测与分割效果
手掌区域动作通常包含4种,手掌握拳食指中指伸出(a)、手掌握拳大拇指翘起(b)、手掌握拳大拇指和小拇指伸出(c)、手掌张开五指并拢(d)。
当火车驾驶员做手势动作时,手掌通常会发生相应的形变和旋转,因此,在进行手势识别时,需要对检测到的手势进行大小归一化,为了减小序列中手势旋转问题对识别效果的影响,在离线训练SVM分类器时,将旋转样本参与到分类器训练中,增加分类器的鲁棒性,表1为火车驾驶员在做抬手动作时4种手掌手势分类识别率。
表1 手掌手势识别效果
由表1可知,采用文中所提出方法对手掌和手势进行检测,检测率较高,首先通过确定手掌掌心节点,在掌心节点周围搜寻手势像素点,可以有效避免漏检情况,通过设定手势周围像素与掌心像素到Kinect之间的距离差阈值,可以降低算法检测到手腕部分的可能性。在识别方面,利用SVM算法训练多个手势序列中手掌手势图像,减小因图像的旋转而导致的错误识别,火车驾驶员4种手掌手势平均识别率可达88 %以上。对于手势得分,手势序列识别置信度之和的平均值为最终手势得分,从而可以有效地判断火车驾驶员手掌手势的规范程度。
文中选取手臂抬起、手臂向前、手臂手肘弯曲、手臂左右摆动共4种动态手势,识别率与得分如表2所示。
表2 手臂动作识别效果数据表
表2为本文手势识别算法对于4种火车驾驶员手臂动作识别效果,由表中可知,4种常用的动态手势平均识别率可达85 %以上,本文采用的DTW算法非常适合于火车驾驶员动态手臂动作识别。手臂动作得分的计算通过分析测试手势序列和样本库中标准手势序列之间的DTW距离的关系,可以有效改进算法的识别度和准确度。
表3为经典的HMM算法和本文方法对于火车驾驶员4种手臂动态手势识别效果对比,由表中可知,平均识别率DTW算法高于HMM算法4.3 %,由于驾驶员动态手势序列长度时时刻刻都在发生变化,DTW算法通过动态规划方法可以解决不同长度运动序列的匹配问题。因此,相对于HMM算法来说,DTW算法更适合于处理火车驾驶员动态手臂动作识别问题。
表3 HMM算法与DTW算法效果对比 %
图5中左侧显示的是手臂动态动作识别结果与得分,右侧显示的是手掌动态手势识别结果与得分。通过多次测试,该手势识别与评价系统不仅结果可靠,运行稳定,而且运行速度可达25帧/s,非常适合于火车驾驶员手势识别与规范性评价。
图5 动态手势识别效果
本文论述了一种能够动识别动态手势的方法,该方法通过将人体骨骼节点信息与深度图像信息相结合的方法将手掌位置信息提取,并将手掌图像信息从背景中分离出来,采用SVM算法对分割后的手势图像进行识别,最终通过手臂骨骼节点的运动序列,利用DTW算法进行动态手势最优匹配。实验数据表明了该方法在处理动态手势识别中的有效性。
文中选取了4种动态手势进行识别,同时选取了手掌、手腕、手肘、肩、肩中心等18个3D特征点用来分析手势变化,未考虑其它区域特征点对手势识别的影响。在下一步的工作中,将考虑如何找出不同手势特征点之间的详细特征描述,对更多动态进行识别。