登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 毕业论文 > 电子信息类 > 信息工程 > 正文

基于机器视觉和RGB摄像头的双手势多点动作控制系统设计与实现毕业论文

 2020-02-17 11:02  

摘 要

人机交互技术是一种通过交互装置,让计算机识别人体动作语言以实现人与计算机互动的技术。手势识别,尤其是基于机器视觉的手势识别技术是人机交互领域里的一个主要的研究趋向。生活中常见手势的辨别与运用是将来的研究重点,因此基于视觉的手势识别在手势识别领域里占据了相当重要的地位。利用基于机器视觉的手势控制系统,用户可以通过简单的手势与设备交互,让机器听从指令完成工作,让人机交互更加自然化。

设计一种手势识别系统,采用 C 编程语言完成程序的编写,采用背景减法去检测运动目标,通过视频采集、图像处理、手势识别三个板块,完成手势的识别功能,并显示出识别结果。具体的研究内容主要包括:

对摄像头获取的手势视频图像进行图像处理,包括图像的灰度化、二值化处理、腐蚀和膨胀、检测轮廓并绘制轮廓。

对手势图像进行匹配与辨认操作,主要包括对手势图像使用matchShapes()函数和模板图像计算Hu矩相似值,判断识别结果。

本文主要使用OpenCV库里成熟的计算机视觉的相关算法,通过实际调试运用成功的构建了一个能够识别三种手势的系统。本文使用的算法在保证测试结果的准确性的前期下,计算量比较小,并且能够在正常的光照情况下成功识别出石头、剪刀、布三种手势。试验结果表明该系统达到了预期目标,具有较好的鲁棒性。

关键词:手势识别;人机交互;图像处理

Abstract

Human-computer interaction technology refers to the technology of realizing human-computer dialogue in an effective way through interactive devices. Machine vision-based gesture recognition technology is an important research direction in the field of human-computer interaction. With the machine vision-based gesture control system, the user can interact with the device through simple gestures, allowing the machine to follow the instructions to complete the work, making the machine interaction more natural.

In this paper,A gesture recognition system is designed. The program is written in C . The background subtraction method is used to detect the moving target. The three functions of video capture, image processing and gesture recognition are used to complete the gesture recognition function. The specific research content mainly includes:

The image processing of the gesture video image acquired by the camera includes image graying, binarization processing, corrosion and expansion, detecting contours and drawing contours.

The matching operation of the gesture image mainly includes the gesture image using matchShapes() to calculate the degree of Hu moment similarity.

This paper mainly uses the mature computer vision related algorithms in the OpenCV library to successfully construct a system that can recognize three gestures through actual debugging. The algorithm used in this paper is relatively small in the early stage of ensuring the accuracy of the test results, and can successfully recognize three gestures of stone, scissors and cloth under normal lighting conditions. It has achieved the expected goal and has good practicability.

Key words: gesture recognition ;human-computer interaction; Image Processing

目 录

第1章 绪论 1

1.1 研究背景与意义 1

1.2 国内外研究状况分析 1

1.3 研究内容与本文安排 2

第2章 手势识别方案论证及选择 3

2.1 运动物体的检测方案 3

2.1.1 帧差法 3

2.1.2 背景减法 4

2.1.3 光流法 4

2.1.4 方案比较 4

2.2 实验函数的选择 5

2.2.1 读取摄像头的函数 5

2.2.2 灰度及二值化处理的函数 5

2.2.3 滤波的函数 6

2.2.4 腐蚀和膨胀的函数 8

2.2.5 查找轮廓及形状匹配的函数 8

第3章 手势识别程序设计及编程 10

3.1 准备工作 10

3.2 手势识别程序的实现 11

3.2.1 视频采集模块的实现 12

3.2.2 模板图像处理模块的实现 13

3.2.3 背景减法模块的实现 15

3.2.4 手势识别模块的实现 16

第4章 程序运行及调试 19

第5章 总结 21

参考文献 22

致谢 23

第1章 绪论

1.1 研究背景与意义

手势识别是通过数学算法来识别人类手部动作的一门热门的研究技术,早期的手势识别主要是利用机械设备,去检测手部区域关节的角度信息与空间坐标。当时主要是利用有线技术让人与计算机形成一个整体,人体的手势信息就能无损地传递到识别系统里,这些操作需要借助数据手套来完成。现在的手势识别可以直接利用RGB摄像头获取图像,采用OpenCV库里计算机视觉的相关算法来实现手势识别的功能。

