基于手势识别的PPT控制( 二 )


删除掉上面的多余的轮廓以后基本就确定了手的位置,进行下一步操作:手势检测匹配 。上面已经介绍过,我采用的是Hu矩的模板匹配方式 。具体原理大家参考《学习》中的相关章节吧 。
我的程序时为了控制PPT,所以只做了两个模板:张开的手掌还有攥紧的拳头 。简单实用,这样匹配效果更好 。
第三步:程序控制,得到手势现在的状态以后我们如何操作呢?如何控制PPT呢?我的构思是这样的:
[cpp] view plain copy
if(检测到手掌并且没有超过5秒钟) 继续检测手并作出相应的程序响应; else 继续检测,直到检测到手掌为止
这样可以把打开手掌算作一个开关,只有正确检测到手掌并且在一定时间范围内,才打开下面的程序执行,要不然,开关都没有打开,当然就不能执行了 。这就需要你在执行程序的时候首先打开手掌让程序打开下面的开关才可以 。

基于手势识别的PPT控制

文章插图
具体手势的运动判断,如何作出PPT的响应明天再说吧,实验室要关门了 。如果大家感兴趣,可以我们继续讨论,如果觉得那些地方需要改进,欢迎指正,因为是第一次做这一方面,谢谢大家了
因为是简单的做了一个PPT控制程序,包括四个命令:播放PPT(全屏),退出全屏,下一页,上一页 。通过上面的介绍可以看出,我设置了一个开关:连续检测到手掌5帧就打开开关,可以进一步接受其他的命令,并且设置了时间,如果打开开关超过5秒钟就会自动关闭,这里设置为5秒钟是因为老师一般一个命令时间很快,关闭命令开关避免界面中其他干扰 。
播放PPT命令:如果已经打开了命令开关并且没有超过5秒钟,手掌——》拳头——》手掌 。检测到拳头并且没有超过20帧(这里设置成20帧是为退出全屏命令用的)忽然变成了手掌,大家可以这样想:拳头变成手掌,手掌打开就是打开PPT的命令 。
退出全屏:打开命令以后,一直是拳头超过20帧就可以认为是关闭PPT命令 。
下一页命令:刚开始张开手掌打开命令以后,程序会自动计算手掌的中心位置,如果手掌移动,会实时检测手掌的中心位置,如果手掌的中心位置偏移超过一定的阈值,就可以做下一页或者上一页的命令 。
命令执行:PPT的这四个命令可以通过简单的模拟键盘发送消息,“F5”,“ESC”,“->","
具体的执行过程图片稍晚再发给大家吧
界面大家可以看下,比较简陋 。开始是命令“CLOSE",检测到手掌以后打开命令开关”OPEN",然后中间显示的时间是命令已经打开的时间 。
【基于手势识别的PPT控制】右边的另一个稍大字体的显示的是攥拳持续了有多少帧 。现在设定的是持续20帧左右认为是关闭ppt,下面会显示相应的命令,这个图片你看到的“Close PPT”是上一次程序的执行命令,并不是当前的 。