摘要
随着计算机技术与信息处理技术迅速发展,智能化电子设备逐渐进入到日常的生产和生活中,与此同时,人们对电子设备操作过程的便捷化也提出了新的要求,这也促使计算机进行图像处理的技术也得到了发展。近些年兴起的模式识别技术为操作便捷化提供了新的研究方向和发展平台,其中通过对手势的识别来向电子产品进行命令操作逐渐成为一项新的关键技术。目前,手势识别技术已经逐步应用在AR和汽车辅助驾驶等方面,同时,在人机交互过程中应用手势识别技术还可以提高体验感。所以,研究开发手势识别系统具有一定的学术意义和经济价值。这项技术涉及了包含静态图片识别与分析、视频图像处理及计算机视觉等多方面内容。
本文介绍了开发手势识别系统的背景及意义,分析了过程中涉及到的必要步骤及算法。本系统基于C++环境使用OpenCV开源计算机视觉库进行手势识别。本系统通过计算机本地单目摄像头录入手势,分别对动态和静态手势进行识别,并实时显示不同手势所表示的结果。总体上可分为图像采集、图像预处理,特征提取及识别四个模块,具体包括非线性中值滤波、形态学膨胀滤波、HOG特征和SVM分类等步骤。
目前系统开发完成,实验结果基本可以实现手势的识别,并显示出结果。
关键词:图像处理;手势识别;OpenCV;计算机视觉
ABSTRACT
With the rapid development of computer technology and information processing technology, intelligent electronic equipment has gradually entered into daily production and life. At the same time, people have put forward new requirements for the convenience of electronic equipment operation process, which also promotes the development of computer image processing technology.The emerging pattern recognition technology in recent years provides a new research direction and development platform for the convenience of operation, among which the command operation of electronic products through gesture recognition has gradually become a new key technology.At present, gesture recognition technology has been gradually applied in AR, automobile assisted driving and other aspects. Meanwhile, the application of gesture recognition technology in human-computer interaction can also improve the sense of experience.Therefore, the research and development of gesture recognition system has certain academic significance and economic value.The technology involves static image recognition and analysis, video image processing and computer vision.
This paper introduces the background and significance of developing gesture recognition system, and analyzes the necessary steps and algorithms involved in the process.This system uses OpenCV open source computer vision library for gesture recognition based on C++ environment.In this system, gestures are recorded by computer local monocular camera, and the dynamic and static gestures are recognized respectively, and the results of different gestures are displayed in real time.In general, it can be divided into four modules: image acquisition, image preprocessing, feature extraction and recognition, including nonlinear median filtering, morphological expansion filtering, HOG feature and SVM classification.
At present, the system has been developed, and the experimental results can basically realize gesture recognition and display the results.
Key words: Image processing;Gesture recognition;OpenCV;Computer vision
目录
1 绪论 1
1.1 课题背景及意义 1
1.2 手势识别的发展现状 1
1.3 本文主要内容 2
1.4 本文结构安排 2
2 系统开发平台 3
2.1 OpenCV 3
2.1.1 OpenCV简介 3
2.1.2 OpenCV配置 4
2.2 MFC 8
2.2.1 MFC简介 8
2.2.2 创建一个MFC 8
3 系统相关技术及算法介绍 8
3.1 系统相关技术 8
3.1.1 图像采集技术 8
3.1.2 图像预处理技术 9
3.1.3 肤色检测与分割技术 9
3.1.4 特征提取 9
3.2 系统相关算法 10
3.2.1 HOG特征 10
3.2.2 SVM 14
3.2.3 核函数 15
3.2.4 肤色模型 15
3.2.5 RGB色彩空间模型 16
3.2.6 YCbCr色彩空间模型 17
3.2.7 中值滤波 19
3.2.8 膨胀滤波 19
4 系统设计与实现 21
4.1 系统整体设计 22
4.1.1 手势训练模块 23
4.1.2 手势测试模块 27
5 系统测试与分析 28
5.1 系统测试环境 28
5.2 系统界面测试 28
5.2.1 手势注册功能测试 28
5.2.2 手势识别(动态手势)测试 31
5.2.3 图片识别(静态手势)测试 34
5.3 测试问题 36
5.3.1 手势识别(动态手势)问题 36
5.3.2 图片识别(静态手势)问题 38
5.4 测试结论 39
6 总结和展望 39
6.1 本系统优点总结 39
6.2 本论文不足总结 40
6.3 未来工作展望 40
参考文献 42
致谢 43
1绪论
1.1课题背景及意义
随着计算机技术的进步和技术革新以及智能化时代的要求,人们不断探寻开发新的、更加便捷的人机交互方式。其中,基于计算机视觉的手势识别技术已成为研究热点之一。手势的检测和识别技术作为一种有着自然性、简洁性和直接性的一种新型的交互方式,是这些交互技术当中倍受重视的研究和应用的技术。近几年来,已经有相当一部分的应用采用了这种手势识别的方式作为跟机器交互的手段。本文讨论一种采用基于单目摄像机的特定颜色模型的背景分离方法和基于关键信息的手势提取方法,用Visual Studio C++和OpenCV进行开发,实现在单摄像机下的手势识别交互系统。
1.2手势识别的发展现状
手势识别在计算机科学中是指通过数学算法来识别人类手势。为了获得更好的人机交互体验,计算机需要正确地理解人类手势的含义,并根据预定义的手势指令进行相关操作。手势识别技术通常包括图像采集技术、图像预处理技术、特征提取技术和识别分类技术几个方面。目前手势识别主要有两个研究方向,一是基于计算机视觉,二是基于可穿戴设备。
本文是基于计算机视觉开发的的手势识别系统。无论是静态或动态手势,其识别顺序首先需进行图像的获取、手势检测和手势分割,然后进行手势识别。其关键件技术主要为图像处理、手势分析与分割、手势识别三个过程。图像处理是系统把通过计算机单目摄像头采集的视频流进行帧分离处理,从视频流中分离出单一手势图像,并对图像进行滤波、平滑等预处理操作,作为下一阶段的输入量。然后通过检测算法检测输入量中是否含有人类手势,如果检测出手势图像,则进行肤色分割处理,将手势与背景进行分离,得到手势的平面模型,建立手势形状数据库。手势识别阶段采用模板匹配法,将动态手势看成由静态手势图像所组成的序列,然后将待识别的手势模板序列与已知的手势模板序列进行比较,识别出手势。
本文是将部分手势转化成所对应的信息。未来可以进一步将手势直接转化成语音,通过对话的方式将信息传递出去。方便聋哑人士与普通人的沟通。另外,汽车行业一如既往的对手势识别保持热情,汽车中的各种仪表可以直接通过手势识别直接控制。而在穿戴设备领域,使用手势识别技术以追踪用户包括睡姿、心率、体脂肪率、总肌肉量、体脂肪量和基础代谢率在内的一系列数据,进而促进穿戴设备的发展。
1.3本文主要内容
本文所涉及到的一系列软件开发有效凭借以及完成相应试验平台的建立,使用OpenCV中的一些功能函数及控件对图像和视频流进行手势检测的研究。其中以HOG特征、局部二值模式(LBP)为提取的目标,通过手势检测椭圆模型算法,对图片及视频序列中的手势进行,提取手势轮廓。之后,通过对RGB、YCrCb等颜色空间模型的处理,而后通过非线性中值滤波,形态学膨胀等方式进行降噪滤波以达到皮肤分割的效果。最终通过MFC构建了一个支持多手势的视频和图像处理系统,该系统可以对视频和图像中的多个手势进行实时识别。
本文的目的是在大量学习和理解传统的算法之后,将其实现并优化。在阅读了大量的相关文献和搜索了大量的资料后,设计并完成了一套相对方便简洁的手势识别系统。该系统实现了10个手势的动态和静态识别,能够快速识别并显示手势所代表的信息。另外可随时采集并训练新的手势模型。
1.4本文主要研究内容
本文整体结构具体可以归结为六个部分,其各个章节的布局如下所示:
第一章绪论,针对于手势识别相关研究背景及意义进行了相对较为切实有效的分析,介绍了手势识别研究现状和发展趋势,简要阐述了本文的主要内容以及相应章节的布局。
第二章系统开发平台,具体涵盖了开发环境和实验平台的搭建,在手势检测、手势识别算法研究的基础上,借助OpenCV计算机视觉库中的一些函数实现算法和MFC微软基础类库以及Visual Studio 2013开发环境来构建交互界面。
第三章系统相关技术及算法介绍,首先介绍了手势识别相关基本原理,其次研究了Hog检测算法的基本原理,同时介绍了相关概念如色彩和伽马归一化、计算图像梯度等。而后阐述SVM分类原理。最后分析RGB、YCbCr等颜色空间模型及中值滤波算法、膨胀滤波算法的原理。
第四章系统设计与实现,首先介绍了手势识别的主要流程和设计思路,然后介绍了对应的模块组成及具体功能描述,最后进行软件的实现。
第五章系统测试与分析,对本文所设计的系统进行测试,本章主要介绍对系统各功能的测试结果及针对不同测试结果的分析。
第六章总结和展望,对本文所描述的研究工作进行总结,并对目前需要进一步改进优化的部分加以说明,同时简单介绍改进之后期望达到的效果。
2系统开发平台
本文所开发的系统是基于所进行开发的,相应的开发环境具体涉及到了 ,在此过程当中还应用到了作为系统内部相应的界面库,并且基于相对开源的针对于手势检测以及识别完成了相应的开发。
2.1OpenCV
2.1.1关于的OpenCV概述
所谓的具体可以归结为开源形式的计算机视觉库,相应的组合命名可以概括为。
在年就已经建立起,如今由提供支持。它是一个跨平台开源计算机视觉库,可以运行在以为代表的多个操作系统上。包括C函数和少量类,同时提供了包含在内等多种语言接口,在图像处理和计算机视觉方面有很多通用算法。
提供了机器学习库。该机器学习库侧重于统计方面的模式识别和聚类。除了在视觉相关的任务中,还可以方便地应用与其他的机器学习场合。
版本于年发布。的第二个版本是2009年10月的OpenCV2.0,主要更新包括C++接口,更容易、更安全的模式,新的函数,对现有实现代码优化等。2012年8月,对的支持由一个非营利组织提供,现在它也集成了对的支持。2014年8月,随着的发布,这个强大的计算机视觉库迎来了全新的纪元。2019年,发布4.0版本。
据相关统计,一个人获取的信息大约有 75%来自视觉。而图像又是其中最重要的组成部分。在人工智能时代,机器视觉会在人机互动、人脸识别、手势识别等方面得到更广泛的应用。作为图像处理的重要工具之一,它将会在这一领域发挥更加重要的作用。
2.1.2OpenCV配置
本文采用的是的配置方法,OpenCV作为开源的软件,直接到官网下载即可,目前官网更新到4.1.0版本,本系统因需要用到控件,故文中采用2.4.9版本。配置过程如下:
(1)安装,打开资源包,解压到相应文件夹。
图2-1 OpenCV资源包解压
(2)配置环境变量,将环境变量添加到路径: