By Joaquim Rocha.
With the release of the Kinect device, there was finally an affordable camera capable of giving depth information. This, together with the Kinect's open USB connection, led to a lot of innovative projects.
Still, the Kinect just gives raw signals and the only way to obtain more complex information, such as skeleton tracking was to use either the Microsoft SDK or the OpenNI framework. Both of these solutions are closed, proprietary and, in the case of Microsoft's, only for non-commercial work.
To solve the issue above, Igalia developed Skeltrack, a Free and Open Source library published under LGPL that performs human skeleton tracking and identifies a number of skeleton joints. It is a more atomic solution than the other commercial counterparts because it does not connect directly to the Kinect nor to any other depth camera, instead it expects to be given the buffer corresponding to the depth buffer.
In this talk I will present how Skeltrack was developed and show a demo of it working.
1. Skeltrack - Open Source Skeleton Tracking
Joaquim Rocha, Igalia
LinuxTag 2012 - Wunderbare Berlin
2. Guten Tag!
✩ I am a developer at Igalia
✩ I like doing innovative stuff like OCRFeeder and SeriesFinale
✩ and today I am presenting my latest project: Skeltrack
38. Choose a starting point and calculate Dijkstra to
each point of the graph; choose the furthest point.
There you got your extrema!
39. Then create an edge between the starting point
and the current extrema point with 0 cost and
repeat the same process now using the current
extrema as a starting point.
40. This comes from Baak's paper and the difference
starts here: choosing the starting point
41. Baak chooses a centroid as the starting point
We choose the bottom-most point starting from the
centroid (this showed better results for the upper
body extremas)
42. So we got ourselves some extremas!
What to do with them?
48. For each extrema we look for the points in places
where the shoulders should be, checking their distances
between the extrema and between each other.
49. If they obey those rules then we assume they are
the head'n'shoulders (tm)
50. With the remaining 2 extremas, we will try to see if
they are elbows or hands
55. If the distance between the extrema and the shoulder is
less than a predefined value, then it is an elbow. Otherwise
it is a hand.
56. If it is a hand, we find the elbow by choosing the first point
(in the path we created with Dijkstra before) whose distance
exceeds the elbow distance mentioned before
71. Skeleton Joint:
ID: HEAD, LEFT_ELBOW, RIGHT_HAND, ...
x: X coordinate in real world (in mm)
y: Y coordinate in real world (in mm)
screen_x: X coordinate in the screen (in pixels)
screen_y: Y coordinate in the screen (in pixels)