Open GoogleCodeExporter opened 8 years ago
What steps will reproduce the problem? 1. Stop the draw() loop with noLoop() 2. Call context.update() and context.depthImage() or context.depthMap() 3. Notice the OpenNI information doesn't update, it's stil the most recent 'frame' before calling noLoop() What is the expected output? What do you see instead? I expected to get updated depth values after calling context.update() What version of the product are you using? On what operating system? SimpleOpenNI 0.26 on osx 10.6.8 Please provide any additional information below. Here is a test sketch: import SimpleOpenNI.*; SimpleOpenNI context; boolean recordFlag = true; int frames = 0; void setup(){ context = new SimpleOpenNI(this); if(! recordFlag){ if(! context.openFileRecording("test.oni") ){ println("can't find recording !!!!"); exit(); } context.enableDepth(); }else{ // recording context.enableDepth(); // setup the recording context.enableRecorder(SimpleOpenNI.RECORD_MEDIUM_FILE,"test.oni"); // select the recording channels context.addNodeToRecording(SimpleOpenNI.NODE_DEPTH,SimpleOpenNI.CODEC_16Z_EMB_TABLES); } // set window size if((context.nodes() & SimpleOpenNI.NODE_DEPTH) != 0) size(context.depthWidth() , context.depthHeight()); else exit(); } void draw() { background(0); context.update(); if((context.nodes() & SimpleOpenNI.NODE_DEPTH) != 0) image(context.depthImage(),0,0); if(recordFlag) frames++; } void keyPressed(){ if(key == ' '){ if(recordFlag){ saveStrings(dataPath("frames.txt"),split(frames+" ",' ')); exit(); }else saveONIToPLY(); } } void saveONIToPLY(){ frames = int(loadStrings(dataPath("frames.txt"))[0]); println("recording " + frames + " frames"); int w = context.depthWidth(); int h = context.depthHeight(); noLoop(); for(int i = 0 ; i < frames; i++){ PrintWriter output = createWriter(dataPath("frame_"+i+".ply")); output.println("ply"); output.println("format ascii 1.0"); output.println("element vertex " + (w*h)); output.println("property float x"); output.println("property float y"); output.println("property float z"); output.println("end_header\n"); context.update(); int[] depthMap = context.depthMap(); int index; PVector realWorldPoint; for(int y=0;y < h;y++){ for(int x=0;x < w;x++){ index = x + y * w; realWorldPoint = context.depthMapRealWorld()[index]; output.println(realWorldPoint.x + " " + realWorldPoint.y + " " + realWorldPoint.z); } } output.flush(); output.close(); println("saved " + (i+1) + " of " + frames); } loop(); println("recorded " + frames + " frames"); } Also I couldn't find a way to determine how many frames the .oni file has, so I've used a text file. To get update to work I've done the saving in the draw loop and used delay() - quite hacky/not precise: import SimpleOpenNI.*; SimpleOpenNI context; boolean recordFlag = false; boolean saving = false; int frames = 0; int savedFrames = 0; void setup(){ context = new SimpleOpenNI(this); if(! recordFlag){ if(! context.openFileRecording("test.oni") ){ println("can't find recording !!!!"); exit(); } context.enableDepth(); }else{ // recording context.enableDepth(); // setup the recording context.enableRecorder(SimpleOpenNI.RECORD_MEDIUM_FILE,"test.oni"); // select the recording channels context.addNodeToRecording(SimpleOpenNI.NODE_DEPTH,SimpleOpenNI.CODEC_16Z_EMB_TABLES); } // set window size if((context.nodes() & SimpleOpenNI.NODE_DEPTH) != 0) size(context.depthWidth() , context.depthHeight()); else exit(); } void draw() { background(0); context.update(); if((context.nodes() & SimpleOpenNI.NODE_DEPTH) != 0) image(context.depthImage(),0,0); if(recordFlag) frames++; if(saving && savedFrames < frames){ delay(3000);//hack int i = savedFrames; int w = context.depthWidth(); int h = context.depthHeight(); PrintWriter output = createWriter(dataPath("frame_"+i+".ply")); output.println("ply"); output.println("format ascii 1.0"); output.println("element vertex " + (w*h)); output.println("property float x"); output.println("property float y"); output.println("property float z"); output.println("end_header\n"); rect(random(width),random(height),100,100); int[] depthMap = context.depthMap(); int index; PVector realWorldPoint; for(int y=0;y < h;y++){ for(int x=0;x < w;x++){ index = x + y * w; realWorldPoint = context.depthMapRealWorld()[index]; output.println(realWorldPoint.x + " " + realWorldPoint.y + " " + realWorldPoint.z); } } output.flush(); output.close(); println("saved " + (i+1) + " of " + frames); savedFrames++; } } void keyPressed(){ if(key == ' '){ if(recordFlag){ saveStrings(dataPath("frames.txt"),split(frames+" ",' ')); exit(); }else saveONIToPLY(); } } void saveONIToPLY(){ frames = int(loadStrings(dataPath("frames.txt"))[0]); saving = true; println("recording " + frames + " frames"); }
Original issue reported on code.google.com by Orgi...@gmail.com on 22 Jul 2012 at 10:01
Orgi...@gmail.com
Original issue reported on code.google.com by
Orgi...@gmail.com
on 22 Jul 2012 at 10:01