Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Skeltrack - Open Source Skeleton Tracking
Search
Joaquim Rocha
May 26, 2012
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Skeltrack - Open Source Skeleton Tracking
Presentation of Skeltrack -- the only Open Source library for skeleton tracking.
Joaquim Rocha
May 26, 2012
More Decks by Joaquim Rocha
See All by Joaquim Rocha
Git: Best Practices
jrocha
3
3.8k
Skeltrack: Open Source Skeleton Tracking
jrocha
1
220
OCRFeeder: OCR Made Easy on GNOME
jrocha
1
330
Introduction to Django
jrocha
5
3.8k
Skeltrack: Open Source Skeleton Tracking
jrocha
1
3.1k
Other Decks in Programming
See All in Programming
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
300
Foundry Localでエージェント開発
seosoft
0
170
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
140
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
160
iOSDC2026登壇資料.pdf
riofujimon
0
110
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.4k
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
500
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
38k
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
650
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
860
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Visualization
eitanlees
152
17k
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
880
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
A designer walks into a library…
pauljervisheath
211
25k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Agile that works and the tools we love
rasmusluckow
331
22k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
First, design no harm
axbom
PRO
2
1.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Transcript
Skeltrack - Open Source Skeleton Tracking Joaquim Rocha, Igalia LinuxTag
2012 - Wunderbare Berlin
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
The Kinect
Microsoft's Kinect was the first camera with a price affordable
to the public
The USB connection is open and thus hackable
This originated Open Source projects like the libfreenect, a library
to control the Kinect device and get its information
We created a GLib wrapper for libfreenect called GFreenect
GFreenect offers asynchronous functions (and some synchronous as well) and
makes it easy to use with other GNOME technologies
GObject Introspection = free bindings (Python, Javascript, Vala)
Kinect has a structured light camera which gives depth information
But that's raw information... values from 0-2048
libfreenect/GFreenect can give those values in mm
None
Still...
It does NOT tell you there is a person in
the picture
Or a cow
Or an ampelmann
Let alone a skeleton and where its joints are
For this you need a skeleton tracking solution
Three proprietary/closed solutions exist:
Microsoft Kinect SDK: non-commercial only
OpenNI: commercial compatible
Kinect for Windows: commercial use allowed but incompatible with the
XBox's Kinect
None
Conclusion: There were no Free solutions to perform skeleton tracking...
:(
So Igalia built one!
Enter Skeltrack
What we wanted: ✩ A shared library, no fancy SDK
✩ Device independent ✩ No pattern matching, no databases ✩ Easy to use (everybody wants that!)
Not as easy as it sounds!
After some investigation we found Andreas Baak's paper "A Data-Driven
Approach for Real-Time Full Body Pose Reconstruction from a Depth Camera"
However this paper uses a database of poses to get
what the user is doing
So we based only part of our work on it
How does it work?
First we need to find the extremas
Make a graph whose nodes are the depth pixels
Connect two nodes if the distance is less than a
certain value
Connect the different graph's components by using connected-component labeling
Choose a starting point and calculate Dijkstra to each point
of the graph; choose the furthest point. There you got your extrema!
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.
This comes from Baak's paper and the difference starts here:
choosing the starting point
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)
So we got ourselves some extremas! What to do with
them?
What extrema is a hand, a head, a shoulder?
For that we use educated guesses...
We calculate 3 extremas
Then we check each of them hoping they are the
head
How?
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.
If they obey those rules then we assume they are
the head'n'shoulders (tm)
With the remaining 2 extremas, we will try to see
if they are elbows or hands
How to do it?
Calculate Dijkstra from the shoulders to each extrema
The closest extrema to any of the shoulders is either
a hand of an elbow of that shoulder
How to check if it's a hand or an elbow?
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.
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
None
There is still some things missing...
Future work
Hands from elbows: If one of the extremas is an
elbow, we need to infer where the hand is
Smoothing: Smooth the jittering of the joints
Robustness: Use restrictions to ignore objects that are not the
user
Multi-user: Track more than one person at a time
And of course, get the rest of the joints: hips,
knees, etc.
How to use it?
Asynchronous API
SkeltrackSkeleton *skeleton = SKELTRACK_SKELETON (skeltrack_skeleton_new ()); skeltrack_skeleton_track_joints (skeleton, depth_buffer, buffer_width,
buffer_height, NULL, on_track_joints, NULL);
None
Synchronous API
SkeltrackJointList list; list = skeltrack_skeleton_track_joints_sync (skeleton, depth_buffer, buffer_width, buffer_height, NULL,
NULL);
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)
Code/Bugs: https://github.com/joaquimrocha/Skeltrack
Nifty Tools for Development: GFreenect: https://github.com/elima/GFreenect GFreenect Utils: https://github.com/joaquimrocha/gfreenect-utils
GFreenect Python Example
Tool: record-depth-file
Tool: depth-file-viewer
Questions?
Creative Commons pictures from flickr: Kinect: Auxo.co.kr Ampelmann: echiner1 Kid
Playing: Rob Welsh Skeleton: Dark Botxy