一名热爱体感技术的
业余专业开发人员

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),一个是手的”抓”和”放开”(grip and move for scrolling)。

er

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

 

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

 

这二个手势的引入带来了一个新的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提供了更高层的处理和交互控制封装,它可以使用户更快的构建交互程序。这些控制包括交互区域、抓取-拖拽和针对用户按下的按钮控制等。

 

KinectInteractionConcepts交互新概念(术语)

KinectInteraction是v1.7版新加入的特性,其中有很多新的概念,所以我们有必要去深入了解它们,清楚这些新的特性能做什么,不能做什么。另外,Kinect交互控制可以与键盘和鼠标控制兼容。

2.1、Hand Tracking

第一个概念是手势跟踪,如果我们之前用过Kinect的SDK的都会熟悉骨骼跟踪,它可以为在Kinect视觉范围的人建立骨骼。但是,在KinectInteraction中,这个功能本身没有加强,而是通过结合深度信息和骨骼跟踪信息去对用户的手势进行跟踪。除了跟踪人手,KinectInteraction还可以检测和报告人手和手臂的状态,使得一些例如握紧gripping、放开releasing和压下pressing的自然手势可以被识别。所以,用户可以在传感器的正常操作范围内(近距离模式0.4米,标准模式会达到3-4米)对Kinect程序进行非接触式交互。Kinect可以检测到在它前面的用户的手,并且进行跟踪。当然,如果用户是面对Kinect的,那么跟踪效果会更好,还有就是用户刚开始是用手掌来启动控制的。

2.2、The Physical Interaction Zone (PhIZ)

物理交互区域指处于真实物理世界中用户前面的3D空间与 程序员在程序中构建的3D坐标空间 之间的映射。对于每一个当前被跟踪的用户(可以同时跟踪两个)的手势都存在一个物理交互区域PhIZ。在大部分的交互中,PHIZ都是需要的。

2.3、What Gets Tracked?

交互层可以跟踪两个手,但它可以分别属于一个或者两个用户的手。第一个与系统发生交互的用户将被指定为主用户primary user。主用户保持对系统的交互控制权,直到系统检测到用户不再使用该应用程序。虽然主用户的两个手都可以被跟踪,但只有一个被指定为primary hand(用户用来控制experience的那个手)。只有primary hand才可以控制experience(什么意思?)。当然,如果两个手都被跟踪,那么用户可以通过将当前的primary hand放下,并把另一个手抬起,放进PhIZ中来切换primary hand。

2.4、Hand State

对每一个手,都会维护一个手的状态,它指明该手属于哪个用户,对于该用户,这个手是否是primary hand,这个手是否处于交互状态,还有就是这个手是在gripping、pressing还是其他手势状态。

2.5、Tracked vs. Interactive

一个跟踪的手trackedhand表示KinectInteraction正在盯着的,并且观察这个手可能会发生的交互。一个交互的手interactive hand是处于PhIZ中,并被KinectInteraction观测直接用于交互的。

2.6、The User Viewer

在Kinect的交互控制集中,存在一个用户视图User Viewer。它是从Kinect视角观测到的用户的一个小窗口。这个视图来源于深度数据流,它会在一个Kinect Region被创建的时候自动产生。

2.7、The Hand Pointer

Hand pointer是用来标记处于PhIZ中的用户的手势的当前位置的。它可以通过Kinect Cursor光标来可视化。如果程序开启了cursor可视功能(在C#/WPF controls中是默认开启的),那么在Kinect Region(s)中,cursor表现人手形状。另外,当用户当前进行拖拽控制时,cursor就表现为一个握着的拳头。

2.8、The Hand Pointer and Other Controls

为了提供一个流畅的交互体验,一旦hand pointer在一个给定的Kinect Interaction Control中停留一定的时间,那么就认为该handpointer被该control捕捉,直到用户将手移出该control的边界。被一个给定的control捕捉到的属性由该hand pointer和捕捉到该hand pointer的control共同表示。

2.9、Interaction Types

KinectInteraction提供了以下几种交互方式:

1)Grip and Release

当用户从一个张开的手掌,到握紧变为拳头的时候,就触发一个grip交互,并且绑定手势跟踪到当前的被grip触发的control上,直到用户releases,也就是张开拳头。这个可以用来实现拖拽或者滚屏的控制功能。通过运动速度映射的改变,还可以在长列表中实现快速滚动。Control Basics例程中展示了其用法和效果。

2)Press

