基于视觉的动态手势轨迹跟踪

这个是我的综合实践与设计的课题,作为毕设的一部分,因为时间比较紧,做的很简单。主要实现了在简单背景下,利用笔记本摄像头实时采集视频,根据肤色检测识别手部区域并跟踪手部运动轨迹。

项目的GitHub地址:(采用C++,基于opencv)
https://github.com/1092366225/HandGestureRecognition
代码百度网盘链接:
链接:https://pan.baidu.com/s/1Wh9qRPjjqY4pL5HrFfdwzg
提取码:zd2w

效果如下:(画五角星)
在这里插入图片描述

1.背景介绍

手势分为静态手势和动态手势,静态是指一个固定的手的形姿态,比如摆出“V”的pose,动态是指手部的位置或形态变化的含义,比如画个圈。

手势识别技术在人机交互领域有很大的作用和应用前景。目前已经发展地比较久了,有着很多的实现方案,但是仍然存在鲁棒性不强,识别率不高或者是无法满足实时性的问题。

手势识别主要有基于计算机视觉、基于超声波和基于惯性传感器三种实现方式。我采用的是基于视觉的,通过处理真实的视频图像来识别手势,分为手势分割、轨迹跟踪和分类识别三个过程,这里只实现了前两步。

2.主要流程与算法

流程图:
在这里插入图片描述

(1)手势分割

利用人的肤色在YCrCb颜色空间的聚类性质,根据颜色来区分图像中的手部和背景。先把图像转换到YCrCb颜色空间,然后采用otsu自适应阈值来对Cr通道进行划分。当然也可以根据经验值或者训练值直接给出阈值,不过效果较差。

处理后的二值图像如下:
在这里插入图片描述
这时候会发现有很多干扰区域,所以先对图像进行形态学处理,先膨胀后腐蚀,消除小的封闭空间。结果如下:
在这里插入图片描述
然后利用opencv中的相关算法来找出图中的各个连通域的外接矩形,同时把面积较小的先排除。

之后图像中最大的连通域有两块:手部和脸部。采用模板匹配的方法来排除脸部的干扰(也可以用其他方法,比如手指个数,肤色比例等),模板是用ps做的
在这里插入图片描述
这样就可以划分出手部区域:(图中的红色小矩形表示模板匹配最佳点的结果,绿色矩形为手部区域的外接最大矩形)
在这里插入图片描述

(2)轨迹跟踪

跟踪手的运动轨迹可以采用图像跟踪算法,经典的有光流法、camshift等,或者目前比较主流的KCF、深度学习等。我原本想采用camshift,但是没能成功,就直接利用每帧图像中检测到的手部位置来跟踪轨迹。

用手部外接矩形的左上角坐标来表示手的位置。然后等间隔采样得到坐标点序列,再根据每个坐标与坐标序列中心点的角度对其进行离散化,提取特征向量用于后期的分类识别。

例如8连通链码得到的特征向量为0-7的整数序列
在这里插入图片描述

发布了24 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/realfancy/article/details/104082637