我能够使用SimpleOpenNI成功录制和重放深度和rgb录音(.oni文件)。我还希望能够从录制的文件中跟踪用户,换句话说,能够从深度图像中轻松提取人物的sillhouettes。通过在enableUser()
方法中调用setup()
,然后在绘制调用期间获取userMap()
或userImage()
,在运行连接到传感器时使用SimpleOpenNI很容易做到这一点。这样做的动机是能够轻松地从背景中分割出一个人的sillouhette。我使用的是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
文件中跟踪用户?
答案 0 :(得分:3)
是的,可以在旧版本的SimpleOpenNI中使用。
但是在没有错误的情况下1.96版本是不可能的 有一个错误报告(请参阅Google项目页面中的问题103.我添加了评论的链接,因为我无法在声誉太少的答案中发布更多链接。)提到了这一点。
但是有一种方法可以在旧版本的SimpleOpenNI中记录.oni
个文件,并使用它们跟踪版本1.96中的用户:
我设法通过安装SimpleOpenNI 0.27,跟随old installation guide并使用Processing 1.5.1和SimpleOpenNI 0.27附带的RecorderPlay示例来记录userMap()
数据。
然后,我可以在SimpleOpenNI 1.96和Processing 2.2.1中回放.oni
文件来检索用户地图和骨架数据。
我正在使用Mac Book Pro Retina和OS X 10.9.4。