PrimeSense Grab Detector 编程示例.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:6 大小:386KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

PrimeSense Grab Detector 编程示例.pdf

PrimeSenseGrabDetector编程示例.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

PrimeSenseGrabDetector编程示例上篇文章介绍过,PrimeSense有推出一能检测手部“握拳”(grab)和“松开”(release)动作的函数库GrabDetector。虽然这两个库的使用有一些限制,但是作为动作捕捉程序开发爱好者,值得看看。下载GrabDetector库,里面PrimeSense提供一个名为“GrabViewer”的示例可参考(在\Samples\GrabViewer),程序架构和OpenNI2或NiTE2的示例程序架构大致相同,所以如果之前有做过这方面的程序,很好上手。OpenNI与NiTE初始化由于GrabDetector除了需要用到深度和彩色图像,也需要使用NiTE的HandTracker来定位手的位置,所以在使用GrabDetector之前,需要针对OpenNI2和NiTE2,配置好各参量。以OpenNI的部分为例,主要就是建立出深度和彩色图像的VideoStream,完成参数配置,代码如下://InitialOpenNIOpenNI::initialize();//OpenDeviceDevicedevDevice;devDevice.open(ANY_DEVICE);//createdepthstreamVideoStreamvsDepthStream;vsDepthStream.create(devDevice,SENSOR_DEPTH);//setvideomodeVideoModemMode;mMode.setResolution(640,480);mMode.setFps(30);mMode.setPixelFormat(PIXEL_FORMAT_DEPTH_1_MM);vsDepthStream.setVideoMode(mMode);//CreatecolorstreamVideoStreamvsColorStream;vsColorStream.create(devDevice,SENSOR_COLOR);//setvideomodemMode.setResolution(640,480);mMode.setFps(30);mMode.setPixelFormat(PIXEL_FORMAT_RGB888);vsColorStream.setVideoMode(mMode);//imageregistrationdevDevice.setImageRegistrationMode(IMAGE_REGISTRATION_DEPTH_TO_COLOR);//devDevice.setDepthColorSyncEnabled(true);因为GrabDetector使用彩色图像辅助深度图像来检测用户手部动作,所以一定要把彩色图像和深度图像,通过Device的setImageRegistrationMode()来做矫正处理,毕竟两个摄像头之间还是有几厘米的距离,采集到的图像信息有一定的位置偏差。另外,官方文档要求一定要使用setDepthColorSyncEnabled()开启彩色图像和深度图像的同步,不过实际上如果不打开也一样能使用,可能会有点监测偏差。NiTE的部分要建立HandTracker对象以检测手部位置,还是老流程依据click和wave两种手势让摄像头找到运动中的手。//InitialNiTENiTE::initialize();//createhandtrackerHandTrackermHandTracker;mHandTracker.create(&devDevice);//setgesturemHandTracker.startGestureDetection(GESTURE_WAVE);mHandTracker.startGestureDetection(GESTURE_CLICK);GrabDetector只是要手部的位置,所以理论上如果使用UserTracker追踪到人体骨骼中的左右手位置,应该也还是可以使用的,不过没试过,有兴趣的兄弟可以搞搞看。GrabDetector初始化在前一篇文章已经提过,基本上要使用GrabDetector,主要是要使用PSLabs::CreateGrabDetector()函数,建立出PSLabs::IGrabDetector的对象pGrabDetector来进一步处理。在建立时,除了需要输入使用的Device外(OpenNI支持多摄像头同时检测),也需要指定数据文档(Redistributable\Common\Data\grab_gestu