基于嵌入式系统实时交互的手势识别方法 - 中国一卡通网
用户名密码 [免费注册] [找回密码] 推广技巧 发布求购 建商铺  发产品  会员体制比较  
 

基于嵌入式系统实时交互的手势识别方法

来源:中国一卡通网  作者:不详  发布时间:2012-05-09 09:22:57  字体:[ ]

关键字:手势识别  嵌入式系统  摄像头  

摘   要: 提出了一种在单摄像头条件下基于嵌入式系统的手势识别方法。通过拟合手势图的外接多边形,找出其所对应的手势缺陷图,并建立手势与手势缺陷图的一一映射,利用手势缺陷图的特征来匹配和识别不同的手势。算法还将手势的跟踪与识别有机地统一起来,通过预测下一帧中手势出现的粗略位置大大降低识别步骤的计算量。该算法在实际应用的嵌入式平台下,能快速、准确地实现手势的识别,能够满足实时人机交互的要求。

  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 的点剔除。剔除后剩下的点即为手势轮廓线外接多边形的顶点。 

更多

新闻投稿合作邮箱:yktchina-admin@163.com    字体[ ] [收藏] [进入论坛]

推荐文章

论坛热帖