Modifying Kinect Sensor Depth information for Openni User Generator

1,093 views
Skip to first unread message

Tayyab

unread,
Apr 27, 2012, 1:07:43 PM4/27/12
to OpenNI
Hi ,
I have been working with Kinect for quite a while now. I wanted to
know that is there a way to modify the depth Map of the Live sensor
data and feed the modified depth to the user generator for user
tracker application. Apparently there is no direct connection but User
Generator uses depth generator for tracking.
I have tried working with the Mock depth generator but it does not
seem to work on live depth data whereas works on recorded file as in
an example 'NiRecordSynthetic'.
I have also had a look on the microsoft-openni bridge but it seems to
work on Windows only, and i am using linux.
https://www.assembla.com/code/kinect-mssdk-openni-bridge/git/nodes/

Does anyone have an idea, how we can approach the problem.


Any help would be appreciated.

Thanks

Heresy

unread,
May 2, 2012, 1:34:49 AM5/2/12
to openn...@googlegroups.com
Create a mock depth generator like what "NiRecordSynthetic" do.
When you create the user generator, you need to use xn::Query to make the user generator get data from the mock depth node. 

// mock depth generator
xn::MockDepthGenerator xMockDepth;
xMockDepth.CreateBasedOn( xDepthGen, "MockDepth" );

// create user generator using mock depth generator
xn::Query xQuery;
xQuery.AddNeededNode( "MockDepth" );
xn::UserGenerator xUser;
xUser.Create( xContext, &xQuery );


Tayyab於 2012年4月28日星期六UTC+8上午1時07分43秒寫道:

Tayyab

unread,
May 4, 2012, 7:37:53 AM5/4/12
to OpenNI
Hi Heresy,
Thanks so much for the idea but i am having problems with this
approach as well. This is what i did in the Openni User Tracker.


  nRetVal = g_Context.FindExistingNode(XN_NODE_TYPE_DEPTH,
g_DepthGenerator);
    CHECK_RC(nRetVal, "Find depth generator");

        nRetVal =
g_Context.CreateMockNodeBasedOn(g_DepthGenerator,"MockDepth",g_mockdepth);
    //nRetVal =
g_mockdepth.CreateBasedOn(g_DepthGenerator,"MockDepth"); // I also
tried this but did not work either
    CHECK_RC(nRetVal, "Create mock depth node");
    xn::Query xQuery;
        xQuery.AddNeededNode("MockDepth");
// Adding the Skeletal and Pose detection capabilities
xQuery.AddSupportedCapability(XN_CAPABILITY_SKELETON);
xQuery.AddSupportedCapability(XN_CAPABILITY_POSE_DETECTION);

nRetVal = g_Context.FindExistingNode(XN_NODE_TYPE_USER,
g_UserGenerator);
if (nRetVal != XN_STATUS_OK) {
nRetVal = g_UserGenerator.Create(g_Context,&xQuery);
CHECK_RC(nRetVal, "Find user generator");
}

This is what is done in the while loop
{

g_Context.WaitAndUpdateAll();
g_DepthGenerator.GetMetaData(depthMD);
nRetVal = depthMD.MakeDataWritable();
//transformDepthMD(depthMD); // we could use this to modify the
depth map but for the time being i have commented it out
nRetVal = g_mockdepth.SetData(depthMD);
.....
.....
.....
.....
.....
.....


}


Problem:
Now the problem is there is no compilation error but in runtime there
is no output like nothing happens.
Do you have any idea what could be the problem thanks again :)

Tayyab

unread,
May 4, 2012, 11:12:59 AM5/4/12
to OpenNI
Okie the error is fixed
instead of g_Context.WaitAndUpdateAll();

we have to use g_Context.WaitOneUpdateAll(g_DepthGenerator);

:)

Thanks again

Heresy

unread,
May 6, 2012, 9:30:09 PM5/6/12
to openn...@googlegroups.com
Here is  an example to modify the OpenNI sample "NiUserTracker"
http://goo.gl/G5fcS

Heresy於 2012年5月2日星期三UTC+8下午1時34分49秒寫道:

Sebaas

unread,
Oct 4, 2012, 7:57:05 AM10/4/12
to openn...@googlegroups.com
For some reason while using this code it won't ever go past the look for pose part. So it's detecting obstacles/human beings but somehow not the psi pose.
While using the camera instead of the mock node everything runs smoothly. I'm kinda confused tbh
Reply all
Reply to author
Forward
0 new messages