手势识别让用户能够轻松地采用手势去和计算机交互,让计算机直接执行指令,完成指定的工作。它能将人们在生活里学习到的技能,直接运用在人机互动里,使计算机可以理解更加灵活的指令,能够极大地提高虚拟世界中的可操作性,让人们可以在虚拟世界中完成更加复杂的任务。

1.2 国内外研究状况分析

现今很多学者都专注于研究手势识别技术,特别是基于机器视觉的手势识别,他们提出了很多优秀的算法与理念。韩国的JongShill Lee、YoungJoo Lee等人使用熵分析法从实验的视频数据传输里提取出手势分割的区域,完成手势识别的操作[1]。他们采用链码去描绘手势区域的边缘信息,并利用算法得出该手势区域的质心与边缘轮廓之间的距离数据。他们实现的这个系统能够识别六个不同的手势,并且各种手势的辨认成功率高达95%;实验中让六个人分别做一套手势动作,不同肤色对实验几乎没有影响,最终识别率也能达到90%。这种成功率从侧面说明了手势识别如今的研究已经比较成熟了,并且能够逐步应用在平常的生活里。在印度,Meenakshi Panwar通过分析基于机器视觉的手势识别算法,对其进行了改进,在此根本上实现了一种基于结构特征的新算法去进行手势识别。这种方法首先对实验图像进行背景消除和方向检测, 接着检测拇指与手指数量,最后利用这些特征信息进行手势判别。Chenglong Yu等人也研究出了一种不同的方法,他们将手部的各种表征如体积、轮廓、长宽比等相结合,利用基于计算机视觉的多特征算法完成手势判别的操作,极大地提高了识别率,拥有较好的鲁棒性[2]。上海大学DING Youdong、PANG Haibo等人则是采用AdaBoost分类器训练大量数据后进行手势识别,这种方法核心思想是改进的LBP算法[3]。他们成功的构建了几种不同的手势数据集,其中包含一些角度跳变范围很广的手势数据,试验进一步验证了这种方式的可行性。除了大学和研究所对手势识别进行研究,还有很多商业公司和大型企业也将手势识别的相关研究列入在研发计划里,并且成功开发了相关产品,在市场上取得的巨大的份额。三星的智能电视就能通过手势对电视进行控制,这在上一代旗舰机种ES8000上就已经实现。作为升级版的F8000智能电视则更为优秀,手势控制方面由过去的单手操控升级为了双手控制。用户能够使用的主要功能有:掌心挥动(移动)、握拳抓取(确认)、左右挥动(切换)、双拳合作(缩放或旋转)等指令。用户使用手势就能对电视进行控制操作,这相比遥控器更为便捷,也让用户能够轻松地享受电视节目。

国内的学者们也对手势识别抱有极大的研究兴趣,并且发表很多新颖的算法思想。清华大学祝远新等人通过研究提出了一种新的基于表观的手势判别技术和一种利用运动目标分割去估量相邻图像里作为前景的运动物体的方法,并且表明了一种将运动、外观等特征信息结合起来进行手势辨别的方式[4]。他们制作了一个在线识别的操作系统,该系统能够识别12种不同的手势动作,识别率在90%以上。王凯等人经过研究完成了一种能识别实时手势动作的系统,该系统主要采用AdaBoost算法训练数据,利用光流匹配获取运动目标信息[5]。该方法操作简单,只需要打开计算机的摄像头获取特定的手势动作就可以对手势做出比较精确的判别。其中,使用光流匹配辨认动态的手势动作,利用AdaBoost算法辨别静态的手势动作。中国科学技术大学的滕达,刘岩等人专注于徒手手势识别的研究中,这种方式的基本思想是“大小手”,把左手和右手分为大手和小手,双手重叠识别为单手,利用背景减法消去背景,使用大小手特征提取算法去获取手势图像,根据动态时间的数据信息判别手势[6]。手机app里也会添加手势识别的功能,比如抖音就有一种自拍的特效视频,视频的上方会给出特定的拍照姿势,比一个爱心,或者比一个ok的手势都能够自动地打开自拍功能。跟随着屏幕上的手势做出同样的动作,识别手势后,手机会自动拍照,同时照片会出现在顶部。

1.3 研究内容与本文安排

本文利用了基于机器视觉的手势识别技术,在 VS2012开发环境中使用VideoCapture类调用RGB摄像头并读取实时手势图像, 使用 OpenCV开源库里的视觉算法对获得的图像进行处理和匹配工作,设计并完成一种手势识别系统。经过试验表明,该系统能够识别出不同的手势,满足基于机器视觉的手势识别系统的设计要求,为人机交互提供了一种参考前提。

第2章 手势识别方案论证及选择

