Kinect op de PC: eerste stap naar een Natural Interface

12 reacties
Inhoudsopgave
  1. 1. Inleiding
  2. 2. Dieptekaart
  3. 3. Middleware
  4. 4. Games voorbij
  5. 5. Motion capture
  6. 6. Zelf aan de slag
  7. 7. Microsoft SDK vs PrimeSense OpenNI/NITE
  8. 8. Conclusie
  9. 9. Besproken producten
  10. 10. Reacties

Inleiding

De ‘bewegingsbediening’ van de Nintendo Wii leek bij introductie een gimmick. Het enorme verkoopsucces deed echter concurrenten Sony en Microsoft alle zeilen bijzetten om ook zoiets voor de eigen consoles te introduceren: Move, respectievelijk Kinect. Die laatste werkt sinds kort ook op de PC. Wat kun je daar nu mee, bewegingsbediening?

Het was 1979 toen The Hitchhiker’s Guide To The Galaxy van Douglas Adams verscheen, waar het volgende citaat uit komt:

A loud clatter of gunk music flooded through the Heart of Gold cabin as Zaphod searched the sub-etha radio wavebands for news of himself. The machine was rather difficult to operate. For years, radios had been operated by means of pressing buttons and turning dials; then as the technology became more sophisticated, the controls were made touch-sensitive (you merely had to brush the panels with your fingers); now all you had to do was wave your hand in the general direction of the components and hope. It saved a lot of muscular expenditure of course, but meant that you had to sit infuriatingly still if you wanted to keep listening to the same programme.
(Douglas Adams, The Hitchhiker’s Guide To The Galaxy)

Ruim dertig jaar later staat bewegingsdetectie als bedieningsmethode op het punt om realiteit te worden, in plaats van komisch bedoelde science fiction. De afgelopen jaren hebben we voornamelijk via spelcomputers kunnen kennismaken met deze vorm van interactie, al is tegenwoordig ook iedere smartphone wel uitgerust met een acceleratiemeter. Inmiddels is de techniek genoeg gevorderd, dat bediening door middel van gebaren in de nabije toekomst wel eens in veel meer producten toegepast zou kunnen worden. De Kinect-accessoire van Microsoft bleek niet alleen zeer populair onder console-bezitters, ook als invoerapparaat voor de PC zagen velen een groot potentieel.

Microsoft introduceerde de Kinect, tijdens de ontwikkeling nog bekend als ‘Project Natal’, officieel op 4 november 2010. Dezelfde dag loofde het open source hardwarebedrijf Adafruit een beloning van 1000 dollar uit voor wie als eerste open source drivers voor de Kinect ontwikkelde en een ‘proof of concept’ kon demonstreren. Microsoft was aanvankelijk weinig enthousiast over wat het zag als een ‘oproep tot hacken’ van hun duur ontwikkelde speelgoed. Het bedrijf zag echter al snel in dat het louter driver-ondersteuning voor andere platforms betrof – een voor de hand liggende mogelijkheid, aangezien de Kinect ‘niet zomaar’ (aldus Microsoft) voorzien was van standaard USB-aansluitingen. Adafruit had ondertussen de beloningspremie verdriedubbeld en al op 10 november 2010 kon de winnaar, Héctor Martín Cantero, deze in ontvangst nemen voor zijn Linux-driver voor de RGB-camera en de dieptesensor. Sindsdien is een groot aantal projecten gestart om allerlei softwaretoepassingen voor dit nieuwe ‘human interface device’ te ontwikkelen; een aantal daarvan komt verderop in dit artikel aan bod. In december 2010 bracht PrimeSense, dat het referentieontwerp voor de Kinect had vervaardigd, een eigen open source driver uit en op 16 juni 2011 introduceerde Microsoft zelf de bètaversie van een eigen SDK met Windows 7 compatibele drivers.

Voor we gaan kijken naar de verschillende drivers en toepassingen, gaan we echter in op de hardware en werking van de Kinect.

Dieptekaart

