<HTML> <HEAD> <TITLE>Homepage of Ryan Geiss - About Project Natal</TITLE> </HEAD> <BODY LINK="FFD020" VLINK="FFD020" ALINK="FFD080" BGCOLOR="black"> <FONT FACE="arial" SIZE="2"><BR> <TABLE CELLPADDING=1><TR><TD WIDTH=8>&nbsp;</TD><TD WIDTH=468 VALIGN="TOP"><FONT COLOR="white" SIZE="2"> <FONT SIZE="3" COLOR="#F0C043"><B>At a glance: &nbsp;<FONT COLOR="white">KINECT</FONT> (a.k.a. Project Natal) </B></FONT><BR><BR> From July 2008 until October 2010, I worked at Microsoft on the Xbox Incubation team. During this time, we incubated and productized Kinect - a new input device for the Xbox 360, which lets you control games (via full-body 3D tracking and voice recognition) without holding anything in your hands.<BR><BR> <IMG SRC="IMG/kinect.jpg" WIDTH=400><BR><BR> <FONT COLOR="#FFCC43"><B>The Challenge</B></FONT><BR><BR> It turns out that skeletal tracking (i.e. motion capture) is a <EM>very</EM> difficult problem to solve robustly. Think of all the degrees of freedom (moveable joints) in the body - people can bend, twist, hide their arms against their body, put limbs behind their back, and so on. If you take a person and make their torso face the camera, then let them move each joint in their arms and legs into all possible pose combinations, at 15-degree steps (which is quite large), you get about 2^48 (or 281 trillion) possible poses - and that's just when the person is facing the camera! So now, multiply by at least 24, to handle upright torso rotation (in 15-degree steps), and even more to handle the non-upright torso positions. As you can see, the pose space is virtually infinite.<BR><BR> On top of that complexity, think of the vast variety in people's shapes, sizes, hair, clothing, and so on. And further, consider that when you look at a scene, it's very hard to know what to track, or what is human and what isn't. Finally, you have to do all of this computation <EM>in realtime</EM> (bwahaha...) - unlike mocap systems, you're not allowed to go 'offline' and compute the answer at leisure, or able to look backwards <EM>and forward</EM> in time.<BR><BR> As you can see, skeletal tracking is a rather difficult problem.<BR><BR> <FONT COLOR="#FFCC43"><B>My role</B></FONT><BR><BR> I developed body-tracking code for Kinect (formerly Project Natal), which allows you to control the Xbox using only your body - no hand-held controller is required.<BR><BR> In my first two months at Microsoft, I wrote a powerful skeletal tracker that largely convinced the company (on the software front, at least) to greenlight Project Natal.<BR><BR> Over the course of the next 8 months I was the primary developer evolving this tracker, with support from a small team. During this time, we also integrated a new bodypart detection algorithm (Exemplar) from MSR, which further helped improve it. When we first showed Project Natal to the world, at E3 in June 2009, it was driven by this tracker.<BR><BR> After that, the Production team took over writing the shipping tracker, and I went back to R&D for about six months.<BR><BR> Then, in February 2010, I took a look at a major problem: the shipping tracker would not be able to properly detect or track people when sitting down. Within a few weeks, I had written an alternate tracker that solved this problem, and as a bonus, produced extremely accurate hand positions. This tracker did depend on MSR's (brilliant) algorithm, Exemplar, but I wrote all of the tracking code aside from that.<BR><BR> Over the next six months, I worked closely with the Production team to integrate this new tracker into the shipping codebase, and to further improve the accuracy to extremely high levels. This tracker ended up shipping with Kinect, but only powering the Dash - games had not yet had time to take advantage of it. (But, hopefully, we will see games powered by this tracker very soon!)<BR><BR> I also contributed to a large number of patents (17 I believe) during my time with the company.<BR><BR> [ <A HREF="index.html">back to geisswerks</a> ] </FONT></TD><TD WIDTH=4>&nbsp;</TD><TD WIDTH=468 VALIGN="TOP"><FONT COLOR="white" SIZE="2"> </FONT></TD></TR></TABLE> </FONT> </BODY> <BR><BR>