日期:2014-05-16  浏览次数:20743 次

Kinect for Windows SDK v1.7详细介绍+上海Kinect培训活动

Kinect for Windows SDK v1.7详细介绍+上海Kinect培训活动

       近期微软动了大手笔,首先是SDK1.7更新然后是Kinect各种培训活动。有幸在上海参加了这次Kinect培训活动,和不少相关人员进行了交流,也倾听了不少开发人员的想法。此篇文章分为两部分,第一部分是Kinect SDK v1.7的全面介绍(参考目前众多博客文章),第二部分是这次Kinect活动所有听到的观点,内容比较散乱。

 

第一部分Kinect for Windows SDK v1.7详细介绍

       本来说3.18更新SDK,由于时差我到19号上午才下载到了(微软凌晨也不发布版本,原来到了上班时间才发布),发布的SDK是在美国的官网,中文的网站过了好几天才更新(看来没什么人维护)。半年才发布了一个SDK,速度很慢。

       最主要的更新是添加了Kinect Interactions和千呼万唤才出来的Kinect Fusion。

新的Kinect交互

       也就是大家说的两个新的手势,一个是“推”(press for selection),一个是手的“抓”和“放开”(gripand move for scrolling)。

       这张图片很好说明了新的交互手势。左上就是推的手势(press toselect,推手势作为选定,也就是单击一样)。左下是抓取后移动。右下是挥手申请跟踪。左上是双手抓取进行拉升(没有直接包含在手势中,但是可以借助双手抓取这个手势扩展出来,好吧我就不明白为什么你们就不做好,一劳永逸,毕竟自己做的话,还是要考虑一些问题的。)。

 

       这张图片说了一种商业应用,显然借助现在的交互和人脸跟踪,不难做到(难得是如何把眼镜显示上去,如果人脸旋转怎么办)。

 

       这二个手势的引入带来了一个新的stream,叫Interaction stream,类似现有的Depth Stream,Video Stream,Skeleton Stream。可见以后的手势都会在这个独立的Stream里,这样调用现在很方便。

肯定会有人说这个功能太简单了吧,我也能做到。但是微软说他们用了上千个小时研究开发和测试出来的,说可以缩短开发者的手势体验方面的研发时间。因为你没认真去看。

1.7的交互给出了一个新的概念,物理交互区域。有人把它比喻成鼠标垫,但我觉得不是很贴切。我们看下具体的说法:


       物理交互区域是根据用户的位置和身高自适应的,也就是说小孩的可操作区域小,大人的手势区域大,在这个区域进行手势运动则进行检测。从后2张图我们可以看到物理交互区域的形状是扇形形的,显然我们进行各种手势动作,手一般围绕肩关节或者是肘关节移动,移动过程中路径有一定弯曲。最终就是希望不管什么用户都能够很舒服的进行人机交互,获得很好的人机交互体验。具体这个区域如何使用,我还没有研究,但可以肯定的是他给出的手势都需要在这个区域完成才会被检测。

       在这次活动中,他们提到那个手往前推的动作,也不是简单地判断手平行于z轴向kinect的做坐标平面移动的。人的手往前推,肯定还是有所偏移的,如果发生了偏移则手势识别失败,用户肯定不断学习这个手势不断失败,体验一定很不好。他们提出了一个“按压焦点”的概念,你进行按压时给出的焦点一般不是在手心的,而在一个更适合的地方,然后你继续按压时有种像吸铁一样的感觉,这样可以帮助用户更好的完成这个推的动作。(当时他介绍也不是很清楚,这个文章还没看到,如果看到我再补充吧)

       当然也说了推手势确定会比较快,也比较有反馈效果,而是用来的手势悬停以表示确定。显然悬停触发手势很慢,并且无论用户如何学习这个手势都得等好几秒,而“推”就不一样,用户不断学习这个手势过程中,速度越来越快。

       总之,他们就整出这二个手势,但考虑很多很多方面。

 

       他们不但做了这个手势,还在WPF中提供了专门用于这些手势的UI控件(哎,没怎么学C#,用不上)。引用别人的话:

- KinectCursor(对应鼠标的光标,这可说是Kinect体感交互时代的体感光标)

- KinectTileButton/KinectCircleButton(适合点击),

- KinectScrollViewer(适合抓取并拖动)

      

       微软给出了一些开发建议:

       1.用户距离体感1.5~2m

       2.屏幕大小要小于46英寸(1.1684米)

       3.避免极端倾斜

       4.为了可靠跟踪,避免大量光线和反射才聊。

 

框架:


       看上去意思是,C++也可以用。但是目前没看到微软提供C++的例子代码,看来只有自己去研究了。

       下面长段引用zouxy09的话(一直到Kinect Fusion前)(翻译的不错,我就不翻译了):

Kinect v1.7 给用户提供了两种编程API,分别是用C++实现的native code APIs ,和用C# 与 Visual Basic编写的、被更高层封装的managed code APIs。

Native API提供用户识别、人手跟踪、人手状态(被跟踪、交互等等)和瞄准按下等基础特性。这个API还提供了一个全新的数据流,称为interaction stream(交互流)(在所有的版本中,Kinect都是以流的形式来访问数据的,包括旧版本的深度流、颜色数据流和骨骼流等等),它反映的是手势识别事件的触发。

Managed API通过C#实现,它除了提供和nativeAPI相同的上述功能外,还通过C#/WPF controls提供了更高层的处理和交互控制封装,它可以使用户更快的构建交互程序。这些控制包括交互区域、