手势识别首先要进行运动物体的检测。从摄像头拍摄的图像里检测出运动目标叫做运动物体的检测。在进行手势识别时,使用比较多的三种运动物体检测方法为背景减法、帧差法、光流法,并且在检测运动目标时还需要对图像进行相关处理,选择合适的函数[7]。本文将讨论这三种方法和图像处理的函数,并比较其优劣,选择其中一种来实现。

2.1 运动物体的检测方案

2.1.1 帧差法

摄像机获取的视频流是连续不断的,当它拍摄的场景固定不变时,相邻帧之间比较稳定,而当一个运动物体出现在该区域时,会使得相邻帧产生较大的波动。帧差法借鉴了上述思想,它是常见的运动目标检测方法之一,它的实现思路是让视频流里的相邻帧之间进行差分处理,以此捕获运动目标。帧差法的第一步操作是利用差分法将设定的第n-1帧图像与第n帧相减,再对这个差分图像进行阈值处理。当场景亮度趋于稳定状态时,图像里某区域的像素值变化低于预先设置的阈值,则说明该区域是背景;而假如该区域内的像素值波动较大,那就说明该区域内存在运动目标,从而判别运动物体在图像里的坐标,确认运动物体的范围,如图2.1所示。帧差法使用的连续两帧图像时差比较小,将两者里的第一帧设置成背景模型能够保证良好的时效性,并且当场景里运动物体改变时,能够快速地搭建新的背景模型去搜寻目标。帧差法算法存在明显的缺陷,它需要选择合适的阈值才能成功检测运动物体,阈值过小会导致噪声较多,图像模糊,阈值过大则会滤除某些关键信息,从而忽视真实存在的运动目标。

图2.1 帧差法示意图

2.1.2 背景减法

背景减法可以看做一种特殊的帧差法,但是与帧差法不同的是背景减法不会让图像内连续的两帧相减,它是把当实时获取的视频图像与一个提前设定好的背景模型相减,然后从差分图像里检测出运动物体。让当前帧与背景模型相减,背景模型里没有运动物体,因此相减后的差值如果较大,则说明这个点是前景点,即实时图像里存在运动目标[8]

背景减法认为视频流中的背景是固定的,那么摄像头拍摄的第一帧不含有运动目标的图像就可以设置为背景帧,之后的每一帧图像和背景帧相减,当运动物体出现在镜头里时,此时的差值图像就能反映出运动目标的信息。在真实环境里,恒定不变的背景是难以获取的,背景不断地改变就要求实验者利用视频流中的帧间信息去进行背景的重建工作。环境因素如光线的强弱和光照的面积等都会影响背景模型的质量,根据需求去构建一个良好的背景模型是背景减法的关键所在。

2.1.3 光流法

图像里运动目标的像素运动的瞬时速度被称为光流[9]。在现实生活里,一般使用视频数据中每个像素点灰度值的改变情况去反映图像中运动的物体。利用光流法进行检测运动物体的实现方法是先获取图像里各个像素点的运动向量,每个点的运动向量看做一束光流,这样集合所有点就形成了光流场。当图像里没有运动物体时,图像里的像素点运动情况不会改变,光流场不会产生变化;当图像里出现运动物体,那么会使得运动区域的像素点的运动向量发生改变,这个区域的光流状态异于周边区域,图像的光流场会发生变化,这样就捕获了运动物体的位置。使用该方法根据图像前景和背景的运动差异,检测出视频中的变化情况,利用图像中的光流信息去推算出运动目标的空间位置,使用时运算量比较大,并且不能确保实验拥有实时性与鲁棒性。

2.1.4 方案比较

比较上述三种方法可以发现,帧差法容易实现,运算量比较小,可以迅速地捕捉到视频中的运动物体,但是由于连续两帧的时间间隔过短,运动物体的位置变化较小,目标内部在相邻帧图像里重合的部分难以被检测到,检测的目标不完全,内部含有“空洞”。

如果使用光流法检测运动目标,那么需要目标和摄像机存在着相对运动,因此这种方式适合用在摄像机静止和运动两种场合里。光流法里光流场的应用思想比较简单,但它算法的运算比较繁琐,并且在现实环境里,外界光照等因素的影响致使物体在运动过程中,目标表面的亮度时刻都在改变。光流基本约束方程的假设前提在这种情况下不能达成,使用这种方式检测目标会使得计算产生极大的误差。

与前两种方法比较发现,背景减法的算法比光流法简单,背景减法设定的背景帧不包含有运动物体,而实时获取的图像里存在运动目标,让当前帧减去背景帧后能够检测出完整的运动物体,这样避免了帧差法在使用时会造成“空洞”的问题。因此,在比较优劣后本论文将采用背景减法来完成运动物体即手势动作的检测。

