- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十二届智能控制设计大赛初级组之基于手势识别的人机交互系统——盲僧队软件学院2015级软件6班潘文杰2017.5.19目录一、设计要求21.基本要求22.拓展要求33.完成事项说明3二、算法选择31.图像处理与手部区域分割3(1)由于不允许使用深度信息,所以选择通过肤色检测与分割来获取手。3(2)为了应对复杂背景,采用背景差分的方法来去除相对静止不动的背景图像。3(3)由于进行人机交互时往往有人脸出现在摄像头范围内(当需要两只手共同操作时甚至是必须),所以我们不能忽视这个问题。在这里,我们采取haarcascade 分类器进行人脸检测,并移除人脸。32.手部特征提取3(1)通过凸包算法获得手部图像的凸包,再求出其凸缺陷,这种算法运算复杂度较低,利于实时性要求高的程序,而且,识别准确率也较高4(2)手势质心,可以较准确地定位手,捕捉手移动的轨迹。43.手势识别算法4(1)通过对有效凸缺陷点数量可以准确地识别剪刀、石头、布的手势。4(2)上一方法在识别的手势数量比较少的时候效果较好,但是当需要识别的手势数量变多的时候效果变得较差,所以在这种情况下,我采取了以手部图片的Hog特征、使用机器学习SVM算法进行分类,得到不错的效果。44.手势轨迹识别算法4(1)采取隐马尔可夫模型对时序数据建模,进而识别手势轨迹。4三、程序设计4四、实验结果7五、总结8(1)8(2)8(3)8六、附录(程序代码)9七、参考文献52设计要求基本要求(1) 基于摄像头获取的图像数据,实现手部检测;(2) 实现拳头、剪刀、布三个手势的识别;(3) 设计良好的人机界面,用于展示原始图像以及处理结果等信息;拓展要求(1) 控制鼠标完成移动、单击、双击、拖动等操作;(2) 控制电脑关屏、开屏;(3) 设计锥子剪刀布游戏:播放提示语、判断胜负等;(4) 实现空中手写轨迹识别;(5) 其他拓展功能。完成事项说明(1) 基于摄像头获取的图像数据,实现手部检测;(2) 实现拳头、剪刀、布三个手势的识别;(3) 设计良好的人机界面,用于展示原始图像以及处理结果等信息;(4) 控制鼠标完成移动、单击、双击、拖动等操作;(5) 控制电脑关屏、开屏;(6) 设计锥子剪刀布游戏:播放提示语、判断胜负等;(7) 实现空中手写轨迹识别;(8) 实现控制电脑玩CS游戏算法选择图像处理与手部区域分割(1)由于不允许使用深度信息,所以选择通过肤色检测与分割来获取手。(2)为了应对复杂背景,采用背景差分的方法来去除相对静止不动的背景图像。(3)由于进行人机交互时往往有人脸出现在摄像头范围内(当需要两只手共同操作时甚至是必须),所以我们不能忽视这个问题。在这里,我们采取haarcascade分类器进行人脸检测,并移除人脸。手部特征提取(1)通过凸包算法获得手部图像的凸包,再求出其凸缺陷,这种算法运算复杂度较低,利于实时性要求高的程序,而且,识别准确率也较高(2)手势质心,可以较准确地定位手,捕捉手移动的轨迹。手势识别算法(1)通过对有效凸缺陷点数量可以准确地识别剪刀、石头、布的手势。(2)上一方法在识别的手势数量比较少的时候效果较好,但是当需要识别的手势数量变多的时候效果变得较差,所以在这种情况下,我采取了以手部图片的Hog特征、使用机器学习SVM算法进行分类,得到不错的效果。4.手势轨迹识别算法(1)采取隐马尔可夫模型对时序数据建模,进而识别手势轨迹。程序设计图1基本流程框架图2图像预处理基本流程实验结果图3剪刀石头布图4控制鼠标图5控制玩CS1.6图6手势数据总结(1)程序对于复杂背景和人脸干扰具有良好的鲁棒性,已经基本可以免除人脸干扰,但是仍存在手与脸相交时识别困难的问题,通过查论文发现大家对于这个问题的解答大多数是通过使用深度相机等方式解决。(2)程序使用了YCrCb空间转换,能有效地减少光照亮度等干扰。(3)本文尝试多种方式对于基于手势识别的人机交互进行拓展,取得了良好的效果,并基于此开发了基于手势的剪刀石头布游戏、控制鼠标、手势轨迹识别、控制玩CS1.6,也取得了不错的效果。附录(程序代码)//Control.h#pragmaonce#includeiostream#includeWindows.h#includeatltypes.husingnamespace std;classContorl {public:Contorl();CPoint mousePos;void setMousePos(intx, inty);void setMousePosOffset(intx, inty);void leftDown();void leftUp();void rightDown();void rightUp();void leftClickMouse();void leftDoubleC
原创力文档


文档评论(0)