【Alex专栏】Kinect应用设计5

来源:互联网 发布:java获取一周的第一天 编辑:程序博客网 时间:2024/04/29 08:29

触发机制是很有意思的一章

与触摸屏的Tap、鼠标的Click不同,体感没有特定的触发动作,换言之我们需要自行设计一个合理的触发动作。

如果设计不合理,就会造成误触发,无法触发或者用户不愿意去使用等问题。

常用的触发机制有语音、以及不同的手势,接下来我们将一起探讨这些设计以及背后潜在的问题。

—我是目录—

动作识别

手势

|- 触碰

|- 挥动

|- 触发机制

|- 双手缩放

姿势

|- 关键知识

|- 设计方案

|- 前景与限制

—目录结束—

语音

语音是一种非常有效的室内控制方式,特别是在封闭环境内。我们不再需要摆一些姿势来完成触发(几乎所有的非自然手势都需要用户学习,有研究显示,大部分用户,无论是手指、手臂或者是其他动作的姿势,常用的能记住的手势不超过5个,这与人的短期记忆数7±2基本相符)。

headache

“发送的手势是什么来着?我想想…”

例如我们对着设备说“XBOX”、“Kinect”,表示触发。

风险在于不适合在吵杂的环境中应用,尽管Kinect的麦克风阵列有指向性以及能大概的识别用户,实际使用中,识别率仍会受到影响。一个可行的方案是不使用Kinect的麦克风阵列输入声音,而转用蓝牙耳机(例如具有颌骨技术的设备,较单纯的双麦克风耳机,能消除更多的噪音,提高识别率),这种方案比较适合用于演讲时。

noiseblock

“用好耳机,效果不错,妥妥的”

语音识别的第二个风险在于可能降低用户的群体舒适度(如在办公室中大声使用语音命令),所以我们建议,语音很好,但不应作为唯一的输入途径,并且应该提供开启选项给用户按需选择。

 

动作触发

常见的动作方案有:关节进入指定区域、抓握拳头。

关节进入指定区域通常用于起到一个告诉Kinect “我需要操作”的作用(Engage)

例如shoulderCenter或者hipCenter的z轴在2米以内时,用户可以触发,这种情况常用于户外环境,让路人和你的应用开始交互。

distance

又或者是当用户的手抬起时(即hand的Y轴大于elbow)、手进入特定的区域时(上一章提到的蓝色的手臂活动空间),用户获得光标。

image

抓握拳头常用于拖拽(Drag)等动作,OpenNI可以很好的判定,但是Microsoft的SDK中缺乏该动作。

为此我们可以使用一些简单的判断,例如先以关节中心(如handRight)截取一个感兴趣区域(即ROI),然后统计ROI中,属于用户的像素点数占总像素点数的比例,当小于一个阙值时(如25%),就认为用户握拳了。这样的方法实现起来速度快。

缺点是会把“手刀”的情况也误认为是握拳。单独作为判断依据的话,往往容易误判。然而考虑到开发效率、运算效率以及用户日常使用习惯而言,这种方法仍是一种不错的选择。在优化方面,可以以handRight到wristRight为边长的一半,取正方形ROI(圆形计算较慢),以匹配不同远近大小的手型;也可以配合上面的“关节进入指定区域”辅助判定。

fist

当然,有时为了达到更高的识别率,可以酌情使用OpenCV等辅助SDK进行识别,或者干脆改用OpenNI 大笑

值得注意的是机器学习型的识别,对于应用开发者来说往往需要耗费大量精力去训练样本,以提高识别率,故应慎重。

 

小结

触发机制大体须要注意:

1. 必须容易达成(例如单手动作显然比双手动作简单)

2. 长期使用不会造成负担(如小幅度的动作不容易让用户疲劳)

3. 不容易误判


转载自http://www.kinectutorial.com/?p=1200本人纯粹是收藏,方便以后查看~

0 0