Kinect开发笔记(1)用OpenNI进行Kinect开发入门(一)
2012-07-16 15:05
337 查看
背景
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外观
如图所示,Kinect是一个外型类似网络摄影机的装置,有三个镜头,中间的镜头是RGB彩色摄影机(RGB Camera),左右两边镜头则分别为红外线发射器和红外线CMOS摄影机所构成的3D结构光深度感应器(3D Depth Sensor)。Kinect还搭配了追焦技术,底座(Motorized Tilt)马达会随着对焦物体移动跟着转动。Kinect也内建阵列式麦克风(Multi-array MIC),由多组麦克风同时收音,能比对后消除杂音。
初识OpenNI
刚接触Kinect开发,不免感觉百事待举。一开始就遇到两种开发工具的选择,一种是微软提供的Kinect SDK(更新:现在最新版是1.6版本),可以在Kinect官方网站上下载;一种是PrimeSense公司提供的OpenNI,包括开源开发包和一些中间件。这里需要注意的是,微软推出的Kinect体感器有两款,一种是起初的XBOX360版,一种是Kinect4Windows版。前者OpenNI和MicrosoftKinect 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
zigfu
按顺序(先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
相关文章推荐
- OpenNI结合Unity3D Kinect进行体感游戏开发(转)
- Kinect开发教程:利用OpenNI进行手势识别
- kinect sdk开发入门WPFdemo笔记[2] 获取深度数据
- kinect开发入门学习笔记
- kinect开发笔记1:openNI的配置
- Kinect开发教程三:利用OpenNI进行手势识别
- kinect开发入门笔记
- Processing 结合OpenNI开发kinect的简单笔记
- Kinect开发教程三:利用OpenNI进行手势识别
- Kinect开发教程三:利用OpenNI进行手势识别
- Kinect开发教程三:利用OpenNI进行手势识别
- 使用C语言进行面向对象的开发--GObject入门[5]
- Kinect开发笔记之(三)Kinect开发学习资源整理
- Chrome扩展及应用开发 入门笔记(网络请求,脚本注入)
- Chrome扩展及应用开发 入门笔记(一)
- [译]Kinect for Windows SDK开发入门(六):骨骼追踪基础 上
- [译]Kinect for Windows SDK开发入门(十五):进阶指引 下
- Kinect开发笔记之三Kinect开发环境配置具体解释
- Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
- [转]Kinect for Windows SDK开发入门(二):基础知识 上