深入理解Kinect for Windows开发

                                                                         ----微软Build2012大会:Kinect for Windows Programming Deep Dive

    这个周末看了两天的微软Build 2012大会,真的是一次盛会,上面有很多的演讲主题,都是微软相关技术和产品的最新动态,我比较关注.NET、WPF、Office及Kinect相关开发,上面的演讲视频和PPT都可以下载,个人觉得比较精彩的有The Evolution of .NET ,回顾了微软推出.NET以来的历次开发者大会推出的新版本和新特性,里面还有10多年前比尔盖子老师在开发者大会上宣布.NET战略时的演讲视频,不觉得感叹岁月是把杀猪刀啊。 What's New for Developers in Office 2013 and SharePoint 2013 介绍了不同于以往的以VBA,SharedAddIn,以及VSTO的全新的Office开发方式OfficeApp,Building apps for Office and SharePoint 2013 using the web technologies you know and love, Part 1Part2介绍了如何使用各种我们熟悉的技术如Html、Javascript、C#等来构建OfficeApp。上面还有很多关于Windows Phone 8,WPF4.5等相关的介绍,主题很多,强烈建议大家有空可以上去看看。

    大会上关于Kinect开发有三个,第一个是微软研究院讲的Super-Natural Interaction这个PPT比演讲视频都大,达到了罕见的997M,为啥这么大呢,因为里面嵌入了一个长达40分钟视频,哈哈,这个演讲主要演示了微软研究院正在进行的各种人机交互,虚拟现实等研究,非常的Cutting-edge,里面也有和Kinect相关的部分,有兴趣的可以看看。第二个是Kinect Design Considerations,一则关于Kinect应用程序设计是应该考虑的问题比如交互方式的设计的演讲,我没有太仔细看,不过内容应该和Kinect Human Interface Guideline内容差不多,您可以在Kinect Developer Toolkit中查看。第三篇演讲是 Kinect for Windows Programming Deep Dive  我将这个翻译为了深入理解Kinect for Windows开发,相对来说该演讲和Kinect开发比较相关,现与大家分享,该演讲上面写的级别为 300-advanced,个人觉得这个演讲内容其实很简单,只是对Kinect能够获取的相关数据源,Kinect SDK处理过了的可供识别的数据源,以及未来的趋势和大家做了一下介绍。Kinect SDK中其实没有太多的东西,真正的则在于各种模式识别算法,比如通过深度数据,红外数据,进行各种物体识别等等,有了这些数据,尤其是1.6版本的SDK提供的获取红外原始数据,就可以通过这个数据,结合深度数据做出很多非常令人惊叹的应用来。废话不多说了,下面和大家分享一下该演讲的主要内容,也算是一个关于Kinect开发的比较好的入门介绍吧。

一 大纲

Slide2

    演讲大体分为5个部分,第一部分介绍了Kinect SDK的开发方式以及运行环境,第二部分是写代码,讲解Kinect中的一些彩色,深度,骨骼等数据的处理和显示,第三部分讲解了传感器直接产生的数据流,包括彩色,深度,红外,语音,加速器数据源,第四部分讲解了经过Kinect SDK对原始数据流处理后的可供用来进行直接识别的,骨骼,语音及面部识别数据源,最后一部分讲解了未来Kinect可进行的一系列应用。现在先来看第一部分吧。

二 Kinect应用场景及开发环境

    首先介绍了一下Kinect的应用场景。主要有三大类方面的应用。第一是自然人机交互界面。比如说一些像少数派报告中的那种用手指非接触即可操纵大屏幕上的显示内容。这在一些高科技或者科幻类电影中经常能够看到这类的场景。还有一些就是在国外已经有的应用如Kinect虚拟试衣间,Kinect车展演示广告,Kinect 手术室影像操作,还有Kinect操作幻灯片Kinect进行照片浏览 等等,这些自然人机交互界面的应用带来了新的用户体验。第二种是自然环境识别,比如根据Kinect 产生的深度数据,红外数据对物体进行三维扫描重建,利用Kinect进行机器人导航进行障碍物自动回避等。第三种是自然用户的识别,比如说利用Kinect来进行姿势识别,人脸识别。比如说一些大家比较熟悉的XBOX360 中的 舞林大会运动会大冒险等体感游戏,这些都是利用Kinect的一些数据来进行用户的动作识别,从而参与到游戏中的互动。还有一些增强现实的应用,利用了上面的三个方面的特性,比如说利用Kinect来将荧幕变成触摸屏,并在上面可以进行各种操作,等等应用。

Slide3

 

    要开发上面的应用,首先要了解一下开发环境,如这张幻灯片所示:

Slide4

    Kinect 提供了非托管(C++)和托管(.NET)两种开发方式的SDK,如果您用C++开发的话,需要安装Speech Runtime(V11),Kinect for Windows Runtime和驱动的,如果您使用C#和VB.NET的话,需要Microsoft.Kinect.dll和Mirosoft.Speech.dll两个dll,这两个其实是对前C++里面的两个dll的.NET封装,不论何种开发,您都需要安装driver,所有这些都包含在Kinect SDK安装包中,安装方法您可以参考之前的文章。Kinect开发支持Windows7/Windows Embedded Standard/Windows8操作系统,最新的1.6版本的SDK还支持虚拟机里面的Windows系统,不过只要年代不太久远的Windows系统应该都是可以的。上面写的最好使用.NET 4.0/4.5也只是建议,老版本的应该也行。如果是使用.NET开发方式的话,您需要安装.NET Framework,IDE可以使用Visual Studio 2010/2012。

三 代码演示

    这部分主要是通过编写代码演示Kinect的各项功能,代码我在这里就不讲了。

    首先第一个演示是显示彩色影像,比较简单。然后是结合深度影像数据显示彩色影像数据上对应某一点的深度值。