当用户用手掌伸向(压向)Kinect的方向(理想情况是手掌面向Kinect,而且手臂并没有完全在Kinect的方向伸展开),就触发一个press交互指令。它可以用以表示鼠标的单击功能。还可以用来配合滚屏查看器操作。Interaction Gallery例程中展示了其用法和效果。

3)Scroll

际就是通过上面的哪些控制指令进行Scroll。

2.10、The Interaction Stream

交互系统提供了交互帧流,和其他的数据源(音频流、深度流、骨骼流等等)的流模型相似。通过处理交互帧给用户与应用程序的交互提供信息,例如人手位置、人手是pressing、gripping还是releasing,还有就是当前用户正在瞄准哪个control。

 

Kinect Fusion

仅仅使用微软的深度感应器,实时捕捉和构建物体的3D模型。可以用于虚拟现实、3D打印、工业设计、服饰购物体验等,满足零售、医疗和教育众多行业的客户需求。

去年就说要加入进来,到现在才做到。显然要进行三维建模,是很吃硬件资源的。什么3GHz的CPU,2GB的支持DirectX11的显卡(以前进行视频的渲染只需要支持DirectX9.0c显卡)。不过如果真的要干这个,肯定会用很好的电脑。

提供了几个WPF和C++的的例子,可以运行看看效果。

 

上图是基本算法流程图。

上图是实际运行效果图,随着时间,重建效果越来越好。更多有关Kinect Fusion还是看他们官方文档:http://msdn.microsoft.com/en-us/library/dn188670.aspx

模型可以输出到STL和OBJ文件中。建模过程中,人不要移动,或者桌子上原有的物体也不可以移走,否则会造成标定失败,画面卡主不动。也就说,三维建模只适用于建静态场景。还说,现在三维建模的彩色数据现在还没有使用,因为技术比较困难,以后或许会加入(2014年?)。

说使用普通软件建立一个人的三维模型需要2天,而使用Kinect Fusion只需要30分钟。还说一个人的模型也就30~50MB。

Kinect Fusion我也不是弄这一行的,暂时也不感兴趣,也不进行长段翻译了。

OpenCV和Matlab范例

很多人都用Kinect做计算机视觉相关研究,微软也是知道的。所以他们现在帮我们封装好了,搭好了这个桥,直接可以用。这部分的使用,我会在近期阅读源代码后给出。(之前都是把像素复制到Mat结构中,这次的要好看看)

 

Kinect for Windows代码范例开源(CodePlex)

也就是把原来的例子代码放到codeplex.com网站上去维护了,弄成开源代码一样,其实核心算法还是没有给出的。毕竟他们半年才更新一个SDK,如果他们给的例子中代码有问题,那要到什么时候才能修改!

 

官方的话:

微软Kinect for Windows事业部全球总监Bob Heddle表示:”新的Kinect for Windows SDK 1.7版本中引入了Kinect Fusion和Kinect互动等激动人心的技术,这是我们团队与微软研究院广泛合作的又一成果。尤其是在精确3D模型创建以及基于手势的应用开发方面,SDK 1.7使得企业和开发者能够给用户提供更加一致的,直观的和自然的用户体验。”

 

为了帮助中国的企业和开发者更好的利用Kinect for Windows SDK 1.7版本的创新功能,微软还将在北京、上海、南京、成都、深圳等五地举办一系列的技术培训活动,让开发者们近距离体验Kinect for Windows及其最新SDK带来的技术优势,探索全新Kinect for Windows 如何将人机自然交互带到更加广泛的应用领域。

 

个人看法:

人脸跟踪恢复正常,在1.6中会有位移(1.5没有),1.7改正了。

 

有二个让我匪夷所思的下载地址:

Kinect for Windows SDK v1.7

http://www.microsoft.com/en-us/download/details.aspx?id=36996

Kinect for Windows Developer Toolkit v1.7

http://www.microsoft.com/en-us/download/details.aspx?id=36998

这二个下载显示,他们在一个星期前,2013-3-12就已经可以下载了。

 

参考网站:

MSDN:

http://msdn.microsoft.com/en-us/library/jj663803.aspx#SDK_1pt7

http://blogs.msdn.com/b/kinectforwindows/archive/2013/03/18/the-latest-kinect-for-windows-sdk-is-here.aspx

http://msdn.microsoft.com/en-us/library/hh855348.aspx

 

http://kheresy.wordpress.com/2013/03/19/kinect-for-windows-sdk-1-7-with-kinect-fusion-and-kinect-interactions/

http://www.kinectutorial.com/?p=1283#0-tsina-1-56068-397232819ff9a47a7b7e80a40613cfe1

