一种基于皮肤颜色区域分割和机器学习算法相融合的手势识别方法及其应用与流程

文档序号:16000697发布日期:2018-11-20 19:25阅读:394来源:国知局

本发明涉及手势识别技术领域,具体涉及一种基于皮肤颜色区域分割和机器学习算法相融合的手势识别方法及其应用。



背景技术:

随着信息技术的迅速发展,人机交互技术在人们生活中占据的地位越来越重要。如今为了满足人们生活的需求,手势识别作为一种自然、人性化的人机交互方式被越来越多地采用。目前很多学者在手势识别技术上也做了不少工作,比如杨学文等人结合手势主方向和类-Hausdorff距离对手势识别,解决了手势识别受手势旋转、平移和缩放的影响问题,但其实验仅能在光照稳定、杂点较少和无人脸干扰的条件下进行。Dardas等人通过提取图像尺度不变性特征和矢量化特征,再用特征包和多类支持向量机对手势进行识别,识别效果较好;但由于SIFT算法的计算复杂度高导致识别速度较慢,实时性差。陶美平等人通过无监督的稀疏自编码神经网络训练图像小块,提取手势图像的边缘特征作为训练分类器的输入,最后对训练好的分类器的参数进行调优从而提高准确率,但仅在限定背景下能够实现,现实背景下无法识别。

实际中,为了提高识别率通常使用限定背景的方式或背景简等对手势进行识别,无法排除人脸、光照、类肤色等干扰,所以不利于自然的人机交互,目前,在现实环境下还没有一个成熟的手势识别系统能够被广泛使用。因此,改善和提高人-机之间的交互方式具有重要的理论意义和实践价值。



技术实现要素:

针对现有技术存在的不足,本发明的目的在于提供一种具有良好的稳定性、实时性和平均识别率高的基于皮肤颜色区域分割和机器学习算法相融合的手势识别方法及其应用。

为实现上述目的,本发明提供了如下技术方案:一种基于皮肤颜色区域分割和机器学习算法相融合的手势识别方法及其应用,包括以下步骤:

(1)通过对手势图像的采集和预处理后,在YCbCr肤色空间下使用Otsu自适应阈值算法将肤色区域分割出来;

(2)分割后通过设置手势区域判定条件分割出手势,在手势轮廓上提取Hu矩特征和指尖数作为特征向量;

(3)然后利用SVM分类器对常用的6种静态手势进行分类识别;

(4)一种将上述人机交互方法应用到常用软件中,基于Webots仿真环境下,将手势识别结果转化为指令,实现手势对机器人NAO的实时控制仿真。

作为优选的,采用在Webots环境下开发算法,基于第三方计算机视觉库OpenCV开发,将OpenCV移植到Webots仿真环境下,采用C语言。

步骤(1),包括以下子步骤:

(1.1)图像预处理,采用中值滤波和拉普拉斯算法对图像进行平滑和锐化;

(1.2)基于肤色的手势检测中,将图像的RGB色彩空间转换到YCbCr色彩空间;

(1.3)通过归一化处理后将图像转化为肤色相似度的灰度图,然后选用Otsu动态自适应阈值法分割出肤色区域。Otsu阈值法是通过衡量目标与背景两类之间最大差别的标准,即计算他们之间的方差,当方差达到最大时得到的阈值作为图像分割阈值;

(1.4)针对二值化的肤色区域,设定手势判定条件。

步骤(1.4),包括以下子步骤:

(1.4.1)对边缘轮廓封闭的手形进行分析识别,只考虑穿有长袖衣服的情况;在图像中人身体的肤色区域仅有脸和手,若二值化后的一些小面积肤色区域,也可能是类肤色区域,占整幅图面积比低于0.02,将其剔除;

(1.4.2)剩下的肤色区域仅剩下人脸及手,计算肤色的高度和宽度,满足在[0.7,3.0]范围内,则为手势肤色区域;

(1.4.3)若要识别手势,那么窗口画面中必须出现完整的手势形状,如果图像肤色区域和采集窗口相连通,则不做处理,不管是不是手势,因为不完整的情况下会给识别结果造成误判。

在图像处理上面采用OpenCV函数库,使用库函数cvFindContours将图像轮廓从二值图像中检索出来,当mode=CV_RETR_EXTERNAL检索模式时,表示图像最外面的轮廓被检索出来,然后使用函数cvDrawContours绘制手势轮廓。

