3.2 Production Nodes生产节点
OpenNI定义了生产节点,它具有拥有能在生成体感要求的数据过程中充当生产性角色的一套单元。每个生产节点都能够使用其他更低级的生产节点(读数据,控制配置等),也能够被其他高级节点或本应用程序使用。
举例:
应用程序想跟踪在三维场景中手指的动作轨迹。这要求一个生产节点生成肢体数据,也叫user generator用户生成器。这个用户生成器从depth generator深度生成器获得数
据。深度生成器是由传感器实现的生产节点,它从深度器件获取原始数据(如每秒X帧的流)并且输出深度图。“有意义的”三维数据被定义为能够理解、明白、翻译场景的数据。生成有意义的三维数据是个复杂的任务。一般先使用传感设备生成原始数据的一种格式。通常,这个数据是深度图,图中每个像素点都通过与传感器的距离来表示。专门的中间件用来处理这些原始数据输出,生成更高层的输出,这些输出能够被应用程序使用。通常的高层输出的例子在下图描述和展示: 用户手的位置。 输出可以是手掌心(常被称为手心)或手指尖。
Figure 1
场景中体型的识别。输是时体型的关节的当前位置和方向(常常称为‘肢体数据’)
Figure 2
手势识别(例如:挥动)。当特定手势发生时,输出是一个对应用程序的提醒。
Figure 3
生产节点类型
在OpenNI中每个生产节点都有一个类型,属于下列分类之一:
传感器相关生产节点
中间件相关生产节点
当前在OpenNI中支持的生产节点类型是:
传感器相关的生产节点
设备:这种节点是物理的设备(例如:深度传感器,或者RGB摄像头)。这个节点的主要角色是使设备可配置。
深度生成器:这种节点能够生成深度映射。它应该被任何希望通过OpenNI认证的三维传感器实现。
图像生成器:这种节点能够生成彩色图像映射。它应该被任何希望通过OpenNI认证的才是传感器实现。
红外生成器:这种节点能够生成红外图像映射。它应该被任何希望通过OpenNI认证的才是传感器实现。
音频生成器:这种节点产生音频流。它应该被任何希望通过OpenNI认证的才是传感器实现。
中间件相关的生产节点
手势告警生成器:当特定手势被识别能够回调应用程序。
场景分析器:分析一个场景,包括前景从背景分开,识别场景中的体型,发现平面图。场景分析器的主要输出是标记的深度映射,每一个像素都包含一个标签,指明是体型还是背景的一部分。
手心生成器:支持手的发现和跟踪。这个节点当发现一个手心(手掌),或者当手心被跟踪时,位置发生了变化,就产生一个回调事件。
用户生成器:生成一个在三维场景中的全部或部分肢体图画。对于记录目的,以下产品节点被支持:
记录器:实现数据记录。
播放器:从记录里读取数据并且播放它。
编码器:用来压缩和解压缩记录中的数据
3.3 Production Chains 生产链
如前所述,几个模块(中间件组件或者传感器)能够同时注册到一个OpenNI实现中。这个拓扑给应用程序提供了灵活性,让它们选择特定的传感设备和中间件组件来生成和处理数据。
什么是生产链?
在生产节点章节,一个例子是应用程序产生了用户生成器类型的生产节点,这个生产节点使用低层的深度生成器,从传感器读取原始数据。在下面的例子中,节点顺序(用户
生成器到深度生成器)是相互依赖的,以产生所需的肢体数据,被称为生产链。不同的厂商(品牌名)能够对同样的生产节点提供自己的实现。
例子:
品牌A 提供一个用户生成器中间件实现(模块)。品牌B提供另外一个实现用户生成器的中间件。两个生成器都是和应用开发者。OpenNI让应用定义使用哪个模块,或者说生产链。OpenNI接口根据已注册模块列出所有可能的生产链。应用可以基于对特定的品牌、组件、或版本等,来选择其中一个生产链并生成它。注意:应用程序也可以不指定,使用OpenNI列出的第一个生产链。通常情况下,应用程序只对生产链的顶部的生产节点感兴趣。这个节点输出实际层面上需要的数据,例如,手心生成器。OpenNI能够让应用只使用单一节点,而不用了解该节点下面的生产链。对于高级调整,有选项可以访问生产链和配置每一个节点。例如,如果我们看过前文展示的系统插图,它描述了多个已注册的模块和设备。一旦应用程序需要一个用户生成器,OpenNI就返回以下四个可选的生产链来获得肢体数据:
Figure 4
这个插图显示了四个可选的生产链,每个生产链都是一个肢体中间件组件和三维传感器一个可能组合,OpenNI为应用提供了选项去选择以上四个备选生产链。