PrimeSense 推出新的 Grab Detector使用方法介绍

来源:互联网 发布:淘宝cf刷枪软件 编辑:程序博客网 时间:2024/06/08 06:46

 

PrimeSense 推出新的 Grab Detector使用方法介绍

Primesense的OpenNI和NiTE库提供了对手部动作及全身骨骼提取的支持,手部动作包括用户摇手(hand wave),举手(hand up),推手(hand click),并且可以对摄像头范围内多只运动手进行检测;骨骼提取包括了全身15个关键关节的提取,以及双手交叉(hands cross)和双手举起(hands up)动作的检测。

目前可以使用这两个库的的摄像头包括微软的Kinect, Primesense Carmine系列及ASUS Xtion系列,这几款摄像头的最大区别在于支持的最短检测距离不同,此外,摄像头的最大拍摄角度略有差别。下图为笔者整理的目前市面上能够买到的几款摄像头参数对比。

但在体感检测中,尤其是需要近距离进行手部动作识别时,原有的库功能仍有不足。因此,PrimeSense推出了Grab Detector库以丰富该系列摄像头的应用范围。

与之前的NiTE2.0不同,GrabDetectior检测不再单一的使用深度图像,为了提高检测精度,使用了深度图像和彩色图像同时作为输入,并且设定位置校正、同步后才能正常运行。笔者采用PrimeSense Carmine1.09摄像头,检测距离为30cm~250cm,因为有使用彩色图像,测试环境的亮度对于检测结果有一定影响,但测试中发现如果单纯只使用深度图像作为输入,该库其实也可运行,不过效果略差。

GrabDetectior首先使用NiTE的HandTracker来做手部追踪,然后通过GrabDetectior来做分析,所以一开始要使用Click,wave实现手部定位。定位后,该库会检测用户五指是否握拳或伸开,握拳为grab状态,伸开为release状态。

要使用GrabDetectior的话,流程如下:

1.     include GrabDetectior.h文件到自己的vc++工程。

2.     建立OpenNI+NiTE流程,包括初始化OpenNITE环境,建立相应的VideoStream输入,初始化NiTE环境,建立HandTracker及设定。

3.     使用 PSLabs::CreateGrabDetector() 建立 PSLabs::IGrabDetector 的对象,以作后续操作。
在建立時,要指定要使用的 Device、并确保需要使用的文件路径(Redistributable\Common\Data\grab_gesture.dat)包含在项目中。

4.     使用 PSLabs::IGrabDetector 的 AddListener() 方法,实现动作发生时相应的处理。

5.     只要继承 PSLabs::IGrabEventListener 来创建一个新类即可,并在该类中实现 ProcessGrabEvent()方法,针对不同的事件,做出相应的处理。
事件包含在是 PSLabs::IGrabEventListener::EventParams,通过它的Type 值,可以知道现在发生的事件;包括了 GRAB_EVENT、RELEASE_EVENT 以及 NO_EVENT 三种。

6.     在程序主循环中,每次通过 PSLabs::IGrabDetector 提供的 SetHandPosition() 来设定目前手的位置(可由 HandTracker 取得),并由UpdateFrame() 来提供新的深度、彩色图像。

7.     笔者采用 VGA分辨率(640 x 480)的图像。

8.    程序结束后,通过 PSLabs::ReleaseGrabDetector() 释放 PSLabs::IGrabDetector 对象。

如果不想使用Listener/callback的形式检测手部动作,也可以通过PSLabs::IGrabDetector 的 GetLastEvent()来获取最后一个事件,通过分析事件类型已完成相应的操作。

 

欢迎大家一起探讨,谢谢!

suqinghua1985@gmail.com

2014/4/1

 

 

 

0 0