在特征提取环节,对手势轮廓提取7个Hu轮廓矩和指尖数目。

采用Vapnik提出的支持向量机SVM作为训练样本和识别样本的分类器;数据库建立在3种环境下,由5位实验者,6种常见手势,每种手势做10遍,共900个样本,一半作为训练样本集,另一半作为测试样本集。每种手势采用在模糊抖动、不同背景、角度旋转和大小缩放等多种情况下150幅手势图像。

建立好6种手势数据库后,使用SVM分类器分别对手势样本进行训练以及分类,分类过程包括以下步骤:

(a)首先转换样本集数据格式;

(b)样本数据集的缩放处理;

(c)训练样本的数据集;

(d)对测试样本分类。

采用支持向量机和模板匹配法进行手势识别,对实验数据库中的900幅图像进行测试,将两种方法得到的实验结果进行比较,得出常用的6种静态手势平均识别率和平均识别时间。

在Webots机器人仿真环境下,通过摄像头采集并识别手势,然后将手势识别结果转化成指令传送给机器人NAO,调用NAO的API函数并做出相应的动作,实现手势对机器人前进、后转、左转、右转、坐下和起立的实时控制仿真。

本发明的优点是:与现有技术相比,本发明通过肤色设置手势判定条件,可以准确定位手势,并且分割出手势;提取的手势轮廓Hu矩特征和指尖数为手势分类提供了更精确的特征向量,利用成熟的SVM分类器对手势分类识别,保证了手势识别率。实验表明本方法具有良好的稳定性和实时性,手势平均识别率达94%,并且应用于机器人控制时,满足实时性,使得人机交互方式更自然、真实,也验证了手势识别算法的可行性。本发明方法对改善和提高人-机之间的交互方式具有重要的理论意义和实践价值。

下面结合说明书附图和具体实施例对本发明作进一步说明。

附图说明

图1为本发明实施例的手势识别方法及其应用的整体设计流程图;

图2为本发明实施例的手势区域判定流程图。

具体实施方式

参见图1和图2,本发明公开的一种基于皮肤颜色区域分割和机器学习算法相融合的手势识别方法及其应用,包括以下步骤:

(1)通过对手势图像的采集和预处理后,在YCbCr肤色空间下使用Otsu自适应阈值算法将肤色区域分割出来;

(2)分割后通过设置手势区域判定条件分割出手势,在手势轮廓上提取Hu矩特征和指尖数作为特征向量;

(3)然后利用SVM分类器对常用的6种静态手势进行分类识别;

(4)基于Webots仿真环境下,将手势识别结果转化为指令,实现手势对机器人NAO的实时控制仿真。

本发明采用在Webots环境下开发算法的,为了使得开发出的算法具有移植性强、开发周期短和效率高的特点,本发明算法是基于第三方计算机视觉库OpenCV开发的,将OpenCV移植到Webots仿真环境下,采用C语言。

手势图像采集通过外部摄像头捕获实验者6种手势图像。

图像预处理,采用中值滤波和拉普拉斯算法对图像进行平滑和锐化,去除噪音的同时较好地保持了图像的细节信息。

基于肤色的手势检测中,常用的肤色空间RGB、HSV和YCbCr三种空间。通过实验表明,YCbCr颜色空间的色度与亮度是相互分离的,在不同亮度下的肤色区域Cb和Cr聚类效果较好,因此可以对Cr和Cb两个分量进行检测,并对这两个分量进行阈值选择。YCbCr与RGB颜色空间之间是线性变换关系,计算量小且效果好,如式(1)所示:

经过运算统计可知,肤色的Cr和Cb色度分量在YCbCr颜色空间中呈现二维高斯正态分布,根据其二维高斯分布特性利用公式(2)对图像像素点的肤色相似度进行分析统计。相似度计算公式为:

P(Cr,Cb)=exp[-0.5(x-m)TC-1(x-m)] (2)

其中:m=E(x)是肤色样本Cr和Cb色度分量均值;x=(Cr,Cb)T是肤色像素Cr和Cb色度分量值;C=E[(x-m) (x-m)T]是肤色分量协方差矩阵。

通过归一化处理后将图像转化为肤色相似度的灰度图,然后选用Otsu动态自适应阈值法分割出肤色区域。Otsu阈值法是通过衡量目标与背景两类之间最大差别的标准,即计算他们之间的方差,当方差达到最大时得到的阈值作为图像分割阈值。当类方差最大时,如式(3)所示其对应的最佳阈值是:

