SimpleOpenNI记录和重播用户跟踪数据

我能够使用SimpleOpenNI成功录制和重放深度和rgb录音(.oni文件)。 我还希望能够从录制的文件中跟踪用户,换句话说,能够从深度图像中轻松提取人物的sillhouettes。 当运行连接到传感器时,通过调用setup()方法中的userMap() ,然后在绘制调用期间获取userMap()userImage() ,可以很容易地使用SimpleOpenNI。 这样做的动机是能够轻松地从背景中分割出一个人的sillouhette。 我使用的是SimpleOpenNI版本1.96。

这是我在记录数据时使用的代码:

 SimpleOpenNI context; public void setup() { context = new SimpleOpenNI(this); // recording context.enableDepth(); context.enableRGB(); context.enableUser(); context.enableRecorder(recordPath); // select the recording channels context.addNodeToRecording(SimpleOpenNI.NODE_DEPTH,true); context.addNodeToRecording(SimpleOpenNI.NODE_IMAGE,true); context.addNodeToRecording(SimpleOpenNI.NODE_USER, true); context.addNodeToRecording(SimpleOpenNI.NODE_PLAYER, true); context.addNodeToRecording(SimpleOpenNI.NODE_SCENE, true); context.addNodeToRecording(SimpleOpenNI.NODE_IR, true); } 

这是我用来重放数据的代码:

 SimpleOpenNI context; String recordPath = "/path/to/test.oni"; public void setup() { context = new SimpleOpenNI(this,recordPath); context.enableDepth(); context.enableRGB(); context.enableUser(); } ... 

该方法调用context.enableUser(); 当我尝试重放数据导致错误Couldn't getXN_STREAM_PROPERTY_ZERO_PLANE_DISTANCE Invalid memory access of location 0x4c rip=0x10e2c38e2 。 但是,我知道为了获取有关正在跟踪哪些用户的信息,我需要调用context.enableUser() 。 删除此行会删除错误,但不允许我访问有关正在跟踪哪些用户的信息。

有人知道是否可以从预先录制的.oni文件中跟踪用户?

是的,可以在旧版本的SimpleOpenNI中使用。

但是在没有错误的版本1.96中是不可能的。
有一个错误报告(请参阅Google项目页面中的问题103.我添加了评论的链接,因为我无法在声誉太少的答案中发布更多链接。)提到这一点。

但是有一种方法可以在旧版本的SimpleOpenNI中记录.oni文件,并使用它们来跟踪版本1.96中的用户:
我设法通过安装SimpleOpenNI 0.27记录userMap()数据,遵循旧的安装指南并使用Processing 1.5.1和SimpleOpenNI 0.27附带的RecorderPlay示例。
然后我能够在SimpleOpenNI 1.96和Processing 2.2.1中回放.oni文件来检索userMap和骨架数据。

我正在使用Mac Book Pro Retina和OS X 10.9.4。