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

时间:2013-10-23 06:07:39

标签: java kinect processing openni

我能够使用SimpleOpenNI成功录制和重放深度和rgb录音(.oni文件)。我还希望能够从录制的文件中跟踪用户,换句话说,能够从深度图像中轻松提取人物的sillhouettes。通过在enableUser()方法中调用setup(),然后在绘制调用期间获取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文件中跟踪用户?

1 个答案:

答案 0 :(得分:3)

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

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

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

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