使用OpenNI进行Kinect手势识别实践

需积分: 10 1 下载量 119 浏览量 更新于2024-09-12 收藏 133KB DOC 举报
"这篇学习笔记主要探讨如何使用OpenNI库结合Kinect设备进行手势识别,特别是利用GestureGenerator类实现挥手、手移动、举手和往前推手四种手势的识别。文章指出,虽然OpenNI自带的手势识别功能效果可能不尽如人意,但仍然是一个重要的学习实践过程。" 在OpenNI库中,GestureGenerator类是专门用于手势识别的核心组件。通过这个类,开发者可以定义和识别特定的手势。在给定的描述中,我们看到作者在COpenNI类中创建了一个公共成员变量`gesture_generator`,以便于在其他部分的代码中访问和配置它。初始化`GestureGenerator`时,需要将其与OpenNI的上下文(context)关联起来,通过调用`Create`方法并检查返回的状态来确保成功创建。 接着,作者通过`AddGesture`方法添加了四种手势:“Wave”(挥手)、"click"(点击)、"RaiseHand"(举手)和"MovingHand"(手移动)。这些手势的名称是预定义的,OpenNI库支持这些基本手势的识别。每种手势的添加都与一个回调函数相关联,当检测到对应手势的开始、结束或进展时,回调函数会被调用。 OpenNI的手势识别机制基于回调函数,这类似于Qt中的信号与槽机制。回调函数包括两个类型:`GestureRecognizedRecognizedCB`用于识别手势完成时的回调,而`GestureProgressProgressCB`则是在手势进行中时的回调。这两个回调函数接收一些参数,如手势状态、手势类型、手势的起始和结束位置等,以及一个用户自定义的数据指针(pCookie),用于传递额外的信息。开发者需要提供这两个回调函数的实现,以处理识别到的手势事件。 值得注意的是,尽管OpenNI提供了手势识别的基本框架,但在实际应用中,作者发现其性能和准确度可能并不理想。这可能需要开发者进一步优化,例如通过自定义算法或者使用更高级的手势识别库来提高识别效果。 这篇学习笔记提供了使用OpenNI库和Kinect设备进行基础手势识别的步骤,强调了手势识别的回调函数机制,并展示了如何通过OpenNI API来实现这一功能。对于想要涉足这一领域的开发者来说,这是一个很好的起点,同时也提醒了他们可能遇到的挑战和不足。