通过Otsu阈值分割算法虽然可以对肤色区域实现精确的分割,但是图像中出现的人脸和类肤色物体依然存在,所以要对非手区域设法去除掉。针对二值化的肤色区域,设定手势判定条件:

(1)本发明对边缘轮廓封闭的手形进行分析识别,只考虑穿有长袖衣服的情况。因此,在图像中人身体的肤色区域仅有脸和手,多次实验得出,若二值化后的一些小面积肤色区域(contArea),也可能是类肤色区域,占整幅图(imgArea)面积比低于0.02,那么这些区域不是人手或人脸,将其剔除。

(2)剩下的肤色区域仅剩下人脸及手,计算肤色的高度(height)和宽度(width)比K,如果满足在[0.7,3.0]范围内,则为手势肤色区域。

(3)因为若要识别手势,那么窗口画面中必须出现完整的手势形状,如果图像肤色区域和采集窗口相连通,则不做处理,不管是不是手势,因为不完整的情况下会给识别结果造成误判。

在手势完整性方面,通过形态学处理有效的填补“空洞”和剔除毛刺,本发明采用先闭运算再开运算的方法对图像进行形态学变换。

在获得了完整的手势二值图像之后,接下来需要寻找合适准确特征来描述手势,同时计算量要尽量小,因此本发明选择对图像中手势区域的轮廓进行处理,即提取目标物体形状。

本发明在图像处理上面采用OpenCV函数库,使用库函数cvFindContours将图像轮廓从二值图像中检索出来,当mode=CV_RETR_EXTERNAL(检索模式)时,表示图像最外面的轮廓被检索出来,然后使用函数cvDrawContours绘制手势轮廓。

在特征提取环节,对手势轮廓提取7个Hu轮廓矩和指尖数目。

(1)Hu轮廓矩

Hu不变矩具有图像平移、旋转、比例不变性特点,且相对于常用的剪影矩,本发明只计算手势的边界矩,可以减少计算时间和降低存储数据的空间。

(2)指尖检测

通过多次指尖检测实验得出:采用指尖曲率和手势凸包集合的办法可以得到准确的指尖数。指尖曲率是轮廓变化较大的位置,轮廓凸包是手势轮廓上全部顶点的最小外接凸多边形,它的顶点均为轮廓上的点。

先用曲率算法确定了所有指尖候选点,再用凸包算法找到手部轮廓凸包,再将凸包顶点与候选点比较获得手指点,统计指尖数。

根据上述分析,用于手势识别的特征向量由Hu1~Hu7七个Hu矩特征和指尖数目Num构成,表示为(Hu1,Hu2,Hu3,Hu4,Hu5,Hu6,Hu7,Num)。

本发明的手势识别在样本采集上是有限的,需要一个对有限样本进行准确分类的分类器,因此本发明采用Vapnik提出的支持向量机(SVM)作为训练样本和识别样本的分类器。

本发明数据库建立在3种环境下,由5位实验者,6种常见手势,每种手势做10遍,共900个样本,一半作为训练样本集,另一半作为测试样本集。每种手势采用在模糊抖动、不同背景、角度旋转和大小缩放等多种情况下150幅手势图像。由于篇幅,以下给出了手势5在十种情况下得到的特征向量值,如表1所示。

表1:(手势5特征向量值)

建立好6种手势数据库后,使用SVM分类器分别对手势样本进行训练以及分类,在分类过程中Libsvm软件包具体使用的步骤如下:

(a)首先转换样本集数据格式。把450组训练样本的数据特征值保存于train_hand.txt中;把剩下的450组待测样本的特征值保存于test_hand.txt中。

(b)样本数据集的缩放处理。使用svmscale函数对数据进行缩放处理,使得特征值范围统一。

(c)训练样本的数据集。通过svmtrain函数对样本数据进行训练,得到最优参数去训练分类器,训练模型为hand.modle。

(d)对测试样本分类。通过svmpredict函数和训练模型对测试样本集(test.txt)进行分类识别。

实验分别采用支持向量机和模板匹配法进行手势识别,对实验数据库中的900幅图像进行测试,将两种方法得到的实验结果进行比较,得出常用的6种静态手势平均识别率和平均识别时间。