demo1

     图上使用鼠标点击就能够加上一个标签,标签里面的值是该点的深度值,这个功能应该是比较好实现的,主要是展示如何使用彩色影像数据和深度数据,您如果感兴趣的话看完这篇文章应该就能实现这个功能。

    然后演示了骨骼追踪功能,图中追踪了头部,双手的位置,并显示了两只手所处的深度值,头部上显示的Tracking ID,Kinect能同时追踪6个待选目标,但只有两个目标处于活动状态。每一次追踪都会分配给目标一个Tracking ID。

demo2

这个功能主要演示了如何使用骨骼数据,您如果感兴趣的话看完这篇文章应该就能实现这个功能。

     除了1.5及之前能够提供的各种数据之外,1.6 的SDK提供了红外影像数据,您可以利用数据校准彩色影像数据,使得在较暗的条件下也能够进行人物识别。其实Kinect骨骼识别主要是通过深度数据来实现的,而深度数据是通过红外发射接收产生的,1.6版本的SDK提供了我们直接访问和操作红外数据的能力。

demo7

    第四个Demo是演示了Kinect的面部识别功能,Kinect的面部识别是在1.5 SDK中引入的,面部识别可以识别最多达一百多个面部特征点,下面是演示的Demo:

demo3

    上面的功能在Kinect Developer Toolkit中有实例和源代码,您可以下载查看,入门的话,您也可以看这篇文章,比较简单的对使用FaceTracking的一点介绍。

    Kinect除了这些功能之外还有强大的语音识别功能,在这篇演讲中没有演示出来,不过在Super-Natural Interaction这篇演讲的视频中,您可以体会该改功能的强大,Kinect语音识别不仅能够识别出声音,而且还能对声音的来源方向进行识别,且具有强大的去噪增强功能,要了解这些你可以看这篇文章,对Kinect的语音识别做了一些简单的介绍。

四 Kinect数据源及应用

    Kinect开发涉及到的数据源分为两类:

    一类是传感器本身产生的原始数据源,比如说彩色影像数据源,深度影像数据源,语音数据源,红外影像数据源,加速计数据源,其中红外影像数据源,加速计数据源是在1.6的SDK中新加入的。下面这张图很好的说明了各个数据源:

Sensor Resource Image

    第二类数据源是,SDK中通过一些算法识别出来的可以直接拿来进行识别的数据源,他们包括:骨骼追踪,语音识别,面部识别数据源。

Recognize source

    可以看到,骨骼追踪数据源是在深度影像数据源的再通过一系列算法实现的,语音识别是通过语音数据源再通过一系列算法实现的,而面部识别则综合了彩色影像、深度影像和骨骼追踪为系列数据源的再通过一系列算法实现的。这些功能都是通过SDK来实现的。

    有了这些数据源,就能够进行各种应用了:

application

    典型的应用有绿屏抠像,这个功能在一些电视节目录制,比如天气预报节目中都是应用的这个实现的,他把任务从背景中分离出来,然后可以随意的更换背景,这个功能用到了影像数据和深度数据,你可以参考这篇文章,里面有一个简单的例子。第二个应用是产生点阵云,就是通过Kinect的深度影像数据产生每个点的位置信息然后生成三维模型。如下面这个例子:

demo4

    图中左边是通过Kinect的深度影像数据产的三维建模图像。

    第三个应用是魔镜功能,我觉得应该是一些类似哈哈镜效果或者是IOS中的Photo Booth应用,主要用到了彩色影像数据,面部识别,骨骼识别等功能。还有一些就是虚拟试衣间这样的功能,最后的一个应用场景就是各种NUI交互界面了。

五 展望

    除了以上的几种典型的数据源之外,还展示了下一步的计划,比如说针对景深数据进行进一步处理的Kinect Fusion数据源。

next

    下面是演示的例子:图中,右边桌子上摆放了一个茶壶,然后利用Kinect对该茶壶进行了三维建模,然后。移除右边实物茶壶后,用户可以对虚拟的茶壶进行各种操作,神奇吧,这些都是下一个版本或者是将来的SDK能够方便我们或者简化我们实现这些功能准备添加的功能。

demo6

到最后展望了下一步要进行的工作:

Slide22

    可以看出Kinect的愿景是使得计算机能够看到、听到、能够更加理解周围的人和环境。

    Kinect SDK的版本发布是很快的,自从今年二月份发布了Kinect Sensor for Windows 体感仪及Kinect for Windows SDK 1.0官方版本以来;5月21日 发布了1.5版本SDK以及1.5的Developer Toolkit及调试工具Kinect Studio 1.5,不久又发布了Developer Toolkit 1.5.1及Developer Toolkit 1.5.2;10月9日发布了1.6版本的SDK和Developer ToolKit,同时宣布正式在大陆开售Kinect Sensor for Windows体感仪。每一个版本都增加了一些新的功能。相信下一个版本的SDK 也会有新的功能加入。

    相信大家看了这个演讲之后应该可以感受到Kinect带来的变化,也相信以后Kinect开发能应用到日常生活中的例子会越来越多。

    最后,希望大家有空到Channel9上看真人演讲哦,上面还有很多有意思主题演讲,所有演讲的PPT都可以在线看,视频都提供下载,当您不确定那个演讲想不想看时,可以看看下面的在线屁屁踢哦,当然除了那种900多M的变态PPT之外其他的都可以在线浏览,这样您就可以迅速的了解演讲内容以及对该内容有没有兴趣啦。

posted @ 2012-11-05 00:43 yangecnu 阅读(...) 评论(...) 编辑 收藏