我能够使用 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
文件中跟踪用户吗?