openNI入门简介

内容来源:https://bbs.csdn.net/topics/380221036

 

OpenNI 简介
         首先,什么是 OpenNI?他是「Open Natural Interaction」的缩写,大致上可以翻译为「开放式自然操作」;而所谓的 NI 又包含哪些东西呢?OpenNI 对自然操作(Natural Interaction,以下简称 NI)的定义包含了「语音」、「手势」、「身体动作」等等,基本上就是比较直接、操作者身上不需要其它特殊装置的操作方式了。

         OpenNI 本身则是定义了撰写自然操作程序所需要的 API,提供一个多语言(主要是 C/C++)、跨平台的 framework;藉此提供了一个标准的接口,让程序开发者要使用视觉、声音相关感应器,以及对于这些数据、分析的中介软件(middleware)时,可以更为方便。
下方则是 OpenNI 的基本架构图:

openNI入门简介

 

 

 

上面的架构图基本上分为三层,最上层是应用程序(Application),也就是我们这些程序开发者自己要撰写的部分;最下方的一层则是硬件的部分,目前 OpenNI 支持的硬件,包含了:3D Sensor、RGB Camera、IR Camera、Audio Device 这四类。不过以目前来说,会用 OpenNI 的人,主要应该就是用 Kinect 以及Xtion了~而如果能有对应的驱动程序的话,其它类似的装置,应该也是有机会可以让 OpenNI 来存取的。
而中间这层就是 OpenNI 的部分,他除了负责和硬件的沟通外,也在自身内部预留了加上中介软件(middleware)的空间,可以用来做手势辨识、或是追踪之类的处理。OpenNI 目前在 middleware 的部分,定义了下面四种组件:

      • 全身分析(Full body analysis)
由感应器取得的数据,产生身体的相关信息,例如关节、相对位置与角度、质心等等。

      • 手部分析(Hand point analysis)
追踪手的位置。

      • 手势侦测(Gesture detection)
辨识预先定义好的手势,例如挥手。

      • 场景分析(Scene Analyzer)
        分析场景内的信息,例如:分离前景和背景、地板的坐标轴、辨识场景内的不同物体。
目前 PrimeSense 也已经提供了一套 NITE 当作最主要的 middleware、提供上面所列的功能;而如果有更进一步的需求的话,应该也可以自己写一套兼容于 OpenNI 的 middleware 来使用。当然,也希望以后会有其它软件厂商投入这块来开发了。

节点(Node)
在 OpenNI 里,他定义了所谓的「Production Node」来代表内部的基本单元,包括了硬件部分的感应器,以及 OpenNI 所提供的功能;这些 production node 分为下面三大类/层:
 1. 感应器相关(Sensor Related)Production Nodes
       o 装置(Device) :代表实体装置的节点,主要是用来做这些设备的设定。 

        o 深度产生器(Depth Generator):产生深度信息图(depth-map)的节点。 

        o 影像产生器(Image Generator):产生彩色影像图(colored image-maps)的节点。 

        o 红外线影像产生器(IR Generator):产生红外线影像图(IR image-maps)的节点。 

        o 声音产生器(Audio Generator):产生声音串流(audio stream)的节点。

2. 中介软件相关(Middleware Related)Production Nodes

       o 手势通知产生器(Gestures Alert Generator):当辨识到特定的手势时,呼叫应用程序的 callback。 

        o 场景分析器(Scene Analyzer):分析场景,包括分离前景与背景、识别场景内的不同物体、侦测地板。他主要的输出会是标记过的深度信息图(labeled depth map)。 

        o 手部位置产生器(Hand Point Generator):支持手部侦测与追踪,当侦测到手、或追踪手的位置时,会产生一个通知讯息。 
        o 使用者产生器(User Generator):产生一个 3D 场景中完整、或局部的身体信息。 
3.录制/拨放
       o 录制器(Recorder):用来记录数据用的。 
        o 拨放器(Player):读取记录下来的数据,并拨放出来。 
        o 编译码器(Codec):用来压缩、解压缩纪录数据。 

        上面这些 Production Node 基本上都是会由不同的模块各自实作的。像是以感应器相关的部分,就是会由 OpenNI 兼容的装置提供,以目前来说,主要就是 Kinect (以及 Xtion)的驱动程序会提供这深度、影像产生的功能。而中介软件相关的部分,则是由不同的 middleware 各自提供;不过目前的来源应该也只有 NITE 就是了。
         在层级上,感应器相关的 production node 算是最底层的,由于去直接存取设备的数据,所以应用程序可以直接使用这类的 production node。而中介软件相关的 production node 由于是靠感应器的资料来做处理的,所以他们的层级则比感应器的高一层、必须要在有感应器相关的 production node 的情况下才可以使用。

         而在有了上面的这些 Production Node 后,就可以透过组合这些节点来建立所谓的「Production Chain」,并以此进行数据的处理流程。比如说要产生使用者的数据的话,就是会透过「使用者产生器」(User Generator)去存取更低层的「深度产生器」(Depth Generator);而这样的一个节点序列,就是所谓的「Production Chain」。

能力(Capability)
OpenNI 的「Capability」机制是用来增强中介软件和硬件装置的弹性的;这些不同的能力都是非必要性的,各家厂商所提供的不同的中介软件和装置,可以自己决定要提供那些能力。而 OpenNI 则是负责定义好一些可以使用的 capability,让程序开发者可以快速地找到符合自己需求的中介软件或装置。
而目前版本的 OpenNI 所支持的 capability 则如下:
        • 替换视角(Alternative View)
让各类型的 map generator(深度、影像、红外线) 可以转换到别的视角,就好像摄影机在别的位置一样。这个功能可以快速地替不同的感应器产生的内容作对位。
        • 裁切(Cropping)
让各类型的 map generator(深度、影像、红外线) 输出结果可以被裁切、降低分辨率;例如:VGA 可以裁切成 QVGA。这对效能的增进很有用。
        • 画面同步(Frame Sync)
让两个感应器产生结果同步化,借此可以同步取得不同感应器的数据。
        • 镜像(Mirror)
把产生的结果镜像(左右颠倒)。
        • 姿势侦测(Pose Detection)
让「使用者产生器(User Generator)」可以侦测出使用者特定的姿势。
        • 骨架(Skeleton)
让「使用者产生器(User Generator)」可以产生使用者的骨架资料。包含骨架关节的位置、并包含追踪骨架位置和使用者校正的能力。 
        • 使用者位置(User Position)
让「深度产生器(Depth Generator)」可以针对指定的场景区域、最佳化输出的深度影像。 
        • 错误状态(Error State)
让节点可以回报他本身的错误状态。 
        • Lock Aware
让节点可以在 context 范围外被锁定。

 

 

 

上一篇:label和labelSeletor


下一篇:GHOST CMS - 配置 Config