我能够使用 SimpleOpenNI 成功地记录和回放深度和 rgb 记录(.oni 文件)。我还希望能够从记录的文件中跟踪用户,换句话说,能够轻松地从深度图像中提取人物剪影。在连接到传感器运行时,通过在 setup()
方法中调用 enableUser()
,然后获取 userMap()<,使用 SimpleOpenNI 很容易做到这一点
或 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
文件中跟踪用户吗?
最佳答案
是的,在旧版本的 SimpleOpenNI 中是可能的。
但在 1.96 版本中不可能没有错误。
有一个错误报告(请参阅 Google 项目页面中的问题 103。我将链接添加到评论中,因为我无法在声誉太低的答案中发布更多链接。)提到了这一点。
但是有一种方法可以在旧版本的 SimpleOpenNI 中记录 .oni
文件,并在 1.96 版本中使用它们来跟踪用户:
我通过安装 SimpleOpenNI 0.27 设法记录了 userMap()
数据, 在 old installation guide 之后并使用 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。
关于java - SimpleOpenNI 记录和回放用户跟踪数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19534014/