我能够使用 SimpleOpenNI 成功记录和重放深度和 rgb 记录(.oni 文件)。我还希望能够从记录的文件中跟踪用户,换句话说,能够轻松地从深度图像中提取人的轮廓。当运行连接到传感器时,通过在 enableUser() 方法中调用 setup(),然后在绘制调用期间获取 userMap()userImage(),这很容易通过 SimpleOpenNI 实现。这样做的动机是能够轻松地从背景中区分出一个人的侧影。我使用的是 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() 数据,遵循 old installation guide 并使用处理 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。

关于java - SimpleOpenNI 记录和重放用户跟踪数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19534014/

10-10 15:58