SimpleOpenNI记录和重播用户跟踪数据
我能够使用SimpleOpenNI成功录制和重放深度和rgb录音(.oni文件)。 我还希望能够从录制的文件中跟踪用户,换句话说,能够从深度图像中轻松提取人物的sillhouettes。 当运行连接到传感器时,通过调用setup()
方法中的userMap()
,然后在绘制调用期间获取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
文件中跟踪用户?
是的,可以在旧版本的SimpleOpenNI中使用。
但是在没有错误的版本1.96中是不可能的。
有一个错误报告(请参阅Google项目页面中的问题103.我添加了评论的链接,因为我无法在声誉太少的答案中发布更多链接。)提到这一点。
但是有一种方法可以在旧版本的SimpleOpenNI中记录.oni
文件,并使用它们来跟踪版本1.96中的用户:
我设法通过安装SimpleOpenNI 0.27记录userMap()
数据,遵循旧的安装指南并使用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。