Kinect2.0 动态手势+静态手势识别控制PPT 骨骼滤波的实现

看了很多文章以及代码,终于在一个多月前自己写了一个手势识别控制PPT的程序,准确度还是不错的。下面来说一下我的大体思路。

1.静态手势识别

静态手势在Kinect SDK中有,它可以识别手展开(open),握拳(close),比( •̀ ω •́ )y的手势(忘记英文是啥了)。就在Handstate里,搜一下就有~。静态手势识别相对来说还是比较容易的。

2.动态手势识别

此处,我主要识别了,向左,向右挥手,以及手臂上抬这几个动作。同时,我还将动态手势与静态手势结合了一下,例如:手臂上抬,并比出( •̀ ω •́ )y的手势。下面来说一下我的大体思路

(1)骨骼滤波

滤波有很多种,由于能力有限(lll¬ω¬),我只比较了均值滤波和中值滤波,最终我选定了均值滤波。

中值滤波,顾名思义就是取中值呗...我取了前5帧和后5帧的数据,计算中值。之前看有人用中值滤波去进行骨骼滤波确实过滤掉了一些误差较大的数据,可是,我实际操作的时候发现,原始数据和中值滤波后的数据也没啥太大的差距(lll¬ω¬),据我分析,有可能是我用的是Kinect2.0,它的精度比较好吧,此处放上一张数据图。Kinect2.0 动态手势+静态手势识别控制PPT 骨骼滤波的实现_第1张图片

蓝色是原始数据,红色是中值滤波后的。

接下来我用了均值滤波,和中值滤波比较,均值滤波的线更圆润。。。但是吧,均值滤波有延迟呀!延迟大概是0.3秒左右吧,不过对于我这个项目来说倒是不太影响什么。接下来放一张均值滤波的图。

Kinect2.0 动态手势+静态手势识别控制PPT 骨骼滤波的实现_第2张图片

红色是滤波后的,看看吧,多么的圆润~

至此,我决定采取了均值滤波的方式。

(2)手势识别

左右挥手,手臂上抬,都是针对手部和肘部的。因此将这两个关节点滤波后,我将手部的坐标做了坐标变换,变成了以肘部为原点的。判断左右挥手,我主要是通过采集12个手部位置的数据来判断。为什么是12个呢。。。我在家挥了一天的手,发现了挥手的数据基本保持在12个左右..只要12个数据满足要求了,基本就可以确定为挥手了~嘻嘻

手臂上抬主要就判断Y坐标呗,这个我也实验了很多回,发现判断上抬需要6个数据就够了~。

至此动态手势识别就完成啦

(3)控制PPT

通过控制键盘来控制喽

!!!!如果各位大佬有更好的思路或者方法,请联系一下我叭

你可能感兴趣的:(Kinect)