触发机制是很有意思的一章
与触摸屏的Tap、鼠标的Click不同,体感没有特定的触发动作,换言之我们需要自行设计一个合理的触发动作。
如果设计不合理,就会造成误触发,无法触发或者用户不愿意去使用等问题。
常用的触发机制有语音、以及不同的手势,接下来我们将一起探讨这些设计以及背后潜在的问题。
—我是目录—
动作识别
手势
|- 触碰
|- 挥动
|- 触发机制
|- 双手缩放
姿势
|- 关键知识
|- 设计方案
|- 前景与限制
—目录结束—
语音
语音是一种非常有效的室内控制方式,特别是在封闭环境内。我们不再需要摆一些姿势来完成触发(几乎所有的非自然手势都需要用户学习,有研究显示,大部分用户,无论是手指、手臂或者是其他动作的姿势,常用的能记住的手势不超过5个,这与人的短期记忆数7±2基本相符)。
“发送的手势是什么来着?我想想…”
例如我们对着设备说“XBOX”、“Kinect”,表示触发。
风险在于不适合在吵杂的环境中应用,尽管Kinect的麦克风阵列有指向性以及能大概的识别用户,实际使用中,识别率仍会受到影响。一个可行的方案是不使用Kinect的麦克风阵列输入声音,而转用蓝牙耳机(例如具有颌骨技术的设备,较单纯的双麦克风耳机,能消除更多的噪音,提高识别率),这种方案比较适合用于演讲时。
“用好耳机,效果不错,妥妥的”
语音识别的第二个风险在于可能降低用户的群体舒适度(如在办公室中大声使用语音命令),所以我们建议,语音很好,但不应作为唯一的输入途径,并且应该提供开启选项给用户按需选择。
动作触发
常见的动作方案有:关节进入指定区域、抓握拳头。
关节进入指定区域通常用于起到一个告诉Kinect “我需要操作”的作用(Engage)
例如shoulderCenter或者hipCenter的z轴在2米以内时,用户可以触发,这种情况常用于户外环境,让路人和你的应用开始交互。
又或者是当用户的手抬起时(即hand的Y轴大于elbow)、手进入特定的区域时(上一章提到的蓝色的手臂活动空间),用户获得光标。
抓握拳头常用于拖拽(Drag)等动作,OpenNI可以很好的判定,但是Microsoft的SDK中缺乏该动作。
为此我们可以使用一些简单的判断,例如先以关节中心(如handRight)截取一个感兴趣区域(即ROI),然后统计ROI中,属于用户的像素点数占总像素点数的比例,当小于一个阙值时(如25%),就认为用户握拳了。这样的方法实现起来速度快。
缺点是会把“手刀”的情况也误认为是握拳。单独作为判断依据的话,往往容易误判。然而考虑到开发效率、运算效率以及用户日常使用习惯而言,这种方法仍是一种不错的选择。在优化方面,可以以handRight到wristRight为边长的一半,取正方形ROI(圆形计算较慢),以匹配不同远近大小的手型;也可以配合上面的“关节进入指定区域”辅助判定。
当然,有时为了达到更高的识别率,可以酌情使用OpenCV等辅助SDK进行识别,或者干脆改用OpenNI
值得注意的是机器学习型的识别,对于应用开发者来说往往需要耗费大量精力去训练样本,以提高识别率,故应慎重。
小结
触发机制大体须要注意:
1. 必须容易达成(例如单手动作显然比双手动作简单)
2. 长期使用不会造成负担(如小幅度的动作不容易让用户疲劳)
3. 不容易误判
转载自http://www.kinectutorial.com/?p=1200本人纯粹是收藏,方便以后查看~