Kinect bestaat feitelijk uit twee componenten: de softwareaansturing die ontwikkeld is door Rare, een onderdeel van Microsoft Game Studios; en de hardware, die van oorsprong ontwikkeld is door het Israëlische bedrijf PrimeSense. Deze hardware bestaat uit een horizontale balk, bevestigd op een gemotoriseerd kogelgewricht. In de balk bevinden zich drie sensoren: een RGB videocamera, een dieptesensor (bestaande uit drie infraroodsensors) en een microfoonarray. Verder zit er een motor in de voet, waarmee de Kinect 30 graden omhoog en omlaag kan bewegen; de motor bedient ook de zoomfunctie van de camera. De combinatie van sensoren maakt 3D motion capture, gezichtsherkenning en stemherkenning mogelijk.

De dieptesensor is de spil van het geheel: hiermee wordt het mogelijk om een object of persoon in een driedimensionale ruimte te detecteren, te plaatsen en te volgen. Deze sensor werkt zoals gezegd op basis van infrarood licht – dit is voor het menselijk oog niet te detecteren, maar een CMOS-sensor heeft er geen enkel probleem mee. Door weerkaatst infraroodlicht te analyseren (vergelijkbaar met hoe een radar of lasersnelheidsmeter werkt), kan een ‘dieptekaart’ getekend worden. Dat doet de PrimeSense-technologie door een klasse-1 infraroodlaser het gebied voor de sensor te laten bestrijken. Door het weerkaatste licht te analyseren, wordt het mogelijk om bijvoorbeeld een persoon te onderscheiden van de bank waarop hij of zij zit. Afstand wordt aangegeven door een kleurcodering: bijvoorbeeld rood, groen, geel, etc., met grijs voor objecten die te ver weg zijn om onderscheiden te worden.

Door de dieptekaart te combineren met het beeld van de 640x480 pixels tellende RGB-videocamera, ontstaat een videobeeld met diepte-informatie. Dit onderdeel van deze technologie mag rustig revolutionair genoemd worden. Elk van de 307.200 beeldpunten van het camerabeeld wordt hierdoor potentieel een ‘3D datapunt’, zoals PrimeSense dat noemt. Waar de Nintendo Wii van slechts twee punten diepte en beweging kan detecteren, is dat bij de Kinect-technologie dus aanzienlijk meer, al zal het in de praktijk op hooguit enige tientallen uitkomen. Er moet immers voldoende onderscheid qua diepte gemaakt kunnen worden én het betreffende punt moet afzonderlijk te volgen zijn bij beweging. De ledematen en gewrichten zijn de meest voor de hand liggende ‘datapunten’.

Een 3D datapunt kun je zien als een bedieningselement: door de beweging van zo’n datapunt te volgen, kan de Kinect aan een spel of programma een instructie doorgeven, bijvoorbeeld om het beeld naar links te bewegen. Of ‘versnel het voertuig’ – en ga zo maar door. Dat is ook een bijzonder kenmerk van de Kinect-technologie: er zijn geen aparte sensoren of op de kleding te bevestigen meetpunten vereist, om een object te registreren en te volgen. Waar je voor tennis op de Wii een Wii-controller nodig hebt (eventueel in een plastic tennisracket-accessoire), kan Kinect de vorm van je eigen tennisracket registreren en met behulp van de juiste algoritmes ook daadwerkelijk als racket herkennen. Zo kun je dus een tennisgame spelen met je eigen racket!

Middleware

