基于嵌入式系统实时交互的手势识别方法
摘要: 提出了一种在单摄像头条件下基于嵌入式系统的手势识别方法。通过拟合手势图的外接多边形,找出其所对应的手势缺陷图,并建立手势与手势缺陷图的一一映射,利用手势缺陷图的特征来匹配和识别不同的手势。算法还将手势的跟踪与识别有机地统一起来,通过预测下一帧中手势出现的粗略位置大大降低识别步骤的计算量。该算法在实际应用的嵌入式平台下,能快速、准确地实现手势的识别,能够满足实时人机交互的要求。
提出了一种在单摄像头条件下基于嵌入式系统的手势识别方法。通过拟合手势图的外接多边形,找出其所对应的手势缺陷图,并建立手势与手势缺陷图的一一映射,利用手势缺陷图的特征来匹配和识别不同的手势。算法还将手势的跟踪与识别有机地统一起来,通过预测下一帧中手势出现的粗略位置大大降低识别步骤的计算量。该算法在实际应用的嵌入式平台下,能快速、准确地实现手势的识别,能够满足实时人机交互的要求。
0 引言
手势交互是人机交互领域近年来的研究热点,特别是利用摄像头来实现对手势信息的非接触性捕获,并由计算机进行分析理解,然后完成交互任务,由于其自然和符合人自身行为习惯的交互方式而备受青睐。手势的形态在交互过程中的变化以及周围环境的干扰都会影响到手势的识别和理解,因此手势识别是计算机视觉和人机交互领域中的重要问题,如何将这种交互方式更好地在嵌入式系统中应用更是一个富有挑战性的工作。
基于视觉的手势识别过程通常分为四个步骤,即分割、表示、识别和应用。手势识别算法的关键和难点是分割和识别两个步骤,现有算法在这两个步骤通常都有计算量大、时间复杂度高的特点,而嵌入式设备又受到资源和计算能力的限制,要能够做到基于嵌入式系统的实时手势交互,就有必要对传统的手势识别算法进行改进。
本文在单摄像头条件下,在手势跟踪的相关工作基础上,提出了一种基于手势结构特征的手势识别方法,使之满足嵌入式系统中的人机交互对实时性、准确性及连续性的要求。本文使用了计算量小且性能高的Camshift 算法作为跟踪算法,并将其跟踪结果作为手势识别的参考因子,这样可以大大减少手势识别的工作量; 手势的识别则采用了手势跟踪结果与手势形态结构特征相结合的处理方法。将手势跟踪的结果作为参考因子,可以除去图像中与手势无关的背景图像,利用手势形态结构特征使得手势识别工作不是对手势边缘的每个点进行处理,转而对手势的外接多边形进行处理。这两种方法相结合不仅使识别工作的计算量大大降低,对手势识别的精确度也有所提高,而且不需要对各种手势进行训练就可以完成识别工作,使得识别更加方便和简洁。
1 相关工作
关于手势识别的算法,国内外的研究人员已经提出了很多不同的解决方案。目前比较常用的有基于统计的HMM 模型、基于遗传算法以及基于人工神经网络的手势识别等。基于统计的HMM 方法,其优点是利用先验知识建立视觉特征之间的因果关系来处理视频处理中固有的不确定性问题,不但能够在每个时刻上对多个随机变量所对应的不同特征之间的依存关系进行概率建模,而且考虑了各个时刻间的转移概率,能够很好地反映特征之间的时序关系。但是它需要维护一个具有一定规模的样本库,而且在使用HMM 进行手势识别时计算量大。当然,样本库的规模越大其分布越接近实际情况,手势识别的准确率就越高,而且还需要使用数据平滑的技术来扩大小概率的值。遗传算法对图像进行离散化处理,对图像离散点进行控制,把图像识别问题转换为一系列离散点的组合优化问题; 但它不能够及时利用网络的反馈信息,搜索速度比较慢,所需训练样本大、训练时间长。人工神经网络通过把大量的简单处理单元( 神经元) 广泛地连接起来构成一种复杂的信息处理网络,它在不同程度和层次上模仿人脑神经系统的信息处理、存储和检索功能,需要的样本少、效率高; 但是需要人的参与训练,识别的正确率受主观因素的影响。
总体来说,在人机交互系统中,手势的跟踪与识别应该满足以下几个要求:
a) 实时性好,避免对高维度特征矢量的计算,数据量大的数组处理以及复杂的搜索过程。
b) 足够的鲁棒性。不受识别对象旋转、平移和比例改变以及摄像头视角改变的影响。
c) 手势跟踪的连续性和自动初始化,能够在跟踪失败后自动恢复跟踪,尽量减少人的干预。
本文提出手势识别和跟踪方法不再追随传统的将识别的四个步骤孤立起来,而是将手势跟踪的结果与手势的识别这两个独立的步骤联系起来,将跟踪得到的手势预测的区域设为下一帧图像识别的感兴趣区域( region of interesting,ROI) ; 基于Camshift 算法,根据前一帧手势在图像中的位置和颜色信息,对手势在下一帧图片所处的位置进行预测,主要是基于颜色的统计信息。它运算量小,不仅能很好地满足嵌入式系统的需求,而且跟踪和预测的效果也非常好。通过对ROI 区域进行手势的分割和识别,可以排除背景图像对手势的部分干扰,识别过程的计算量也减小很多。由于每种手势的边线都有不同特征,这些不同的特征能很好地反映在手势的外接多边形上,因此,可以对不同手势和外接多边形建立一个一一映射的关系; 通过建立不同手势的外接多边形特征库,对分割出来的手势作多边形拟合,只要将提取出来的多边形与特征库中的外接多边形进行匹配就能判断出手势的类型。
本文提出的手势识别方法主要包括三个部分:
a) 手势分割。将手部区域从场景中分割出来,并对手部的区域和轮廓进行提取。这里的手部区域主要根据c) 跟踪的结果提供。
b) 手势图像的外接多边形拟合以及匹配部分。对a) 提取出来的手势轮廓作多边形拟合,分析多边形的形状特点,并在特征库中查找与拟合的多边形特征相符合的对象,再映射到具体的手势。
c) 手势跟踪部分。根据颜色信息对手的区域进行定位,并对图像进行空间转换,利用统计原理对下一帧手可能出现的区域进行预测,并将预测的结果反馈给a) 的手势分割部分。
手势识别流程如图1 所示。
2 手势识别框架
手势识别主要由静态手势的识别和手势跟踪两部分的工作组成,手势识别框架结构如图2 所示。在本文提出的方法中,采用了将这两部分的工作进行并行处理的方式,手势识别的结果传递给跟踪部分,作为跟踪的对象,并且手势跟踪的预测结果反馈给识别部分,将为静态手势识别提供ROI 图像区域。这样不仅能有效地提高跟踪的高效性,还能提高识别的准确性,将这两个部分有效地统一起来。
2. 1 静态手势识别
通过静态手势的识别,使系统能够对被跟踪对象有一个基本的理解,为实现自动跟踪初始化与跟踪的自动恢复奠定了基础。首先,手部区域需要从场景中分割出来。本文采用一种基于模糊集和模糊运算的方法进行手的区域和轮廓提取,通过对视频流中空域和时域上的背景、运动、肤色等信息执行模糊运算,分割出精确的人手。
静态手势的识别是基于轮廓特征的识别,对分割出来的人手作边缘检测,得到手势完整的轮廓边缘。通过前面的模糊集合运算,能得到图像的手势分割的二值图。两个具有不同灰度值的相邻区域之间总存在边缘。边缘是灰度值不连续的结果,这种不连续可利用求导方便地检测出来。
这样就能得到完整的轮廓边缘。如图3 所示,左边为手部区域,右边为手势的轮廓。
接下来是对提取的手势轮廓作外接多边形拟合。KenjiOka 和Yoichi Sato 的指尖搜索方法是首先在一个较大的搜索窗口内扫描确定20 个候选指尖位置,然后再对匹配度最大的候选位置周围的候选进行抑制,同时按一定规则去除位于指尖中间的部分候选。该方法由于需要对搜索区域进行多次逐像素的扫描,造成计算量较大,而且除去手势中部候选位置的方法的鲁棒性较差。文献[5]给出了通过遍历手势轮廓的曲率来进行之间位置搜索的方法,通过对手势按轮廓顺序进行定长扫描的方法,可以找出指尖并做出轮廓线的外接多边形。但是这种查找方式需要遍历轮廓线的每个点,而且对每个点还需要作除法运算,这使得算法的计算量太大,而且在搜索指尖时,当受到光线变化使得轮廓线出现很多突起的边缘时,使得识别工作出现困难。本文提出了一种查找外接边的搜索方法,通过对手势轮廓按轮廓点顺序进行定长扫描,将手势轮廓线的外接多边形拟合出来,同时将满足定义1 的手势轮廓外接凸边形缺陷结构设为手势识别的判断特征。
2. 1. 1 手势缺陷图
定义1 手势缺陷图是指由手势轮廓线外接多边形以及多边形各条边所对应的谷底( depth point) 所组成的特征描述方程。谷底是指外接多边形的边与该边所对应的轮廓线上距离边最远的轮廓点。定义手势缺陷图的数据结构如下:
Typedef struct CvConvexityDefect{
CvPoint* start; / /缺陷开始的轮廓点
CvPoint* end; / /缺陷结束的轮廓点
CvPoint* de pth_point; / /缺陷中距离凸性最远的轮廓点
Float depth; / /谷底距离凸性的深度
} CvConvexityDefect;
如图4 所示,手势轮廓缺陷图能很好地描述各种手势,通过对手势轮廓线外接多边形的边数以及边所对应的谷底深度,可以将手势缺陷图映射到不同的手势。其中A、B、C、D、E、F、G为手势轮廓线的外接多边形的各条边,Da、Db、Dc、Dd、De、Df、Dg为手势缺陷图中的谷底到对应边的深度。
为了得到手势轮廓缺陷图,首先必须对手势轮廓进行多边形拟合,得出它的外接多边形。本文提出了一种根据手势轮廓上相邻两点间的凹凸性来进行拟合,通过一次遍历轮廓上的点,对以下方程进行判定,将适当的点剔除,剩下的点即为外接多边形的候选定点:
by = next y - cur y ( 1)
ay × bx - ax × by ( 2)
ax = pcur. x - pprev. x,ay = pcur. y - pprev. y
bx = pnext. x - pcur. x,by = pnext. y - pcur. y
其中: pcur 为当前遍历的轮廓线上的点; pprev、pnext 分别表示当前点的前一个点和后一个点; ax、ay 分别为当前点和前一点的x 和y 坐标值差; bx、by 分别为当前点和后一点指尖的x 和y坐标值差。
基于轮廓线凹凸形的拟合算法流程如下:
a) 将所有的轮廓线上的点按x 坐标值大小排序,并找出所有的点中y 坐标的最大最小值maxY 和minY.
b) 将排序后的轮廓点划分为四部分: 首先按照y 坐标将轮廓线分为上下两个部分,将上半部分以maxY 所在的x 坐标( 记为Xmaxy) 划分为两个部分,分别记为topLeft〈左上〉和topRight〈右上〉; 将下半部分以minY 所在的x 坐标( 记为Xminy) 划分为两个部分,分别记为bottomLeft〈左下〉和bottom-Right〈右下〉。
c) 分别对前一步划分的四个部分( topLeft, topRight,bottomLeft,bottomRight) 进行遍历: 对区域topLeft 将满足式( 1) <0,式( 2) > 0 的点剔除; 对区域TopRight 将满足( 1) < 0,式( 2)< 0 的点剔除; 对区域bottomLeft 将满足式式( 1) > 0,式( 2) >0 的点剔除; 对区域bottomRight 将满足式( 1) > 0,式( 2) > 0 的点剔除。剔除后剩下的点即为手势轮廓线外接多边形的顶点。
手势缺陷图的谷底以及谷底深度的求解是建立在拟合外接多边形基础上,还需要对外接多边形的每条边所对应的轮廓线再进行一次遍历,并将满足以下方程的最大值求出即是该边所对应的谷底:
其中: scale 为单位化量值; hull_cur 和hull_next 分别为外接多边形当前遍历的边和下一条边; dx0、dy0分别为外接多边形当前边的x 和y 坐标的差值; dx、dy 分别为当前遍历的轮廓线上的点与hull_cur 点之间x 和y 坐标的差值; depth 为遍历点与对应边之间的距离,它的最大值即为该边对应的谷底深度,相应的点为谷底。
通过以上搜索可以将手势轮廓缺陷图的特征值找出来,接下来便可以将缺陷图的特征值( 多边形与谷底的关系) 与已建立的库中的特征值相比较,对手势进行匹配,将手势轮廓缺陷图映射到不同的手势上去。
2. 1. 2 手势匹配
手势的匹配主要是基于手势缺陷图的匹配,手势缺陷图的特征值由外接多边形以及谷底的位置和深度组成,如图5所示。
根据多边形的边数以及各条边的程度可以确定手指的数量,而谷底的深度和位置可以确定手指的关系和位置。由于这是根据手势的整体图像来进行分析,所以具有一定的鲁棒性,当光线变化而导致手势图出现差别时,并不会导致手势缺陷图的变化。
2. 2 手势跟踪
对于手部跟踪,主要是基于Camshift 算法实现的,它综合利用了手势图像的颜色、区域和轮廓特征。Camshift 是Mean.Shift 算法的推广,是一种有效的统计迭代算法,它使目标点能够漂移到密度函数的局部最大值点。Camshift 跟踪算法是基于颜色概率模型的跟踪方法,在建立被跟踪目标的颜色直方图模型后,可以将视频图像转换为颜色概率分布图,每一帧图像中搜索窗口的位置和尺寸将会被更新,使其能够定位跟踪目标的中心和大小。本文中,Camshift 算法被用于位置的粗定位,即确定当前手势区域的外包矩形Rect,如图6 所示。
Rect 将被用于前一步静态手势识别的输入图像,以便减少对图像的分割以及模糊运算的工作量。
3 手势交互演示系统
本文在Linux 系统下实现了本文提出的基于手势轮廓缺陷图进行手势识别的方法,并在"嵌入式之星"开发板上实现了手势识别的人机交互演示系统。系统处理器800 MHz,存储器RAM256 MB,实时采集640 × 480 的真彩色图像。该系统分析摄像头实时捕获到的每一帧图像,对图片中的手势进行实时识别。系统的应用程序是一个基于手势识别的拼图游戏,通过变换手势来完成拼图。可识别的静态手势状态被分为五类: A为握拳、B 为食指伸长、C 为V 型手势、D 为中间三指伸开、E为五指张开。A、E 手型分别对应抓取与松开。手势为握拳状态时,手对应的图片块被选中( 类似鼠标左键按下) ,此时可以拖动图片,选定位置后可以换成手势E,图片将被松开( 类似鼠标左键松开) ,B、C、D 手势分别表示将图片放大、缩小和旋转。
演示系统效果如图7 所示。
图7 演示系统效果
4 实验结果及分析
为了检验本文算法的准确性和实时性,本文在实验室光照条件下,采集不带任何特殊标记的手势单目视频图像。实验中参数设置如下: Camshift 算法的最大迭代次数为10; 手势分割使用的HSV 颜色空间如表1 所示。
对手势二值图像所做的数学形态学操作使用3 × 3 的模板做开运算,使用5 × 5 的模板做闭运算; 噪声手势的域值设为0. 01.手势的跟踪过程无人工干预。
表2 给出了五种手势的识别率与匹配成功率。匹配成功率是指在正确识别出手势类型的情况下,按照2. 2 节给出的匹配方法将手势轮廓缺陷图的特征与手势类型进行匹配的成功比率。
表3 给出本文方法与其他方法的比较结果。与其他手势识别方法比较,本文提出的方法有相当的识别率,还实现了手势跟踪的结果对识别的反馈,并在实时性方面满足嵌入式系统的需求( 20 ~ 25 fps) ,明显好于文献[7]( 一种面向实时交互的变形手势跟踪方法, 18 fps) 和目前流行的Hand Vu 的识别效率。
鲁棒性方面,由于本文采用了模糊运算,图像模糊分割的准确率达到96. 4%,对环境的变化具有很好的抗干扰性。即使背景有人的走动造成环境和光线的剧烈变化,也不会对手势轮廓缺陷图造成太大的影响。
5 结束语
本文针对人机交互领域基于视频手势在嵌入式系统上的实时交互任务提出一种快速、计算量小的手势识别方法。它结合了基于模型与基于表观方法的特点,是建立在对目标对象-手势的理解基础上,通过识别静态手势实现了手势的跟踪与识别。与传统的手势识别系统不同,它在注重识别效果的同时还要注重算法的计算复杂度。通过使用手势轮廓缺陷图作为手势识别的特征结构,不仅大大减少了计算量,由于缺陷图是从整体结构刻画手势的结构,所以它还增强了手势识别的鲁棒性。实验表明本文提出的方法可以满足交互的实时性要求,能很好地用于手势交互的应用系统。
暂无评论