徐春凤,王蒙蒙,翟宏宇,胡汉平
(长春理工大学 计算机科学技术学院,长春 130022)
人机交互正从计算机为中心逐步转移到以人为中心,人与机器的交互可以表示成一个多维矢量,例如用户通过鼠标、键盘和语音等方式实现和系统的交互。近年来,随着计算机的软硬件水平的不断提高,以及各种传感器技术的逐渐成熟,带动了新一代的人机交互技术的飞速发展,越来越多的研究方向着手于该研究领域。任天堂的Wii-Cotroller遥控器,通过内置的加速度传感器感知人手的运动,Schlömer T[1]等人将其应用于手势识别,通过Wii-Cotroller获取用户的手势并用隐马尔科夫模型对手势进行识别。C.Yang等人[2]使用Kinect深度数据来识别手势应用到媒体播放器程序。他们使用隐马尔科夫模型(HMM)分类器识别手势。Li Y[3]利用Kinect的深度信息定位人手、依据轮廓和凸凹点检测确定五个手指位置并通过计算三点的夹角特征识别静态手势。王劲东等人[4]利用Kinect提出了基于深度信息的人手定位,然后在手部区域的轮廓上根据曲率来检测类指尖点,结合凸包计算排除凹点和手臂点,最后根据手指的两侧接近平行的特性排除弯曲的手指或者非手指,最终检测出有效的指尖。然而,以上基于Kinect的深度信息获取指尖的位置的步骤较繁琐,本文借助于现有的NITE库函数简化手部提取步骤,进而简化了指尖获取的整个步骤,而且精确度高。
Kinect传感器可以同时获取RGB和深度图像数据,能够实时的对全身骨骼进行追踪,且识别一系列的动作。图1为Kinect外观图。
图1 Kinect外观图
如图1所示,Kinect有三个镜头,最左边镜头为红外线发射器,中间的镜头为RGB彩色摄像头,最右边镜头是红外线CMOS摄像头所构成的3D深度传感器。Kinect也内建阵列式麦克风,由四个麦克风同时采集声音,比对后消除杂音,进而进行语音识别和声源定位。Kinect具有感知世界的CMOS红外传感器,它收集视野范围内的每一点,并形成一幅代表周围环境的景深图像。传感器以每秒30帧的速度生成深度图像流,实时重现周围环境[5]。在人机交互中,能够实时且准确的获取手势跟踪,可以给用户带来更好的人机交互体验。
实验中,人坐在电脑屏幕前,手距离Kinect大约1米远,Kinect对准人体的左肩,角度向上倾斜便于完整的采集到手部信息。对Kinect的深度图像中的手的细分是一个复杂的问题,特别是在一般情况下。因此在本研究中,为了简化问题,调用了NITE库函数来提取手,掌心朝向Kinect并垂直于桌面,手指之间分开,并确保手在身体任何部位的最前面。如下图2所示:
图2 Kinect摆放位置及手的姿势
利用Kinect获取指尖坐标的流程图如下图3所示。在进行指尖获取前,必须要先将手提取出来,这样方便更准确的进行指尖的定位。本文利用了NITE库函数来精确的将手从身体的其他部分中分离出来,然后利用手势轮廓和凸包进行计算,从而识别指尖。
图3 Kinect获取指尖流程图
NITE库是PrimeSense针对OpenNI这个深度感应器程式开发Framework所推出的一个中间件,其主要作用是提供人体骨架分析与跟踪和手的跟踪等。NITE中的手势探测识别主要是由HandTracker类提供的,该类提供了手部位置的跟踪,NITE并不只针对用户的手势识别,而是针对整个界面帧信息进行分析,然后找到符合的手势,它探测识别的手势只有三种,分别是:GESTURE_WAVE(挥手)、GESTURE_CLICK(手掌前推再缩回来)和GESTURE_HAND_RAISE(手举起)。但是该API并没有提供自制的手势探测。通过调用NiteCAPI.h底层函数niteInitializeHandTrackerByDevice()来开始手势跟踪。在探测手势符合NITE中的三种手势之一后,则开始定位获取手的手心坐标并跟踪。
实验中,先通过Kinect捕捉到人体的轮廓,然后设置触发手部追踪的手势(如挥手、手掌前推再缩回来),手的动作不能过慢或过快,直到检测到手之后,系统就会调用NITE库来返回掌心的坐标。设返回的掌心坐标的y值为m,那么分割手的上下门限分别设为m+Δ和m-Δ,根据实际测试,取7cm<Δ<14cm为宜,根据上下门限截取的图像区域H,即可准确的将手部提取出来。提取的手部图像如下图4所示。
图4 提取的手的深度图像
(1)将提取的图像区域H进行联合双边滤波[6]后选择合适的阈值T进行二值化:
(2)应用Opencv库中的findContours()函数来检索二值化后的图像Ht(x,y)中的所有特征点的轮廓Ci,每一个轮廓都是一个多边形,且由像素序列组成,表达公式(2)如下:
(3)利用approxPolyDP函数来对指定的点集进行逼近,找出轮廓的多边形拟合曲线,该函数采用的是道格拉斯-普克(Douglas-Peucker)算法[7]。该算法也以Douglas-Peucker算法和迭代终点拟合算法为名。算法的目的是给出由线段组成的曲线,来找到具有较少点的相似曲线。算法的基本思路是:对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax,用dmax与限差D相比:若dmax<D,这条曲线上的中间点全部舍去;若dmax≥D,保留dmax对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法。
(4)利用convexHull()函数检索上步骤最大面积值的轮廓Cmax的凸包壳hull,画出凸包点,然后将其作为convexityDefects()函数的参数来检索轮廓Cmax中的凸缺陷di。缺陷中离凸包线距离最远的点的坐标即为凸缺陷点,凸缺陷被定义为相对于其凸包的轮廓凹形的部分。
根据以上步骤,对提取的手的深度图绘制出手的轮廓及凸包壳如下图5所示。
图5 手的轮廓及凸包壳
(5)定位轮廓中与手部有关的点,在该点的周围提取出满足一定要求的区域,对该区域进行滤波后得到的区域就是手部了。本文采用基于曲率特征的轮廓分析方法对指尖进行识别。然后利用凸包和凹陷的数学几何方法,画出手指和手指凹陷处的点,以及手的轮廓线,并在图像中显示出来。如下图6所示。
图6 凸缺陷点及指尖点
(6)指尖识别,根据输出的点像素坐标,如果手位于图像的右(左)半部分,则像素列索引的递增(递减)次序对指尖像素Ti进行排序。从而去除凹陷点,保留指尖点。
实验过程中,在复杂的背景下,实验环境如图7所示,通过对不同的手势进行识别,能够实时的对手的指尖进行准确定位。不同手势的检测效果如下图8所示。
图7 实验环境
图8 不同情况下的指尖定位结果
本文分别针对15种不同手势和背景下进行了实验,每种情况下分别做80次采集。实验结果,在复杂的环境背景下,15种情况下的指尖识别率见表1,通过图8和表1可以看出,本文提出的检测指尖的算法平均准确率可以达到80%,针对不同手势的指尖都可以准确检测出来,具有较好的鲁棒性。
从图8和表1中的5和6、10和11可以看出,当人脸出现在手的后方时,仍然能够准确的定位到手的指尖。该结果证明当出现与手同肤色的物体时,手仍然能够被分离出来,解决了普通相机手势识别时出现同肤色物体无法准确提取人手的问题。从12、13、14和15几种情况来看,当手指发生并拢时指尖检测的误差变大,当手指完全并拢时,如第15个手势,指尖完全检测出来的概率为0,另外第1个手势手指误判率也较高,对于识别失败的情况,主要原因有:首先是Kinect体感设备返回的深度图时而会出现破碎的情况,尤其是在手指见并拢时,指尖连结成一片,导致凸包点的识别出现错误,最终致使识别结果出错;其次,由于手指的弯曲程度不同,导致提取出的手形轮廓容易把未完全弯曲的手指错判为指尖,在今后的工作中还将对指尖识别算法进一步改进。
表1 15种情况下的指尖识别率
本文利用了NITE库函数定位手的位置,能够快速的将手从复杂的背景中提取出来。然后利用道格拉斯-普克算法得到手的轮廓曲线。另外,本文使用轮廓分析法从凸包点中识别出指尖,相较于模板匹配法,该方法具有更高的准确性。最后,本文通过15个不同的情况来鉴别该方法的指尖识别的准确率,实验表明,该方法指尖的检测识别率较高。在今后的工作中,将根据指尖的位置来进行各种手势的判断和改进,增加对更多其他手势的识别。
[1]Schlömer T,Poppinga B,Henze N,et.al.Gesture recognition with aWiicontroller[C].Proceedingsof the 2nd internationalconference on Tangible and embedded interaction.ACM,2008.
[2]Yang C,Jang Y,Beh J,et al.Gesture recognition using depth-based hand tracking for contactless controller application[C].IEEE International Conference on Consumer Electronics,2012:297-298.
[3]LiY.Hand gesturerecognition using Kinect[C].IEEE 3rd InternationalConference on Computer Science and Automation Engineering,2012(5):196-199.
[4]王劲东,武频.一种基于Kinect的指尖检测算法[J].计算机技术与发展,2016,26(7):14-18.
[5]袁方剑,王毅轩,王毅刚,等.基于Kinect深度图像的指尖识别及手势判定[J].电子科技,2014,27(8):6-10.
[6]李华,张超,权巍,等.一种基于Kinect深度图的人像自动抠像算法[J].长春理工大学学报:自然科学版,2016,39(6):81-84.
[7]孙浩鹏,李杨.道格拉斯-普客算法在数据手套数据优化中的应用[J].吉林工程技术师范学院学报,2013,29(10):79-81.