Om de datapunten correct te verwerken, is speciale software nodig. Enerzijds heb je dus de software die het 3D-beeld goed registreert, anderzijds software die veranderingen in dat beeld vervolgens correct interpreteert. Eén basis daarvoor is de NITE middleware, een soort softwarelaag tussen de basisdrivers van de Kinect/PrimeSense en de applicatie die van bedieningsinvoer voorzien moet worden. Een eenvoudig voorbeeld wordt meegeleverd door zowel Microsoft als PrimeSense bij de eigen drivers: een algoritme dat op basis van de camera- en dieptedata een geanimeerd ‘skelet’ kan tonen. Dat is mogelijk doordat in de middleware allerlei objecten zijn ‘voorgedefinieerd’, zoals “een lichaam is tussen de X en Y centimeters lang en voorzien van twee benen en twee armen”. Daarnaast zijn allerlei houdingen waarin een lichaam zich kan bevinden al voorgeprogrammeerd om eenvoudig herkend te worden: in de Kinect-software zijn dat er maar liefst 200. Dat helpt ook bij het volgen van je bewegingen: als het beeld even minder duidelijk of geblokkeerd is, kan Kinect de pose waarin je uitkomt vergelijken met een van de voorbeelden en op basis daarvan de gemaakte beweging analyseren.


Een voorbeeld van een ‘middleware component’ is de kant-en-klare NITE API van PrimeSense.

Geluid

Hoewel we het hier voornamelijk hebben over de dieptewerking en bewegingsregistratie van de PrimeSense-technologie, zijn de audiofuncties van de controller, in het bijzonder de stemherkenning, indrukwekkend genoeg om apart te vermelden. In de Kinect bar zitten vier microfoons, alle naar onderen gericht, achter een rooster aan de onderzijde van de sensor. Eentje zit aan de linkerkant, de andere drie rechts – deze positionering is de uitkomst van onderzoek door Microsoft in 250 verschillende huizen met 16 microfoons. De vereiste om de microfoons uit elkaar te plaatsen is ook de reden voor de breedte van de Kinect. Het microfoonarray is geoptimaliseerd voor stemherkenning; geluid van je surround-speakers wordt automatisch weggefilterd. Om nog beter de juiste stem te herkennen, maakt de array gebruik van de lokalisering door de camera. Op basis van deze gegevens versterkt de CPU in de Kinect het geluid op jouw positie, terwijl het omringende geluid juist genegeerd wordt. Net als de positiebepaling en bewegingsdetectie werkt de stemherkenning in realtime.

Games voorbij

De Kinect-balk van 150 euro kan dus trucs uithalen, die tot voor kort een paar ton kostten – motion capture is bijvoorbeeld verre van goedkoop. Natuurlijk heeft Kinect zijn beperkingen (met name de resolutie is niet heel hoog) maar het combineren van videobeeld en de infrarood ‘dieptekaart’, samen met het gevoelige microfoonarray (zie kader) levert genoeg precisie op voor de besturing van een spel… en nog veel meer.

Direct na het beschikbaar komen van de open source drivers van Héctor Martín op github, gingen heel wat programmeurs enthousiast aan de slag. Met de drivers van PrimeSense en de SDK van Microsoft zijn er in korte tijd heel wat tools beschikbaar gekomen om zelf Kinect-toepassingen mee te maken. De meeste toepassingen tot dusver maken gebruik van de PrimeSense OpenNI API, maar ook voor Windows zijn al heel wat test cases gemaakt. Een enkele uitzondering daargelaten, waarover verderop meer, betreft het wel voornamelijk demo’s en proof of concepts. Het zal nog wel even duren voordat er meerdere praktische toepassingen beschikbaar komen. Nu Microsoft officieel de 1.0-versie van de KinectSDK heeft aangekondigd, evenals een Kinect-variant speciaal voor (Windows-)PC's, zal de ontwikkeling wel in een stroomversnelling geraken.

Minority Report

Dat gezegd hebbende, is het leuk en interessant om te zien welke toepassingen er nu al zijn. Eén van de meest tot de verbeelding sprekende is natuurlijk het bedienen van een PC, vergelijkbaar met de bediening zoals die in de film Minority Report te zien was. Daar zijn dan ook heel wat voorbeelden van te vinden. Dit type bediening wordt inmiddels aangeduid als ‘natural interface’ (NI) ofwel ‘natural user interface’ (NUI).