微软携Kinect进军商场墙壁显示:

http://www.36kr.com/p/201963.html

 

Kinect SDK v1.7 新特性、交互框架与新概念

http://blog.csdn.net/zouxy09/article/details/8697647

CSDN     Kinect SDK v1.7迎来重大更新

http://www.csdn.net/article/2013-03-18/2814530-Kinect-for-Windows-SDK-1.7

Kinect SDK1.7 迎来重大更新

http://blog.csdn.net/sangni007/article/details/8691925

 

第一部分上海Kinect 培训活动

上海Kinect活动链接地址,之前是从Kinect开发群中收到邮件才知道这个活动的:http://www.headin.cn/Themes/Activity/Details/?activityId=5137f2be869d08129c7c821b。感谢海丁网和微软组织这次活动,以后有感兴趣的活动只要价格合理,我也会去参加。从参加人员列表可以看到,有学生、项目经理、程序员、交互设计师等等,从事各种Kinect的研发。下面会一一介绍。一共来了100左右个人,可以说十分壮观,大多数人都没用过Kinect SDK,所以主要还是想法交流(直接不进行代码培训了)。

看到有同济的三个大三的学生使用Kinect做了一个换人脸面具的应用,WPF开发,主要使用人脸跟踪SDK。看到有公司用Kinect开发游戏,好多款游戏,flash技术,1.0的SDK,至于什么游戏就不说了,主要就是使用Kinect作为原来的鼠标输入,让用户用手或者身体进行游戏,有更强的游戏代入感。

 

列出一些人的观点,多是微软员工的话:

leap和Kinect结合使用,leap在近距离的准确性是很高的,而Kinect更加适合用于远处。

手指识别不准确,微软暂时不会开发。

未来的猜测,可能使用无线传输Kinect数据。可能使用USB3.0技术(可信度极高)。更高清的摄像头(必然)。

Depth数据最高可以达到150FPS,让你cpu消耗殆尽。

只要你使用Kinect for Windows sensor,也就是京东那个1930元的Kinect(其他地方买也无所谓),你就可以免费试用微软提供的SDK开发人和商业应用。(我担心的是操作系统要多少钱,因为SDK必须用在微软的操作系统上才行)

 

下面列出一些本次活动的一些想法,大部分都只是思路和想法,一般人都会有,这里抛砖引玉,但愿可以激发你的灵感。(如果未来有哪些实现了其中的想法,也会给他进行宣传):

 

基于Kinect Fusion的:

想法1.家具装潢行业。说带电脑和Kinect到一个需要装修的高级客户家里,在他家里扫描一遍,数据都存在电脑里了,返回公司,运行算法建立三维模型。然后通知高级客户,让他选择家具,直接把三维家具拖放到已经建好的三维家庭模型中,家具大小样式可以控制和选择,用户设计好了后,公司导出所有家具的三维数据给各个生产公司(这些公司有的在武汉啊,有的在海南啊,说不准有的在法国)进行生产。生产完毕就直接把家具添置到房子中。

 

想法2:三维人体建模用于服装行业。说买家使用Kinect对人体进行建模后,把数据传到淘宝上,淘宝卖家就给出买家合适的服饰。新一代购衣体验,如果真的做到,那就真的是新一代服装革命了。自然还有大家都知道的体感试衣镜,我听到有人吐槽现在国内做的体感试衣镜很差,衣服都是贴在人物上,很难看,或者是对一件衣服进行三维建模就需要2天太慢等等之类的,也就是说,国内和国外差距很大。

 

想法3:三维打印。他们说本来要带一个三维打印机过来的,可惜了,我没见识到。打出个人物头像该有多帅。说,以后买东西不要去商店,直接打印出来就行了。

 

其它想法:三维教育。

 

基于Kinect Interations:

想法1:就是那个微软例子中的尼桑的汽车宣传片,抬头可以看到汽车的天花板,低头可以看到方向盘。

 

想法2:海报互动,交互广告。说一张大电影海报,你挥手,里面的蝙蝠侠也一起挥手。显然这个不难做,电影院那边一向不差钱。我看到电影院的广告显示屏都是使用linux程序开发的,但愿微软操作系统便宜点,这样此类广告才能大放光彩。相对于其他想法,这想法比较容易实现,并且具有直接的商业价值(用户感兴趣,就会来看,如果再加一点语音识别,蝙蝠侠和你对话,那就更强大了)。

 

想法3:现实增强。没有例子,因为都不说。

 

欢迎补充更多的有趣的想法。