skeltrack: a free software library for skeleton tracking (guadec 2012)

59
Skeltrack - Open Source Skeleton Tracking Joaquim Rocha, Igalia GUADEC 2012 - A Coruña

Upload: igalia

Post on 17-May-2015

402 views

Category:

Technology


3 download

DESCRIPTION

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 Joaquim will present how Skeltrack was developed and show a demo of it working.

TRANSCRIPT

Page 1: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Skeltrack - Open Source Skeleton Tracking

Joaquim Rocha, IgaliaGUADEC 2012 - A Coruña

Page 2: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Igalia's Interactivity Team was on to investigateimmersive applications using FOSS

Page 3: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

These applications representnew/different ways of interaction for users

Page 4: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Those can go from entertainment to more serious applications

Page 5: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)
Page 6: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

The Kinect

Page 7: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Microsoft's Kinect was the first camerawith a price affordable to the public

Page 8: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

The USB connection is open and thus hackable

Page 9: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

This originated Open Source projects like the libfreenect,a library to control the Kinect device and get its information

Page 10: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

We created a GLib wrapper for libfreenect called GFreenect

Page 11: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

GFreenect offers asynchronous functions (and some synchronous aswell) and makes it easy to use with other GNOME technologies

Page 12: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

GObject Introspection opens these technologies for users ofPython, Javascript, Vala, etc.

Page 13: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

The Kinect has a structured light camera which gives depth information

Page 14: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

But that's raw information... values from 0-2048

Page 15: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

libfreenect/GFreenect can give those values in mm

Page 16: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)
Page 17: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Still...

Page 18: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

It does NOT tell you there is a person in the picture

Page 19: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Or a cow

Page 20: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Or a monkey

Page 21: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Let alone a skeleton and where its joints are!

Page 22: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

For this you need a skeleton tracking solution

Page 23: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Skeleton Tracking

Page 24: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Three proprietary/closed solutions exist:

Page 25: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Microsoft Kinect SDK: non-commercial only

Page 26: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

OpenNI: commercial compatible

Page 27: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Kinect for Windows: commercial use allowedbut incompatible with the XBox's Kinect

Page 28: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)
Page 29: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Conclusion: There were no Free solutions toperform skeleton tracking... :(

Page 30: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

So Igalia built one!

Page 31: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Enter Skeltrack

Page 32: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

What we wanted:✩ A shared library, no fancy SDK✩ Modular (do one thing)✩ Device independent✩ No pattern matching, no databases✩ Easy to use (everybody wants that!)

Page 33: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Not as easy as it sounds!

Page 34: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

The current version tracks up to 7 joints:✩ Head;✩ Shoulders;✩ Elbows;✩ Hands.

Page 35: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Smoothing is implemented usingHolt's Double Exponential formulas

Page 36: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Smoothing and heuristics usedcan be tweaked using GObject properties

Page 37: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

There are still some things missing...

Page 38: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Future work

Page 39: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Hands from elbows: If one of the extremas is an elbow, weneed to infer where the hand is

Page 40: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Robustness: Use restrictions to ignore objects that are notthe user

Page 41: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Multi-user: Track more than one person at a time

Page 42: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

And of course, get the rest of the joints: hips, knees, etc.

Page 43: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

How to use it?

Page 44: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

First reduce the depth buffer's dimension

Reducing the buffer's dimension will make things faster

Page 45: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

While at it, it's wise to also apply a depth threshold

Page 46: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Asynchronous API

Page 47: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

SkeltrackSkeleton *skeleton = SKELTRACK_SKELETON (skeltrack_skeleton_new ());skeltrack_skeleton_track_joints (skeleton, depth_buffer, buffer_width, buffer_height, NULL, on_track_joints, NULL);

Page 48: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)
Page 49: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Synchronous API

Page 50: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

SkeltrackJointList list;list = skeltrack_skeleton_track_joints_sync (skeleton, depth_buffer, buffer_width, buffer_height, NULL, NULL);

Page 51: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

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)

Page 52: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Join us!

https://github.com/joaquimrocha/Skeltrack

Page 53: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Nifty Tools for Development:

GFreenect: https://github.com/elima/GFreenect

GFreenect Utils: https://github.com/joaquimrocha/gfreenect-utils

Page 54: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

GFreenect Python Example

Page 55: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Tool: depth-file-viewer

Page 56: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Tool: record-depth-file

Page 57: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Demo?

Warning: Might go wrong!

Page 58: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Questions?

Page 59: Skeltrack: A Free Software library for skeleton tracking (GUADEC 2012)

Creative Commons pictures from flickr:Kinect: Auxo.co.krMonkey: nothingtosayKid Playing: Rob WelshSkeleton: Dark Botxy

Other non CC images:Doctor: http://research.microsoft.com/en-us/projects/touchless/Minority Report:http://www.ovelf.com/2010/04/14/oblong-tan-g-speak-arttirilmis-gerceklikte-hareketlerin-3-boyutta-yorumlanmasi/