Voorbeelden zijn het gratis programma KinEmote (op moment van schrijven in versie 0.4) en de betaalde variant Win&I. Deze laatste probeerden we uit. Win&I is gebaseerd op het OpenNI framework. Na betaling van 19,90 euro (39,90 voor de zakelijke versie) ontvang je de drie componenten van deze API en het installatiebestand van Win&I. De software werkt weliswaar, maar daar is het ook wel mee gezegd. Een van de minpunten van de Kinect is een kleine vertraging tussen waarneming en doorsturen van een commando. Wanneer een toepassing goed geprogrammeerd is, merk je daar weinig van, maar bij Win&I is die vertraging nog té zeer aanwezig, waardoor het lastig is commando’s op het juiste moment door te geven. Ook zijn de gekozen bewegingen niet heel intuïtief, zo zou een beweging naar links voor de linkermuistoets niet onze eerste keuze zijn. De ontwikkelaar van Win&I wees ons wel op de mogelijkheid de gevoeligheid aan te passen door het configuratiebestand te wijzigen; versie 2.0 moet ondersteuning bieden aan aansturing met twee armen/handen tegelijk, waarmee de ‘Minority Report’-ervaring weer een stap dichterbij de realiteit komt. Op de website van de fabrikant is een filmpje te zien, waarmee je een goede indruk krijgt van hoe het werkt: met wat oefening heel aardig, maar een echt ontspannen vorm van bediening is het nog niet.


Motion capture

Het pakket iPiSoft Desktop Motion Capture bestond al voor de introductie van de Kinect. Het pakket is bedoeld voor bewegingsregistratie (motion capture), zonder gebruik van zogenaamde ‘markers’, met relatief eenvoudige camera’s: het bedrijf beveelt bijvoorbeeld de PlayStation 3 EyeToy camera aan. Met het beschikbaar komen van de Kinect en de open source drivers hiervoor, grepen de makers de gelegenheid aan om hun bestaande kennis te combineren met de superieure diepteregistratie van de Kinect. Met Kinect werd het mogelijk om met één camera (in plaats van vier tot zes) aan motion capture te doen. Wie zich bezighoudt met 3D-modelleren, animaties en/of games maken, kan dankzij deze toevoeging hiermee relatief voordelig zeer krachtig ontwikkelgereedschap aanschaffen.


Avatar

