4

我能够使用 SimpleOpenNI 成功录制和回放深度和 rgb 录音(.oni 文件)。我还希望能够从记录的文件中跟踪用户,换句话说,能够轻松地从深度图像中提取人物的剪影。当连接到传感器运行时,SimpleOpenNI 很容易做到这一点,方法是调用enableUser()方法setup(),然后获取userMap()userImage()在绘制调用期间。这样做的动机是能够轻松地将一个人的轮廓从背景中分离出来。我正在使用 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文件中跟踪用户吗?

4

1 回答 1

3

是的,在 SimpleOpenNI 的旧版本中是可能的。

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

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

我使用的是 Mac Book Pro Retina 和 OS X 10.9.4。

于 2014-07-15T11:09:12.793 回答