背景
Kinect(全称Microsoft Kinect Sensor)是当今风靡全球的体感摄像头,伴随微软娱乐业务主打的XBOX360的推出而全面问世。2009年6月1日微软于E3游戏展中公布代号为Project Natal的体感装置,让玩家可以通过玩家的肢体动作或语音来进行Xbox 360界面以及游戏的操控。隔年6月,微软在E3游戏展中宣布Project Natal体感装置的正式名称为Kinect,并预计于11月在美国上市,售价USD149。11月4日Kinect 正式在美国上市,11月18日在香港上巿,11月20日在日本及台湾上市。
自XBOX360推出之后,微软全力打造围绕体感摄像头Kinect的应用。不仅自身大力投入自然人机交互(Natural Interact)算法研发,还提供最新软件开发套件(Kinect SDK)供开发者使用,为公司和开发者提供了创新应用空间。2012年2月1日,微软正式发布面向Windows系统的Kinect版本“Kinect for Windows”,建议售价USD249。而在2012年晚些时候,微软还将发布面向“教育用户”的特别版Kinect。在Kinect正式发布后,至今已经推出了多款配套游戏,包括Lucasarts出品的《星球大战》、MTV推出的跳舞游戏、宠物游戏、运动游戏《Kinect Sports》、冒险游戏《Kinect Adventure》、赛车游戏《Joyride》等。
附上文中一些常用称谓的全称和统一中文译名:
Kinect/Microsoft Kinect Sensor/微软Kinect体感器;OpenNI/Open Natural Interaction/自然人机交互开源项目;SDK/Software Development Kit/软件开发包;API/Application Programming Interface/应用程序编程接口;Sensor/传感器,本文中特指体感器(至少具有深度信息);Sensor Device/体感装置;Redist/Redistribution/发布版本(与Development开发版本相对应);
Kinect外观
![](https://img-my.csdn.net/uploads/201207/26/1343314630_8516.png)
初识OpenNI
刚接触Kinect开发,不免感觉百事待举。一开始就遇到两种开发工具的选择,一种是微软提供的Kinect SDK(更新:现在最新版是1.6版本),可以在Kinect官方网站上下载;一种是PrimeSense公司提供的OpenNI,包括开源开发包和一些中间件。这里需要注意的是,微软推出的Kinect体感器有两款,一种是起初的XBOX360版,一种是Kinect4Windows版。前者OpenNI和Microsoft Kinect SDK均可支持,而后者只有Microsoft Kinect SDK支持(更新:PirmeSensor v0.93版本也可支持Kinect4Windows了)。本着学习的目的,我先从OpenNI入手开始Kinect开发的探索。
使用OpenNI进行Kinect开发,有必要在这里先简单介绍一下OpenNI的结构。
OpenNI(Open Natural Interaction/开源自然人机交互)是一种多语言,跨平台的API框架,提供的API可用于设计自然交互应用程序。自然交互指的是人以自然的形式与计算机进行交互,比如通过动作和声音两种方式。而这两种方式正是Kinect输出的源信号可以给出的信息:深度视觉和声音。而OpenNI也围绕这两种信号,意在建立一套能与Sensor和Middleware(中间件,指能分析并理解来自于场景中的视觉和声音信号的软件组件,意即实现图像/音频处理mid-level任务——输入图像或音频信号,输出理解的信息——的模块)进行通信的标准API。OpenNI提供的API中,一套通过Sensor装置实现,一套通过Middleware实现。OpenNI打破了Sensor和middleware之间的依赖性,因此API使得应用程序可以在不同的middleware模块之上进行撰写和移植,而不会有任何额外效应。此外,OpenNI API使得middleware开发者可以在元数据之上进行算法开发(不依赖于sensor装置的实现)并且让sensor制造商可以有能力生产能够支持任何符合OpenNI标准应用程序的sensor。
下图显示了OpenNI的层级结构。最上层是Application/应用程序,为之提供API的OpenNI在下层,可以与sensor和分析sensor数据的middleware进行通信。
(图片引用自openni.org)
安装OpenNI
在了解了OpenNI结构的基础上,所需要的开发包的意义就比较清楚了。安装完整的OpenNI框架需要3个模块(我刚入门时是参考小斤的博文,有些信息已经过时了,框架可供参考)。1是OpenNI,包含所有需要的API;2是SensorKinect,提供sensor的驱动程序;3是NITE,一套功能强大的中间件。下面介绍三样东西分别从哪里获取。
1). OpenNI
在http://www.openni.org/Downloads/OpenNIModules.aspx 选择OpenNI Binaries,Stable,然后根据你的平台选择一个Development/Redist(Dev和Redis的区别在于,前者有很多sample源代码,后者没有)的版本。源码可以在GitHub上下载http://github.com/OpenNI/OpenNI。
2). SensorKinect
这个就是驱动了,在GitHub上avin2(http://github.com/avin2/SensorKinect)的bin中下载。这里新手们要注意的一点是,这里安装的是avin2提供的SensorKinect驱动包。而不是OpenNI主页上(http://www.openni.org/Downloads/OpenNIModules.aspx)PrimeSense提供的Hardware Binaries。这是由于OpenNI.org上的驱动程序所支持的硬件是PrimeSensor和Asus Xtion PRO,与Kinect有所区别。
3). NITE
这是PrimeSense公司提供的Middleware,在http://www.openni.org/Downloads/OpenNIModules.aspx 选择OpenNI Compliant Middleware Binaries,Stable,然后根据你的平台选择一个Development/Redist的版本。
另外,开发者还可以选择下载一个PrimeSense Package,在http://www.openni.org/Downloads/OpenNIModules.aspx中选择OpenNI Packages,根据你的平台选择下载。这是一个一劳三得的方法,Package能一次性把OpenNI,PrimeSensor Driver和NITE都安装了。所以要注意,如果不需要安装PrimeSense的话,记得在安装的过程中选择custom模式,然后去掉PrimeSensor的勾选。
我下载的版本号以及最新Stable版本号(截止编辑时):
SensorKinect-Win32-5.0.3.4/5.1.2.1(May 15th 2012)
OpenNI-Win32-1.3.2.3/1.5.2.23
NITE-Win32-1.4.1.2/1.5.2.21
Stable-Win32-Dev | Stable-Win32-Redis | other | |
OpenNI | 1.5.2.23 | 1.5.2.23 | |
SensorKinect | 5.1.2.1(Unstable) | ||
NITE | 1.5.2.21 | 1.5.2.21 |
OpenNI package
按顺序(先OpenNI,后SensorKinect)安装好了之后,就可以进行开发了。我们可以在OpenNI的安装目录中找到大量的Sample,可以找一个试试一睹为快。
以NiViewer为例:
可以看到窗口中有两个小窗口,其中右上角是RGB camera采集到的原始视频信息,左上角是3D Depth Sensor采集到的深度信息。NiViewer有一个capture功能,可以录制视频和深度信息窗口,并保存为oni格式文件,供OpenNI读取。
资源汇总
推荐一些不错的Kinect开发网站,欢迎提议更新
资源:
GitHub - SensorKinect
https://github.com/avin2/SensorKinect
kinect-mssdk-openni-bridge
https://www.assembla.com/code/kinect-mssdk-openni-bridge/git/nodes/master
zig
http://zigfu.com/en/downloads/browserplugin/
PCl
http://pointclouds.org/
论坛:
openni discussion
http://openni-discussions.979934.n3.nabble.com/
Kinect中文网
http://www.cnkinect.com/forum.php
技术博客:
chenli2010 - 博客汇总
http://blog.csdn.net/chenli2010/article/details/6887646
晨宇思远 - Kinect + OpenNI + OpenCV + OpenGL 组合体验
http://blog.csdn.net/chenyusiyuan/article/details/6279762
yangecnu
http://www.cnblogs.com/yangecnu/category/373950.html
Zhigao
http://tbaby.iteye.com/category/161730
--
欢迎讨论和转载,转载请注明出处。
CSDN博客:blog.csdn.net/texom
新浪微博:weibo.com/texom