我能够使用 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/