0

As a part of my project I have to implement hand and finger tracking using kinect. From what i've read so far the basic method is:

  1. trace the contour of hand
  2. find finger tips using convex hull or k-curvature algo

Is this correct? If it is can someone provide a tutorial on how to trace contour as I could not find a any good one.

or

Is there any other way to track hand and fingers?


EDIT

after some work i am able to detect edges of hands in the image using sobel edge detection. but is reducing my fps. is there any way to improve its performance?? and how can i then get contour from the edge detected to perform finger detection? can it be directly done on edges?

sorry for so many questions but i am new to all this stuff

Vaibhav
  • 703
  • 1
  • 7
  • 18

2 Answers2

0

A really easy way to do this, which I have implemented successfully in an installation, is to simply look for the closest pixel to the Kinect, and assume that this is the pointing finger.

My algorithm worked something like this: (1) Crop X and Y to a particular region of interest, where you didn't expect any extraneous objects to enter the scene (furniture, walls, floors, etc.) (2) Exclude all pixels falling outside of a particular depth range (nothing too close and nothing beyond the tracking area you wanted to focus on, where users would stand) (3) Pick whatever is currently the closest (brightest) pixel in the depth map, and set this as the threshold. Work backwards (away from the sensor) from that threshold, up to a certain distance range (maybe a few centimetres). (4) Check the size of the resulting blob. If it's too small, it's probably just noise. If it's too large, it's bigger than a finger or a hand, so it's probably an entire body (with the hand not extended towards the sensor), so ignore that. (5) Assuming the blob passes all of the above, track it.

Anselan
  • 396
  • 3
  • 13
  • could you please explain a bit more on removing noise? what i am currently doing is finding the nearest pixel and allowing all pixels that are say, 10cm , away from it but it keeps picking up some random noise. how can i remove that? – Vaibhav Nov 29 '13 at 04:29
  • Is the noise affecting your tracking point or your thresholding for the nearest pixel? Either way, you will need to implement a system of checking for a specified number of frames (3-5 should be sufficient) and attempting to ignore values outside of an expected range. Does that help? – Anselan Dec 12 '13 at 09:33
0

fingers tracking is a huge topic. Anselan gave you the easy solution to track the fingertip of the closest finger from kinect, but that's it - no offense meant. It won't work if Kinect is set at a bad angle so it sees your palm before your finger, neither if the finger points at Kinect directly (the depth map will be black then)

Candescent NUI is a .NET/KinectSDK project that does finger tracking "quiet well". I'm not a .NET expert but I may have a look at it because I can't find anything in C/C++ that does the job, please let me know if you find something. BTW there is also a (closed source) Intel project for it, which looks more than promising, but it only works with the Creative camera for marketing reasons

Nigo
  • 1