2.2 实验函数的选择

OpenCV图像处理库里有很多关于图像处理的函数。该设计首先会利用摄像头获取图像,对图像进行灰度处理,然后会对图像依次进行二值化处理、滤波、开运算和查找轮廓,最后再将每一帧的图像与模板图像进行匹配操作,输出辨别结果。这里面的每一步都会涉及到OpenCV中的函数,下面将介绍本论文所使用的每种函数。

2.2.1 读取摄像头的函数

进行手势识别的第一步就是获取手势图像,这里需要使用OpenCV里读取摄像头的代码:VideoCapture cap(0),这里读取摄像头传入的是index索引号。如果PC机只有一个USB摄像头,index的值为0。本次实验使用的PC机只有一个摄像头。摄像头开启后会处于一直读取的状态,需要使用waitKey()返回值去判断是否退出预览。使用代码if(waitKey(x)gt;0),在等待的x毫秒中,按下返回键盘的操作值,没有按键按下就返回-1;使用代码if(waitKey(x)==y),指定按键退出,按键取决于y的值所对应的ASCL码值,ESC的ASCLL码值为27。获取的第一帧图像还会存为背景帧,此处使用background = frame.clone()完成提取工作。

2.2.2 灰度及二值化处理的函数

在图像处理里,用RGB三个分量来表示真色彩,R是Red,即红色;G是Green,即绿色;B是Blue,即蓝色。这三个分量的取值范围均是0~255。每一张图片均是由一个像素点矩阵所构成,每张图像的像素一般对应于二维空间中一个特定的位置,而且有数量不一的与那个点相关的采样值组成数值。灰度图像,也被叫做灰阶图像,这种图像每种像素只有一个采样颜色,各个像素能够被从0~255的亮度值表征。灰度化处理就是把彩色图像转化成灰度图像,这种处理能够极大地减少后续图像处理的运算量,并且能够较好地保留试验图像全部和局部的颜色及明亮程度的表征信息。

进行灰度化处理时会使用cvtColor()函数,它的第三个参数值决定了色彩空间转换的模式。灰度转换有两个参数,第一个是:CV_BGR2GRAY,它的转换公式是;第二个是CV_RGB2GRAY,它的转换公式是。这两者在将原图转化为灰度图时,转换的系数是一致的,不同的地方在于系数后紧跟的通道的次序发生了改变,前者是BGR,后者是RGB。OpenCV的颜色空间以BGR为主,本文在进行灰度化处理时使用参数CV_BGR2GRAY。

摄像头读取的图像在进行灰度化处理后,还需要将获得的灰度图像进行二值化处理,减少图像里多余的数据量,突出显示物体的轮廓。把图像内的像素点的灰度值设置成0或者255,让整副图像展现出细腻丰富的黑白效果的过程就叫做图像二值化。二值化可以通过阈值法得到比较好的分割效果,这要求目标物体在内部拥有相同的灰度值,并且要求它的背景的灰度等级是异于运动物体的。二值化还能利用动态调节阈值的技术来分割图像,这种方法适用于物体和背景的差别表现不在灰度值上,把这个差别特征转化为灰度特征来进行操作。二值化的公式是:。使用二值化处理,能够突出一定范围的信息,在OpenCV里有两个函数能够实现图片的二值化,分别是手动指定阈值的threshold()函数和自适应调节阈值的adaptiveThreshold()函数。本文使用threshold()函数对灰度图进行二值化处理,并且此函数的第五个参数决定阈值的类型,主要为三种类型。第一种是CV_THRESH_BINARY,过门限的值设定是maxVal,其他值置零;第二种是CV_THRESH_TRUNC,过门限的值设定是门限值,其他值不变;最后一种是CV_THRESH_TOZERO,过门限的值不变,其他值置零。第一种阈值操作适用于二值化阈值,它被表示为:。本文在对图像进行二值化处理时选用threshold()函数,采用参数CV_THRESH_BINARY,将在阈值内的像素点变为0(白色部分),在阈值之外的像素变为1(黑色部分)。

2.2.3 滤波的函数

在图像处理过程中会不可避免地引入噪声,噪声属于图像里多余的冗杂信息,会致使图像处理后的图片不清晰。这些噪声会对实验结果造成严重的影响,为了在不影响图像细节特征的情况下,抑制目标图像里的噪声,需要对图像进行滤波处理。在开源库OpenCV中已经写好了很多滤波用的函数,这些函数主要对应的滤波方式有均值滤波、高斯滤波、中值滤波、双边滤波。

以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。

相关图片展示:

您需要先支付 80元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图