skeleton tracking without pose

807 views
Skip to first unread message

Pálfalvi József

unread,
Mar 11, 2011, 9:55:37 AM3/11/11
to openn...@googlegroups.com
Hi there!

I'm new to kinect based motion, skeleton, hand detection, and wanted to know if is it possible to start skeleton tracking WITHOUT making any special pose?
So if someone just walks in a room, where a kinect is "watching" the door frame, is it possible to get this persons skeleton as soon as possible?
I'm not only interested in skeleton data, but hand, head tracking also.

I've tried kinect on Xbox360, and there the kinect calibration utility can track my skeleton, and hands immediately, without posing.

Thanks for your help!

Joe P.
Hungary

Fredpointzero

unread,
Mar 11, 2011, 10:42:00 AM3/11/11
to OpenNI
Hi,

There are several different tracking.

Hand tracking does not need to have skeleton data, so you can track
hands without any posing.

For skeleton tracking, you need to calibrate the tracking (in order to
adjust bones length & positions). The Xbox 360 request several
calibration poses and then stores the data. Whene you come in front of
the xbox, it makes a face recognition and load the skeleton data
associated. So you don't have to calibrate again.

So you can't do skeleton tracking without any posing, but you can
avoid doing it each time !

Frédéric F
France

Pálfalvi József

unread,
Mar 11, 2011, 11:45:42 AM3/11/11
to openn...@googlegroups.com
Thanks for your answer, that's what I was looking for!
But then this needs RGB image and some light source (good lighting conditions) too, am I right?

But now I don't understand how can it find my hands without any skeletal data? :)

Joe P.

2011/3/11 Fredpointzero <fredpo...@gmail.com>
--
You received this message because you are subscribed to the Google Groups "OpenNI" group.
To post to this group, send email to openn...@googlegroups.com.
To unsubscribe from this group, send email to openni-dev+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/openni-dev?hl=en.


laurentR

unread,
Mar 11, 2011, 4:24:11 PM3/11/11
to OpenNI
hi Fred,
this is very interesting . do you have any pointers on how to do this
using the Kinect / prime Sense SDK ?
i'm wondering how accurate this is : ie can we discrimate between a
100 kg / 1.9 m person and an 90 kg / 1.8 m one ?


On 11 mar, 11:45, Pálfalvi József <palfal...@gmail.com> wrote:
> Thanks for your answer, that's what I was looking for!
> But then this needs RGB image and some light source (good lighting
> conditions) too, am I right?
>
> But now I don't understand how can it find my hands without any skeletal
> data? :)
>
> Joe P.
>
> 2011/3/11 Fredpointzero <fredpointz...@gmail.com>

Rhys Lewis

unread,
Mar 11, 2011, 5:36:03 PM3/11/11
to OpenNI
I've found that if you save the calibration from one person it will
usually work OK for everyone. So I do the calibration with myself,
then apply that calibration every time it finds another person, and
that works fine.

I've used it this way in our reception area, and it picks up new
people as they walk in.

Regards,
Rhys

Mark Dunne

unread,
Mar 11, 2011, 5:44:00 PM3/11/11
to openn...@googlegroups.com
Hi Rhys,

I like the sound of doing that, it's a headache doing the "freeze" pose every time. I'm using OpenNI.net, how to I do calibration and then use the calibration data in my C# code? Thanks in advance.

Cheers,
Mark.

Shlomo Zippel

unread,
Mar 11, 2011, 10:54:06 PM3/11/11
to OpenNI
Mark,

Take a look at SkeletonCapability::SaveCalibrationData and
SkeletonCapability::LoadCalibrationData. They are exposed in
OpenNI.net as well.

Cheers,
Shlomo

Mark Dunne

unread,
Mar 12, 2011, 11:49:15 AM3/12/11
to openn...@googlegroups.com
HI Shlomo,

I've updated two functions from OpenNI.net sample called "UserTracker.net", I've placed them below;

        void skeletonCapbility_CalibrationEnd(ProductionNode node, uint id, bool success)
        {
            if (success)
            {
                this.skeletonCapbility.StartTracking(id);
                this.joints.Add(id, new Dictionary<SkeletonJoint, SkeletonJointPosition>()); 

                // Save Data For Each User
                if (!skeletonCapbility.IsCalibrationData(id))
                    skeletonCapbility.SaveCalibrationData(id, id); 
            }
            else
            {
                this.poseDetectionCapability.StartPoseDetection(calibPose, id);
            }
        }

        void userGenerator_NewUser(ProductionNode node, uint id)
        {
             // Load Calibration Data if any exists
            if (skeletonCapbility.IsCalibrationData(id))
            {
                skeletonCapbility.LoadCalibrationData(id, id);
                this.skeletonCapbility.StartTracking(id);
                this.joints.Add(id, new Dictionary<SkeletonJoint, SkeletonJointPosition>()); 
            }
            else
                this.poseDetectionCapability.StartPoseDetection(this.calibPose, id);
        }

Not sure if I'm doing it right but I don't think it really did a whole lot to be honest.... Can't wait for Microsoft's official SDK with user profiles activated by facial recognition, BOOM!

Regards,
Mark.

Shlomo Zippel

unread,
Mar 12, 2011, 5:49:42 PM3/12/11
to OpenNI
Hey,

You should save and load calibration data to/from a specific slot -
the code you posted always uses a different slot for each user.

Cheers,
Shlomo

Mark Dunne

unread,
Mar 12, 2011, 6:47:41 PM3/12/11
to openn...@googlegroups.com
Hi Shlomo,

I tried that initially where I had the 'id' as '1', something like this;

        void userGenerator_NewUser(ProductionNode node, uint id)
        {
            // Load Calibration Data if any exists
            if (skeletonCapbility.IsCalibrationData(1))
            {
                skeletonCapbility.LoadCalibrationData(1, 1);
                this.skeletonCapbility.StartTracking(1);
                this.joints.Add(1, new Dictionary<SkeletonJoint, SkeletonJointPosition>());
            }
            else
                this.poseDetectionCapability.StartPoseDetection(this.calibPose, id);
        }

But I don't see that it makes any difference, can you save it to file or anything. Those it work well for you? I'm still standing in the "freeze" pose for a good 10 seconds before it gets going. Then if other users walk in, they sometimes can't get calibrated.

Regards,
Mark.

Joshua Blake

unread,
Mar 12, 2011, 6:51:19 PM3/12/11
to openn...@googlegroups.com, Mark Dunne
In the Motion Framework, I have the first-user skeleton calibration applied to all other users. Check here:
--

Mark Dunne

unread,
Mar 12, 2011, 6:58:58 PM3/12/11
to openn...@googlegroups.com, Mark Dunne
That's a great help! Thanks.

Mark Dunne

unread,
Mar 12, 2011, 8:17:42 PM3/12/11
to openn...@googlegroups.com, Mark Dunne
Thanks Joshua, that work really well. It's really robust now. :-)
Reply all
Reply to author
Forward
0 new messages