OPENNI学习实践-openni基本结构

来源:互联网 发布:matlab迭代算法程序 编辑:程序博客网 时间:2024/05/21 21:50

OpenNI,Open Natural Interaction开放式的自然交互,这种自然交互主要包括语音,手势和肢体动作等,也就是说希望能够不需要其他设备只需要直觉就可以控制一些应用设备。 OpenNI本身定义了撰写自然操作程序所需要的API(Application Programming Interface,应用程序编程接口),并且提供了一个多语言跨平台的framework(框架),进一步提供了一个标准的界面,可以借用OpenNI获取并分析得到的数据进行应用程序的开发。OPENNI的框架如图:





说白了也就是说,所有的函数都包含在OPENNI的框架内,这个可分为三层,最上层为应用层(application),是借用OpenNI获取的数据进行相应平台的开发使用,中间为OpenNI可提供的接口,它也说明了OpenNI可以完成哪些工作,底层则为硬件部分,主要包括了:3D Sensor,RGB Camera,IR Camera,Audio Device。现在OpenNI主要适用于开发Kinect应用程序(参与OpenNI开发的主要成员是PrimeSense公司,其提供了Kinect设备的核心芯片)。

在OpenNI里,使用Production Node来表示内部的基本单元,这也包括了硬件部分的感应器和OpenNI所提供的功能。也就是说,Node是产生数据的接点,利用node产生我们需要去处理的数据,如rgb图,depth图等。
1、感应器相关(Sensor Related)Production Node
装置(Device):代表具体装置的节点,用来做这些设备的设定。
深度产生器(DepthGenerator):产生深度信息图像(depth maps)的节点。 图像产生器(ImageGenerator):产生彩色图像(color image maps)的节点。 红外图像产生器(IRGenerator):产生红外图像(IR image maps)的节点。 声音产生器(AudioGenerator):产生声音流(audio stream)的节点。
2、中间层相关(Middleware Related)Production Node
手势通知感应器(Gesture Alert Generator):当辨识特定的手势时,用于调用应用程序的callback函数。
场景分析器(Scene Analyzer):分析场景,包括分离前景与背景,识别场景内的不同物体,建立地板的坐标轴,侦测地板,其输出主要是标记过的深度信息图(labeled depth maps)。 手部位置产生器(Hand Point Generator):用于手部的侦测与追踪,当侦测到手部区域时,会产生一个通知信息。
使用者产生器(User Generator):产生一个3D场景中完整或局部的身体信息。
3、录制/播放
录制器(Recorder):用于记录资料。
播放器(Player):读取记录下来的资料并播放出来。 编解码器(Codec):用于压缩,解压缩获取的数据。

OpenNI的capality是用来增强中间层和底层感应器的弹性的,这些不同的capability都是非常重要的,由于底层硬件设备和中间层都是由不同的厂商提供,因而这些厂商可以提供不同的capibility以供开发者选用,对于OpenNI,其所要做的就是要定义好这些可以使用的capability,让开发者更好的选用。 目前OpenNI提供的capability主要包括: 替换视角(Alternative View )
该capability可以让各种map generator(depth 、color、IR)产生的图像视角进行相互之间的转换,这是因为不同的图像是由不同的摄像头获取,其图像视角也是不相同的,这可以快速的替不同的感应器产生的内容作对位。 裁切(Cropping)
可以对各类型的map generator(depth、color、IR)产生的图像进行裁切,降低解析度,例如VGA可以裁切成QVGA。 图画同步(Frame Sync)
让两个感应器的结果同步化,这样可以同步取得由不同感应器获取的数据。 镜像(Mirror) 把产生的左右颠倒
姿势侦测(Pose Detection)
让使用者产生器(User Generator)可以侦测出使用者特定的姿势。 骨架(Skeleton)
让使用者产生器(User Generator)可以产生使者得骨架资料,这包括骨架关节的位置,并包含追踪骨架位置和使用者校正的能力。 使用者位置(User Position)
让深度产生器(Depth Generator)可以针对指定的场景区域,最佳化的输出深度图像。 错误状态(Error State)
让production node通知其错误状态(编程中会遇到SN_STATUS_ERROR的宏定义,就是指没有正确完成某一功能)。
0 0