In het verlengde van motion capture-toepassingen ligt het direct besturen van avatars – dat kunnen volledig virtuele modellen in een 3D (game)-wereld zijn, maar ook ‘echte’ avatars. Een Zweedse ontwikkelaar ging aan de slag met de Robosapien (een van de modellen van de firma WowWee, een op afstand bestuurbare robot. Jimmy Engstrom verbond een USB infraroodzender met een computer en ‘vertaalde’ door de Kinect herkende bewegingen in commando’s die de Robosapien begrijpt. Vervolgens imiteerde het robotje zijn bewegingen nagenoeg perfect. In combinatie met een grotere ruimte, waarin ook loopbewegingen kunnen worden vastgelegd en doorgestuurd, is het met deze techniek mogelijk een robot op zeer intuïtieve wijze aan te sturen – ideaal voor omstandigheden die niet veilig of geschikt zijn voor mensen, zoals op de bodem van de zee of in een lekkende kerncentrale.

Zelf aan de slag

Wanneer je zelf aan de slag wilt, kan je dus kiezen tussen Microsofts SDK en het PrimeSense OpenNI framework met de NITE middleware. In de tabel op deze pagina kun je het verschil tussen beide zien. Het is duidelijk dat geen van beide opties direct alle mogelijkheden van de Kinect goed ondersteunen. Beide hebben sterkere en zwakkere punten. Qua eenvoud van installatie en om direct mee aan de slag te gaan is de SDK van Microsoft vermoedelijk de beste optie. Wil je met name handgebaren herkennen en verwerken, dan lijkt OpenNI de beste keuze te zijn. Bijkomend voordeel van dit framework is de vrij uitgebreide documentatie die hiervoor beschikbaar is.

Kies je voor de SDK van Microsoft, dan kun je programmeren in C#, Visual Basic of een .NET taal, inclusief C++. OpenNI ondersteunt bovendien ook Flash. Wil je meer, dan kun je nog terecht bij het OpenKinect open source initiatief, dat voortbouwt op de door Héctor Martín ontwikkelde drivers. Hier vind je ook wrappers voor onder andere Python, Java en Javascript.

Hieronder vind je enkele tools om meteen zelf aan de slag te gaan:

Microsoft SDK voor Kinect
Getting started with Microsoft SDK for Kinect
OpenNI
OpenNI User Guide v3
NITE middleware
OpenKinect

Microsoft SDK vs PrimeSense OpenNI/NITE

In de onderstaande tabel kun je de verschillen zien tussen de open source driver van PrimeSense en de SDK van Microsoft.

  Microsoft SDK PrimeSense OpenNI/NITE
Audio-ondersteuning Ja -
Motorondersteuning Ja -
Lichaam-tracking    
Kalibratiepose Geen kalibratiepose vereist Kalibratiepose vereist
Detectie en weergave handen, voeten, hoofd en sleutelbeenderen Ja Beperkt
Detectie en weergave verborgen gewrichten Redelijke weergave bij benadering Geen weergave
Events voor new user enters/leaves frame - Ja
Hand-tracking - Ja
Detectie van details Alleen positie van gewrichten, geen rotatie Berekent ook rotatie van gewrichten
Meerdere sensoren Ja Ja, met wat knutselen
Automatisch samenvoegen sensorinformatie video en diepte - Ja
Herkenning van gebaren - Ja
Windows XP/Vista - Ja
Windows 7 32-bit Ja Ja
Windows 7 64-bit Ja -
Linux   Ja
Mac OS X - Ja
Unity 3D game engine   Ja
Opname/afspelen naar/van disk - Ja
Uitvoer ruwe IR video data - Ja
     
Installatie Eenvoudige installatie uit één bestand Installatie met drie bestanden en licentie-invoer
Licentie Alleen voor eigen gebruik / niet-commercieel Commercieel gebruik toegestaan

Conclusie

Hoewel bediening middels een ‘Natural Interface’, zoals de Kinect/Primesense-achtige sensors inmiddels gedoopt zijn, nog in de kinderschoenen staat, is het potentieel naar onze mening bijzonder groot. Aanraakbediening voor desktops heeft de nodige haken en ogen; het stelt met name hoge eisen aan de interface. Bediening door middel van bewegingen is minder veeleisend, maar een grotere cursor is wenselijk, om ook op wat grotere afstand te kunnen zien wat je aan het doen bent. Verder kunnen bestaande ‘gebaar’-commando’s voor muis of touchpad eenvoudig ‘vertaald’ worden naar een beweging ‘in de lucht’.

Het zal ons benieuwen of de mogelijkheden snel door de grote systeembouwers onderkend worden, en we het komende jaar dus systemen gaan zien met ingebouwde dieptesensor. Zoals gezegd heeft Microsoft een variant aangekondigd voor de PC, die ook op kortere afstanden moet werken en preciezer moet zijn. Tot die er is, ga je als echte hardware-freak natuurlijk zelf aan de slag met bewegingsbediening! Behalve de Kinect Xbox 360-accessoire is ASUS inmiddels met de Xtion Pro gekomen, die vergelijkbare mogelijkheden heeft, aangezien hij is gebaseerd op dezelfde technologie.

Toepassingen

Wil je zelf zien wat er allemaal mogelijk is met een ‘Natural Interface’-besturing? Deze links geven een goede eerste indruk!

Demo’s van Kinect Hacks
KinEmote muis/keyboard-vervanging
Motion capture
Muis/toetsenbord vervanging onder Linux
Robosapien besturing



Besproken producten

Vergelijk  

Product

Prijs

Asus Xtion Pro

Asus Xtion Pro

  • ###
Niet verkrijgbaar
Microsoft Xbox 360 Kinect Adventures

Microsoft Xbox 360 Kinect Adventures

249,08 €

1 winkel
0
*