没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示


试读
21页
伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。
资源详情
资源评论
资源推荐

基于 Python+Open CV 的手势识别算法设计
1 课题背景及分析
1.1 课题背景
(1)所选课题的应用背景;
伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,
手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无
论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见
到手势识别的身影。
手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已
应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传
感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的
序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、
移动等)来完成控制。
(2)课题的关键技术难点及技术现状;
手势识别是指计算机对人体运动的数学解释,为了提供必要的任务辅助,计算机需
要正确地理解人类的手势,并根据手势的预定义指令进行操作。手势识别技术通常有数
据采集、数据预处理、特征提取和识别分类几个不同技术阶段。目前手势识别主要有基
于计算机视觉、基于超声波和基于惯性传感器三种实现方式
个人在进行手势识别算法设计面临的关键技术难点在于 Open CV 库的使用不是很熟
练,有些 Open CV 库中的函数使用有很多不理解的地方,因此,本人在进行手势识别算
法设计前,需要将所必须要用到的函数先进行温习和学习,才能运用到课题当中,
(3)设计基本思想及设计内容;
由于个人在本次课题之前已经学完 HTML5 (广义上,HTML5=HTML5 本身
+CSS3+JavaScript), Python,并可以熟练运用 Python 的集成开发环境 Pycharm 进行课
题的设计,再加上对 Open CV 库的学习,(Open CV 是一个用于图像处理、分析、机器视
觉方面的开源函数库),本次手势识别算法设计将采用 Python+Open CV 的形式进行算法
设计。基本思路及设计内容如下:(HTML5 如何运用到手势识别中,本人还未有逻辑思路,
因此本次课题设计只采用 Python+Open CV 的形式进行算法设计,后续本人将继续学习,
争取将所学的知识都可以使用上。)
采用 Python 的集成开发环境 Pycharm 进行本次课程设计,在 Pycharm 中进行需要
库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图

像旋转(由于摄像头采集到的图像是镜像,需要用 cv2.flip 将摄像头采集到的图像进
行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于 hsv 的肤
色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。
2 算法设计
(1) 整体算法设计:然后对流程图中的每个步骤加以说明;
手势识别算法设计流程图如下:
1. 用户手势:通过 Open CV 库中的 VideoCapture()调取的摄像头进行手势的
采集,通过 Open CV 库中的 isOpened()进行初始化设置,搭配循环 while 和
read()达到循环一直读取图像的效果。
2. 手势的检测与分割:采取的图像都是属于二维 RGB 形式的图像,它是通过红
色(R)、绿色(G)和蓝色(B)来实现彩色图像的。它本身是采用 DIE 三维
色彩空间,RGB 的色彩值是 0–255,一共 256 级。0 位色彩最弱的部分,呈
现的颜色是黑色;而 255 表示色彩最强的部分,呈现的颜色是白色,这里采
取 hsv 的肤色检测,进行人体手部的检测。
3. 特征提取:进行高斯滤波,通过 mask(mask=cv2.inRange)把 HSV 图片中
在颜色范围内的区域变成白色,其他区域变成黑色;设置阈值去除背景部分,
得到想要的区域
4. 手势识别:通过手部摆出手势的特征进行识别(例如手指的个数,手指间的
角度,手部的凹凸数);需要在后面条件判断中加入手势的特性,才可进行手

势识别。
5. 设置指令:这里通过 if 条件判断进行设置指令,根据手势特征进行定义(例
如手指的个数,手指间的角度,手部的凹凸数),进行条件判断;如果符合条
件,便进行输出;如果没有符合条件的,将不显示出来,直至显示出设定的
指令为止。
(2) 具体算法选择与比较:
第一点:加载图片,无论用 cv2 导入一张静态手势图片还是用摄像头导入实
时图片都可以;这里由于直接调取摄像头方便一些,因此本人在这里直接选
取调取摄像头获取实时图片。但是与静态手势图片相比较,静态图片在拍摄
时可以防止光线,背景颜色等因素,结果会更具有真实性。
第二点: 肤色检测,基于 HSV 颜色空间 H,S,V 范围筛选法 HSV 中 7<H<20
28<S<256 50<V<256
第三点:进行高斯滤波,通过 mask(mask=cv2.inRange)把 HSV 图片中在颜
色范围内的区域变成白色,其他区域变成黑色;设置阈值去除背景部分,得
到想要的区域。
第四点:边缘轮廓检测,这里使用 Open CV 库里的 findContours 进行查找
检测物体的轮廓。
第五点:求出手势的凹凸点,这里采用 Open CV 库和 math 库的功能进行凹
凸点的计算和求解。
第六点:利用凹凸点个数判断当前手势(例如:0 个凹凸点就是拳头,4 个
凹点就是布也就是 5),相比调用“百度云的人体特性识别的库” (即百度
AI 库),使用条件判断比较落后,但百度 AI 库上的资源需要付费才可以调
用,因此在这里进行比较原始的条件判断识别。
(3) 算法改进;
改进一:手势特征条件判断可以修改成调用“百度云的人体特性识别的库”
(即百度 AI 库),但百度 AI 库上的资源需要付费才可以调用,因此在这里
进行比较原始的条件判断识别。
改进二:由于个人的技术的局限性,尝试了多次利用 Python 的 GUI 功能编
程进行识别窗口的美化和改变视图的大小,但加上后,代码反复报错,不能
实现原有的手势识别功能;因此,GUI 功能编程这里暂时先不加进去,在以
后学习完 Python 中的 GUI 功能后,在弥补现有的遗憾。

改进三:在设计源代码的时候,每个代码都是穿插在各个过程中,不容易去
观看,因此,在设计初稿(最开始的源代码)上,改进行了代码的注释,尽
量将一个过程中的代码放在一起。
3 算法实现与调试
(1) 主要步骤的算法程序;(各个算法的注释都标注在.py 文件中,详细的可查看
源代码)
1、导入手势识别引用得到的库(模块);
2、调用电脑的摄像头,一般电脑只有一个摄像头,摄像头编号为 0;
3、读取摄像头采集到的视频照片,同时设置电脑窗口进行选择手势输入的位置的
定义;

4、通过色彩值的不同,进行 hsv 的肤色检测,使用摄像头可以检测手摆出的手势;
5、对摄像头识别到的手势进行高斯滤波处理;
剩余20页未读,继续阅读




















努力学习前端的小陈
- 粉丝: 152
- 资源: 13
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制

评论5