表2:(6种手势识别率)

表3:(两种方法实验结果对比)

从表2可以看出基于支持向量机的识别方法各手势识别率明显高于模板匹配法,且满足识别率要求。其中手势4识别率稍低,通过实验分析得出大部分被误测的样本都被识别成了手势3和手势5,这是因为手势4和手势3、5在某些情况下的Hu矩特征值相近,差异相对较小,导致误测。此外在采集样本时手势样本的规范度和手势背景的复杂度也是导致误测的原因。从表3中可以看出,基于支持向量机的手势识别算法能够保证实验结果有较高的识别率,虽然运行效率较模板匹配低些,但是也能满足实时性要求,确保手势识别系统的鲁棒性和稳定性。

在Webots机器人仿真环境下,通过摄像头采集并识别手势,然后将手势识别结果转化成指令传送给机器人NAO(本发明选择了比较经典的NAO机器人模型),调用NAO的相关API函数并做出相应的动作,实现手势对机器人前进、后转、左转、右转、坐下和起立的实时控制仿真。本发明对摄像头采集的当前帧作静态手势识别。

仿真“世界”即等同于现实世界,规定在做“前进”的手势指令时设定一定的步数(本发明设置最大步数为16步),然后自动停止,再执行下一个指令;在发出“坐下”指令时,接下来只能发出“起立”指令,不然系统将不会接收其他手势指令,因而自动屏蔽。手势之间变化的时间间隔设置为3s,在3s时间内系统捕获的手势图像将不做处理。这样就能保证即使实验者误做了一些手势指令,系统在识别和执行指令过程中就能给以屏蔽,以免干扰机器人正常工作。指令转换如表4所示。

表4:(手势指令转换表)

基于手势识别的NAO机器人控制仿真设计如下:

(1)在Webots中控制NAO,首先打开控制器,然后在文本框编辑控制程序,设计主程序之前应初始化,对应函数:

wb_robot_init();

(2)启动身体并加载“动作”文件。

身体驱动函数:

Find_and_enable_devices();

加载动作文件函数:

load_motion_files();

(3)当接收手势编码1时,调用前进循环函数,直到接收下一个手势指令或者完成最大步数16步后停下。

前进循环函数为:

wbu_motion_set_loop(forwards,true);

wbu_motion_play(forwards);

(4)当NAO接收下一个手势指令时,即改变当前运动,那么它需要停止当前动作再去执行新动作。

中断当前动作:

wbu_motion_stop(currently_playing);

执行新动作:(参数motion表示新动作指令)。

wbu_motion_play(motion);

currently_playing=motion;

(5)在NAO转身设计上:将左右转的角度参数设为90度,向后转的角度参数设为180度。例如:

向左向右转表示:

start_motion(turn_left_90);

start_motion(turn_right_90);

在机器人接受指令反应的速度上,计算其响应时间复杂度,得出系统对六种手势命令的平均响应时间在65ms左右,具有良好的实时性,能够满足手势对机器人实时控制的要求。

本发明重点对手势分割和识别的关键技术上进行研究,详细内容主要包括手势检测分割技术、特征提取、手势识别和手势控制机器人。最终在手势识别实验中能够保证算法的稳定性和较高的识别率,且手势对机器人的控制仿真也满足良好的实时性。

实验完成了通过摄像头采集手势并对机器人NAO实时控制仿真,下一步将会把算法植入真实的机器人NAO中,用机器人“眼睛”(camera)代替外用摄像头,让机器人自主采集手势图像并识别,最后产生相应的动作,并设置具体任务让机器人完成。

本发明通过肤色设置手势判定条件,可以准确定位手势,并且分割出手势;提取的手势轮廓Hu矩特征和指尖数为手势分类提供了更精确的特征向量,利用成熟的SVM分类器对手势分类识别,保证了手势识别率。实验表明本方法具有良好的稳定性和实时性,手势平均识别率达94%,并且应用于机器人控制时,满足实时性,使得人机交互方式更自然、真实,也验证了手势识别算法的可行性。本发明方法对改善和提高人-机之间的交互方式具有重要的理论意义和实践价值。

上述实施例对本发明的具体描述,只用于对本发明进行进一步说明,不能理解为对本发明保护范围的限定,本领域的技术工程师根据上述发明的内容对本发明作出一些非本质的改进和调整均落入本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1