基于OpenCV 的多特征实时手势识别
2015-03-06孙红,廖蕾
孙 红,廖 蕾
(上海理工大学 光电信息与计算机工程学院,上海 200093)
随着计算机技术的不断发展和普及,与计算机的交互方式也不断在变化,而符合人际交流习惯的人机交互技术,建立和谐自然的人机交互环境成为当前的发展趋势[1]。手势作为一种自然直观、表达意义丰富的肢体语言,越来越多地被运用到人机交互技术。手势识别技术也因此成为了当前人机交互研究的热点。
早期的手势识别要求用户佩戴特殊的数据手套[2],这种方法虽能精确的识别手势,但掩盖了手势自然的表达方式,且设备昂贵。为此,基于视觉的手势识别应运而生。基于视觉的手势识别输入简单,对设备要求低,更加自然直接。在此基础上,有学者提出了众多的识别方法。张良国[3]等人首次利用Hausdorff 距离模板匹配的思想,实现了基于单目视觉的30 个手指字母的手势识别,但没有考虑Model 的旋转与缩放;黄国范[4]等人采用模板匹配的方法,用改进后的Hu 矩作为特征向量进行测试样本与模板之间的相似性度量,但识别率仍然差强人意;杨波等人[5]提取空间相对密度和指节相对间距特征的手势空间分布特征,计算总的相似性来识别手势,虽引入随机采样机制提高了识别速度,但只有少数手势识别率高;林水强[6]等人通过分析手势的几何特征计算特征参数,采用决策树分类方法进行手势识别,该方法识别率达到94%以上,但能识别的手势种类不多。
针对上述问题,本文给出一种基于手势表观特征的手势识别方法。采用HSV 颜色空间肤色分割算法分割出肤色区域,然后根据手势的几何特征排除非手势区域;继而检测指尖,结合指尖个数,手指间角度特征和轮廓长宽比特征来进行手势识别。实验结果表明,本文算法在保证旋转、平移和缩放的不变性的前提下,既能识别较多的手势,又有较高的识别率。
1 手势分割及指尖检测
1.1 手势分割
由于HSV(Hue-Saturation-Value)色彩空间是从人的视觉系统出发,用色调、饱和度和亮度来描述色彩,比RGB 空间更符合人的视觉特性[7]。本文采用肤色模型,把获取的图像从RGB 空间转化到HSV 空间,肤色在HSV 空间的取值范围为Hue∈[30,45],Saturation∈[35,200],Value∈[20,255],由此转换可得到肤色二值图。再运用去噪、膨胀腐蚀等技术获得最终的分割区域,肤色分割如图1(a)所示。
按照文献[8]的方法:排除小面积区域,计算肤色的高度(height)及宽度(width)的比例K,若满足0.7≤K≤3.0,即为手势区域。至此,可得到最终的手势区域。对于得到的二值图像,由以下几个条件去除干扰的肤色区域,进而得到最终的手势分割结果:
(1)去除肤色区域面积<400 像素的区域。
(2)为排除某些满足条件(1)的狭长区域,设定肤色区域的高和宽必须大于20 像素。
(3)肤色区域的重心在肤色区域内部,既重心在手掌上。
(4)计算肤色的高度(height)及宽度(width)的比例K,若满足0.7≤K≤3.0,即为有意义的手势区域。
本文识别出手势区域之后,将手势区域分离出来,并画出手势轮廓,手势分割如图1(b)所示。
图1 肤色分割图和手势分割图
1.2 Graham scan 凸包算法
在做手势时,手指经常远离手掌中心,且指尖离得最远。根据这一情况建立数学模型。因为凸包包含指尖的点,基于Graham scan 凸包算法找到手型外部的凸包[9]。具体过程如下:
(1)在所有点中选取y 坐标最小的一点H,当作基点。如果存在多个点的y 坐标都为最小值,则选取x坐标最小的一点。坐标相同的点应排除。然后按照其他各点p 和基点构成的向量<H,p >与x 轴的夹角进行排序,夹角由大至小进行顺时针扫描,反之则进行逆时针扫描。
(2)线段<H,K >一定在凸包上,接着加入C。假设线段<K,C >也在凸包上,因为就H,K,C 这3 点而言,其的凸包就是由此3 点所组成。但接下来加入D时会发现,线段<K,D >才会在凸包上,所以将线段<K,C >排除,C 点不可能是凸包。
(3)即当加入一点时,必须考虑到前面的线段是否会出现在凸包上。从基点开始,凸包上每条相临的线段的旋转方向应该一致,并与扫描的方向相反。如果发现新加的点使得新线段与上线段的旋转方向发生变化,则可判定上一点必然不在凸包上。
在图2 中,加入K 点时,由于线段<H,K >相对于<H,C >为顺时针旋转,所以C 点不在凸包上,应该删除,保留K 点。接着加入D 点,由于线段<K,D >相对<H,K >为逆时针旋转,故D 点保留。按照上述步骤进行扫描,直到点集中所有的点都遍历完成,即得到凸包。
图2 凸包示意图
1.3 指尖检测
提取到手的轮廓后,计算轮廓内接圆的中心坐标得到掌心。通过计算那些既在凸包上又在轮廓上的点来找到指尖[10]。
(1)初始化C 序列既为凸包上的点又是轮廓上的点的集合。
(2)遍历C 序列上的每个点p,取其左右m 和n点,分别计算它们到p 的矢量值
2 手势表观特征定义
通常情况下,图像特征的选取往往对识别结果的准确性有较大的影响,单一的特征一般会受环境的影响和其他因素的干扰。考虑到计算的复杂性和识别的实时性等因素,本文定义了4 种手势表观特征。图3列出了12 种常见的手势。
图3 12 种常见的手势
根据上文的方法得到指尖,指尖依次记为P1,P2,…,PN(N≤5);检测到的指尖个数记为N;通过测量得知,正常人5 指分开后,手指间的角度在10°180°~之间[11]。大拇指与食指间的角度为40°~90°,食指与中指、中指与无名指、无名指与小指的角度为10°~35°,大拇指与小指间的角度为95°~150°,这为本文的算法提供了依据。本文将指尖与掌心O 以直线连接,计算手指间的相对角度。计算相邻两个指尖与掌心的角度βN-1,即β1为P1和P2与掌心O 的夹角;β2为P2和P3与掌心O 的夹角;β3为P3和P4与掌心O 的夹角;β4为P4和P5与掌心O 的夹角。
本文定义4 个手势表观特征:指尖个数N;手势的最小外接矩形的长宽比K=L/W;相邻两个指尖与掌心的角度βN-1在40°~90°之间的个数N1、在10°~35°之间的个数N2。
3 手势分类与识别
根据以上4 个特征,可通过建立决策树来分类识别上述12 种常见的手势,其识别流程图如图4 所示。
图4 手势决策树图
首先根据所检测到的指尖的个数N 对12 种手势加以区分,当N=5 和N=0 时可分别分离手势5 和手势10;当N=1 时,手势1 和手势11 由于指尖只有一个,无法用角度特征区分,只能用K 加以区分。当K >时(σ 取1.8),能分离手势1;当N=2 时,手势7 的N1=1,而手势2 的N1≠1 且N2=1,故此能分离手势2和6;当N=3 时,食指与小指之间的角度范围在30°~105°之间,而大拇指和食指之间的角度在40°~90°所以根据N1来区分手势8 和手势9 有较的误差,所以本文根据N1≥1 来分离手势3,然后手势8 的N2=1,手势9 的N2≠1;当N=4 时,手势12 和手势4 根据N1≥1 与否来确定。至此,本文定义的12 种常见的手势均可识别,部分手势识别结果如图5 所示。
图5 部分手势识别结果
4 实验结果及分析
本文在Windows 环境下,借助计算机视觉库OpenCV 提供图像算法函数和微软Visual Studio 2010搭建开发平台,实现手势识别。实验在光照条件良好的环境下,由10 人分别在不同背景条件下对每种手势做10 次,并且每次都相对平面旋转一定得角度,手离摄像头的距离也在30 ~50 cm 不等,每种手势共计100次,表1 给出了12 种手势的识别结果及准确率。
表1 手势识别结果
由实验结果可知,识别手势10 的准确率为100%,手势1,2,5,6,7,9,11 的识别准确率均在94%以上,而手势3,手势4,手势8 和12 识别率偏低,主要是由于不同的人在这些手势上表达有所不同,不同的人每次做出的手势手指间的角度不同,过小则可能导致指尖的识别产生误差。
文献[5]综合手势的空间相对密度特征和指节相对间距特征来识别手势,多数手势识别率低。本文分别采用这两种方法对两方法均能识别的部分手势做了对比实验,结果如表2 所示,表明本文算法准确率较高。
表2 对比试验
5 结束语
本文实验在Windows7 操作系统,VS2010+OpenCV环境下完成。本文提出的基于手势表观特征的静态手势识别方法,利用凸包和轮廓检测指尖,结合指尖个数,手指角度特征和轮廓长宽比来分类,利用本方法成功地对本文定义的12 种手势进行了识别,通过多人在不同背景下做不同大小、角度的手势进行识别,结果表明该算法对平移、旋转以及缩放有鲁棒性,实时性好,识别率高且能识别的手势种类多。但仍有不足之处,如不能有效识别垂直旋转的手势,指间角度过小时影响指尖的检测精度等。因此,下一步的工作重点是继续完善该方法,提高指尖的检测精度,考虑增加双手的手势识别。
[1] Sushmita Mitra,Tinku Acharya.Gesture recognition:a survey[J].IEEE Transactions on Systems,Man,and Cybernet-ics-Part C:Applications and Reviews,2007,37(3):311-324.
[2] Frati V,Prattichizzo D.Using kinect for hand tracking and rendering in wearable haptics[C].Istanbul:World Haptics Conference(WHC),IEEE,2011:317-321.
[3] 张国良,吴江琴,高文,等.基于Hausdorff 距离的手势识别[J].中国图象图形学报,2002,7(11):1144-1150.
[4] 黄国范,李英.基于改进Hu 矩的字母手势识别[J].赤峰学院学报,2013,29(3):23-24.
[5] 杨波,宋晓娜,冯志全,等.复杂背景下基于空间分布特征的手势识别算法[J].计算机辅助设计与图形学报,2010,22(10):1841-1848.
[6] 林水强,吴亚东,陈永辉.基于几何特征的手势识别方法[J].计算机工程与设计,2014,35(2):636-640.
[7] 成琳,陈俊杰,相洁.图像颜色征提取技术的研究与应用[J].计算机工程与设计,2009,30(14):3451-3454.
[8] 翁汉良,战萌伟.基于视觉的多特征手势识别[J].计算机工程与科学,2012,34(2):123-127.
[9] Adams W,Belotti P,Shen R.Convex hull characterization of lexicographic orderings[J].Writing,2013,23(6):719-726.
[10]Zhang Binjue,Zhao Liaoyin,Wang Yixuan.Fingeritip detection and gesture recognition based on kinectdepth data[J].IEEE Trasactions on Computer Science and Technology,2014,3(1):9-14.
[11]Stenger B.Template-based hand pose recognition using multiple cues[C].Haikou:Proceeding of ACCV'06,2006:551-560.