收藏和点赞,您的关注是我创作的动力
概要
手势在我们的日常生活中随处可见,它是生活中必不可少的一种交流方式。目前为止,人们对手势识别的研究涉及了很多领域,例如教育学、医学、计算机等等。其中,以人机交互的手势识别技术是当前比较研究的热点。
手势识别一般可以分为基于数据手套的手势识别和机器视觉的手势识别,其中机器视觉的识别是当前研究热点。而且人的手势千变万化,手的形状也千变万化,因此基于机器视觉的手势识别研究是一个比较难的研究点。
人的手势分为静态手势和动态手势。静态手势相对来说简单,就是静态的手型,而动态手势除了手型特征以外,还伴随手势运动的轨迹,因此动态手势的研究相对复杂。本文以静态手势为研究对象,通过摄像头捕捉手势信息,然后对手势图像进行预处理和阈值分割,再加入形态学的方法,使用模板匹配对手势进行识别。经过多次实验表明,该方法是可行的,对手势的识别准确率高。
关键词:手势识别, 机器视觉, OpenCV, 静态轮廓匹配, 肤色模型
一、研究背景与意义
1.1课题背景及问题的提出
近年来,随着计算机性能的渐渐提高和计算机在各个领域的运用,人机交互技术已成为计算机科学范畴的一个热门话题。现在,这些研究主要是人脸识别、脸的表情识别、嘴唇的识别等,能模仿人的感觉认知。作为人性化技术的新类型,手势识别是人类相互作用的中心,成为计算机相互作用领域的热话题。
但是,由于多样性、多义性,时间和空间的不同,人的手是复杂的变形体,是模仿认识挑战性的学习的话题。目前,手势识别技术已经形成了一个比较完整的理论体系,由手势的输入方式划分,可以分为基于数据手套的手势识别和基于视觉的手势识别两种[10]。本次设计运用了OpenCV多种函数库,从而实现基于机器视觉的手势识别研究。
未来,随着计算机技术的不断发展,手势识别将迈向以人机交互、人机智能的研究时代。目前,手势识别作为一种新型的人机交互技术,已经成为图像处理、模式识别、计算机视觉等领域的一个活跃的研究课题[11]。本文主要是研究了基于机器视觉的手势识别,对手势进行一些加工处理,实现对简单手势的识别。
1.2 手势识别技术发展现状及发展趋势
目前的手势识别技术主要是通过数学算法来实现的。我们可以通过手势操纵设备和控制设备,手势识别就是让计算机理解人的行为,之后做出判断,实现智能化。相信在未来的继续发展下,数字图像处理技术一定会更加完善和优化,进而为手势识别技术的发展带来更多的帮助[14]。
1.2.1国内外研究现状
从上世纪90年代起,国外在手势识别研究领域花费大量的财力物力,取得了一定的研究成果。J.Davis 和 M.Shah 将戴上指尖具有高亮标记的视觉手套的手势作为系统的输入,可识别7 种手势[18]。Vogler 与 Metaxas 将数据手套与视觉手势识别的方法结合,采用一个位置跟踪器和三个相互垂直的摄像机作为输入设备,对 53 个美国手语孤立词进行了识别,识别率为 89.9%[19]。2003年,美国研究的手势风暴来实现对天气的预测。2009年,美国研发的LCD电视控制传感器,人可以通过自己的手势对电视机的控制,比如换台和调节设置。2010年,微软发明的XBOX 360游戏外设Kinect,可以直接用摄像头与玩家进行互动,体验真实的游戏。2012年,著名的世界汽车生产商奥迪开发了一款汽车导航系统,直接用手势操纵导航信息。2005年,韩国三星手机制造商研发了世界上第一款手势识别的手机,用户通过手势即可操作手机。苹果公司在2016年获得了Apple Watch传感器的专利,利用手机可以让Apple Watch替代手机实现手机的功能。索尼公司在本世纪初也研发了基于手势的游戏外设,利用体感让玩家体验游戏的真实性。
相对于国外手势识别研究,我国的手势识别研究发展较为缓慢。2011年,腾讯公司推出了一款名为“QQ手势达人”的软件,该软件可以让用户通过手势对PPT播放进行控制,并可以进行换页调节,简化了人对于机器操作的过程。2012年,我国著名的康佳电视生产商发明了一款利用手势操作的智能化电视机,通过摄像头捕捉用户信息,反馈到电视机系统,系统对人的手势做出判断,从而实现对电视机操作的简化。
1.2.2手势识别技术发展趋势
手势识别技术最终的核心和发展趋势必将是人机交互和人机智能。正是在这样的环境下,随着科学技术的不断发展,数字图像处理技术的应用领域也得到了极大的拓展[12]。但是在手势识别过程中,对于简单的背景变化幅度小的背景下,实现手势识别是一件特别容易的事。但是在复杂的背景下,手势识别的过程将受到阻碍,这些复杂因素还没有得到解决。这就需要图像处理技术的发展来为手势识别提供保障,手势的复杂性也为手势识别加上了困难。未来,数字图像处理与芯片技术的结合将是未来的主要应用方向[4]。进而对人机交互的手势识别做出一定的贡献。
1.3论文主要内容
针对目前基于视觉的手势识别技术在研究和应用领域的不足之处,本文依据项目实施经验,采用理论分析与实践应用相结合的方法,对其进行研究,主要研究内容如下:
(1)简述 OpenCV的计算机视觉手势识别理论。
(2)手势图像预处理。去掉手势图像中无关的信息,提高检测能力,最大化简化数据。
(3) 手势的分割。通过对不同颜色空间中肤色模型的比较,确定了一种适用的、有效的分割模型,以保证分割图像易于区分。
(4)手势的特征提取。由于手势有很多方面的特性,如旋转,缩放和平移,手势特征应该在这些特性当中具有不变的特征。
(5)手势识别系统的实现。 由待识别的图像,再到图像信息的获取,之后进行图像的特征提取,最后对手势实现识别。
二、项目技术理论
2.1 OpenCV 概述
OpenCV是一个计算机视觉库,它由大量的C函数和C++类构成,具有开源、高效、轻便的优点,同时提供了MATLAB等大型软件的接口,使得它的运用方面较为广阔,也更为全面,已经成为机器视觉研究的重要工具。
OpenCV是由C语言编写的,因此只要有C语言基础的人对它的使用都能得心应手。同时OpenCV拥有大量的库函数方便使用者的调用,外加MATLAB等软件的接口,让它在机器视觉方面地位居高。现在,OpenCV也提供对于C#、Ch、Ruby的支持[8]。
2.2OpenCV库函数
图2.1 OpenCV 的结构图
其中,由主要的一下几个库组成:
(1)CXCORE函数库:它是一个各种数据类型运算的基本函数,在OpenCV是一个常用函数;
(2)HIGHGUI函数库:主要控制图像和视频的输入和输出,显示图形界面和系统调用函数,是一个与用户交互的部分;
(3) CV函数库:其中包含了很多功能,例如图像处理、运动分析、模式识别等等,是计算机视觉的重要组成部分。除此之外,用户可以自己编译自己使用的函数,然后添加进OpenCV的函数库中,方便以后的使用。
2.3手势
手势:人的手势。手势不仅包括人的手掌变化,还有人的肘关节、手的指尖、腕关节等,它们共同构成了人的手势。从原始时代,手势的作用一直延续到现在,它是人进行交流和沟通的另一种语言,换句话说就是肢体语言中的一种。
2.3图像处理
图像处理一般说是利用计算机对图像的处理。其中,图像指的是通过相机等拍摄设备得到的图形,它的本质是一个二维数组,称之为像素,像素的不同会导致图形的显示也就不一样。图像处理技术一般包括3个部分,分别为图像压缩,增强和复原,匹配、描述和识别[7]。
图2.2 图像处理一般过程
2.4基于机器学习的手势识别系统组成
基于机器学习的手势识别研究主要是通过摄像头获得手势信息,然后对手势进行一定的模型分析,最后采用模板识别来识别手势的信息,使得用户与计算机的交互更为智能化[1]。
一个基于机器学习的手势识别过程一般由下面的几个部分完成:
图2.3 手势识别系统
系统的功能如下:一旦摄像头识别到手势,系统将对图形进行预处理和手势分割,综合对手势进行分析,使用模板匹配来识别手势。在识别阶段,手势分类时依据模型的参数,并且满足不同的需 求,最后得到手势描述,实现具体的应用[9]。
手势的建模是通过一定的算法对手势进行分类处理,首先确定一定的手势样本,利用手势的几何不变性,外加一定的算法来实现。
手势的分析阶段是最为关键的阶段,它决定了手势识别是否成功的一步。如果手势在摄像头中没有任何变化,那么就是失败的。由手势的建模得到手势的特征,将摄像头捕捉到的手势与之对比,最后判断出两个手势是否一致,最后输出手势的类型。
三、图像预处理
3.1图像的预处理
图像通过摄像头拍摄所得,但是不能直接放入手势分析的系统中,因此对图像要进行预处理。图像的预前处理的主要目的是消除与图像无关的信息,恢复有用的真实的信息,将信息的检测性增强,最大限度地简化数据,改善特征的提取、图像分割、匹配性和识别的可靠性[3]。
3.2图像滤波
在获取图像以及处理图像时,会受到大量噪声的污染,这些噪声一般是像素或者像素块,这些噪声会导致人眼观测时有大量的视觉差。而计算机数字图像,往往对图像的像素有极其严格的要求,不进行处理的话,图像质量很劣质,会影响后续的分割和识别过程。图像滤波能解决这类问题,因此,选择较好的图像滤波方式将决定了图像的质量,为后续的工作带来便利。 图像的去噪有两个要求,一是去除背景噪声;二是保留图像中的原始状态。
3.2.1均值滤波
均值滤波的方法实际上就是线性滤波。它的原理是将图像中的每一个像素点替换为均值。这种方法,算法简单,容易操作。但是无法去除噪声,只能起到弱化作用,会导致图像变得模糊不清。
3.2.2中值滤波
中值滤波法是一种非线性的图像滤波方法。它在平滑脉冲的噪声去噪效果比较明显,能有效地保护图像的边缘,适当选择一定的值替代被污染的值,去噪效果好。中值滤波的效果就是能有效地去除椒盐噪声,在图像中几乎看不到。
3.2.3高斯滤波
高斯滤波是一种线性平滑滤波方法,消除的一般是高斯噪声。高斯滤波的原理就是整个图像像素加权平均的过程,距离图像中心越近的像素权重越高,相对于均值滤波来说,这种滤波方法更柔和,对图像细节的保护也更好一些。
3.2.4双边滤波
双边滤波是一种非线性滤波方法。这种滤波方法能有效保护图像的边缘信息,不会被影响到。但是图像中有高频信号的图像信息时,它对于图像的保护也就素手无策,因此,这种方法只适用于一些低频的数字图像处理。
均值滤波有其固有的缺点,会让图像变得迷糊不易观测;而中值滤波方法对单个噪声的去噪效果好,对于图像的整体保护能力欠佳;高斯滤波方法能有效消除高斯噪声,它的效果更好,图像更平滑更柔和;均值滤波能有效地保留图像边缘的同时也能有效地消除噪声。本次设计所采取的是均值漂移滤波,能够在处理数据时有效地挖掘数据。本文所采取的均值漂移滤波算法Mean Shift 算法。
3.3图像二值化
二值化指将灰度图像转换为二值图像,二值图像指图像中的每个像素只取两个离散的值之一[2]。二值化实质上就是让图像呈现黑白二色,便于分析和处理。
在过去,由于计算机的发展还处于低下阶段,计算能力有限和计算机的内存小的缺点,便提出了机器视觉的二值化方法。该方法具有一些优点:一是容易理解和实现;二是占据计算机的内存小,运算速度快;三四简化图像的处理,算法简单。
二值化的方法主要有直方图法、最大方差法和人工阈值法。本文采用的直方图法和人工阈值的方法结合,避免了直方图对环境过于依赖的缺点,还有人工阈值对于外界环境变化无能为力的缺点,最终实现可以实时改变阈值,达成很好的二值化效果。
图像的二值化能分离图像轮廓,进而方便对图像进行下一步的处理,如图3.7整个人的轮廓都可以凸显出来。人物的黑白部分能显示得很完全。常用的二值化方法在OpenCV 中的函数接口为void cvThreshold。
3.4形态学方法应用
在 OpenCV 中,形态学方法应用有些各自的函数调用,OpenCV已经封装好了这些函数的接口,方便在使用时可以直接调用[13]。
图3.7腐蚀 图3.8 膨胀
在OpenCV中,图像的腐蚀可以导出该图像素的最小值,图像的膨胀可以呈现该图像素的最大值,腐蚀的作用是消除凸的地方,膨胀能填补凹的地方。
OpenCV 中提供的腐蚀函数接口为cvErode,膨胀函数的接口为cvDilate。
四、手势识别算法及手势识别系统的设计实现
4.1手势识别概述
手势识别就是将一个集合与另一集合对比,形成对照结果的过程。目前,手势识别的分类和识别算法主要包括模板匹配、隐马尔可夫模型、神经网络和支持向量机[15]。
手势识别过程:第一步是对人手势的采集,这一步通过摄像头;第二步是对采集到的手势进行预处理、图像分割;第三部是对手势特征进行提取,使用模板匹配的方法识别手势。
4.2模板匹配
模板匹配在静态手势识别中容易实现,且识别率高。本文采用的也是模板匹配的方法进行手势识别,检测被测手势中是否有模板中的手势样本。如果被测手势被系统检测到的话,将与分类建模中的手势进行比对,这种方法准确率高、较为容易实现。
一般的过程:第一是建立轮廓提取模型。一般有图像法和直方图法;第二是查找轮廓并筛选轮廓。手势的轮廓具有以下特征:指尖个数、凸包、轮廓 Hu 矩[6]等,利用手势特征的不变性对手势进行精确的筛选,然后交给下一步工作;第三是特征匹配。利用Hu矩算法( openCV库)[6],对待检测的手势进行轮廓匹配,完成识别过程。
4.3总体系统图
实验硬软件如下:opencv2.4.9,Visual Studio 2013,win7 x64位系统,intel(R)celeron(R)CPU N2930 @1.83GHz 4核,电脑自带HD WebCam。
由照相机捕捉手势图像,通过图像的预前处理(HSV通道的分离)取得手的二值图像,并且通过图像处理(腐蚀,高光补偿等)获得手的轮廓,向其手的轮廓图像中提取特征并采用模式来识别手势[17]。
4.3摄像头捕捉手势识别
下图为摄像头对手势识别的识别结果截图,图中实时检测出手势轮廓图和最终识别图。
以上3幅图是实验的部分截图,识别效果良好,手的轮廓很好的显示在设计中系统中。通过摄像头捕捉人的手势,进行尺寸的调整,基于肤色的有效提取方法,再经过阈值处理,外加形态学变换,调整系统的参数,在多次测试之下,这种手势识别的方法是可行的,能够有效地对手势进行行识别
系统的不足:
1、手势的识别对光线的要求高,背景要求干净。
2、并非一次就能成功识别手势。
五、 目录
目录
摘 要 III
Abstract IV
第一章 绪论 1
1.1课题背景及问题的提出 1
1.2 手势识别技术发展现状及发展趋势 1
1.3论文主要内容 3
第二章 基于 OpenCV 的手势识别基础理论 4
2.1 OpenCV 概述 4
2.2OpenCV库函数 4
2.3手势 5
2.3图像处理 5
2.4基于机器学习的手势识别系统组成 5
2.5本章小结 6
第三章 图像预处理 7
3.1图像的预处理 7
3.2图像滤波 7
3.3图像二值化 9
3.4形态学方法应用 10
3.5本章小结 11
第四章 手势分割 12
4.1手势分割的概述 12
4.2 RGB 颜色空间 12
4.3 HSV颜色空间 12
4.4 YcrCb色彩空间 13
4.5本章小结 13
第五章 手势识别算法及手势识别系统的设计实现 15
5.1手势识别概述 15
5.2模板匹配 15
5.3总体系统图 15
5.3摄像头捕捉手势识别 17
5.5本章小结 19
第六章 结论以及展望 20
6.1结论 20
6.2展望 20
致谢 22
参考文献 23
附录 24