Flash

Headtracking deel 1: Headtracking opzetten

Omdat veel van mijn opleidinggenoten voor de verleiding graag aan de gang wilden met headtracking maar veel mensen het als een onmogelijkheid zagen. Dacht ik dat het een mooi excuus was om een hoop bezoekers te trekken naar mijn website, en natuurlijk om mijn mede mensen te helpen, door een tutorial te schrijven over Headtracking in VVVV in combinatie met flash. Ik ga er van uit dat je reeds een simpele webcam heb zodat je direct aan de slag gaat. Mocht dit niet zo zijn kan ik je aanraden om niet een webcam te nemen met een hoge resolutie omdat hierdoor de verwerkingssnelheid van de headtracking achteruit gaat waardoor het effect minder sterk is (op PAL resolutie is de vertraging soms wel 2,5 seconde!).

Ik ga overigens de hele verder met dit onderwerp, en doe ik tutorials over het tracken van twee hoofden tegelijkertijd en toon hoe je een eye-toy game kan maken waarbij je met een ander iemand pong kan aansturen door je hoofd voor een 2 player pong game.

Om te beginnen een lijstje ingredienten:
- Een pc
- Een webcam
- VVVV
- Een gezicht om te testen, bijvoorbeeld dat van jezelf

VVVV
Dit zal voor de meeste mensen het spannendste gedeelte zijn omdat ze hier nog nooit mee gewerkt hebben, maar het valt allemaal wel mee. Hoewel ik het allemaal al een keer eerder heb uitgelegd doe ik het nog eens rustig stap voor stap voor de mensen die geen zin hebben om terug te bladeren.

VVVV kun je downloaden vanaf vvvv.org en instaleer je als elk ander programma, leuk bijkomend feit is dat je het gewoon vanaf je externe harde schijf kan draaien en dus overal mee naar toe kan slepen. Als je het programma vervolgens opstart zul je echter wat minder gemakkelijk aan de slag kunnen omdat het enige wat je ziet een grijs scherm is.

Om alle menu’s te zien klik je op het muiswieltje (3e muisknop) of hou je de spatiebalk in terwijl je op de rechtermuisknop klik. Als je nu al de moed wil opgeven kun je in ieder geval het programma afsluiten ;-) .

De webcam feed op het scherm krijgen

Nu we alle mensen hebben afgeschud die bang zijn voor nieuwe dingen gaan we eens aan de slag. Zorg dat je webcam is ingeplugd en herkent wordt door Windows. Als dit zo is dubbelklik ergens in het grijze vak van VVVV. Als het goed is kun je nu beginnen met typen, typ nu in videoIn of selecteer hem alvast uit de autocomplete lijst, klik vervolgens ergens in het grijze scherm. Je heb nu een stukje programma die snap dat hij ergens vandaan een videostream moet trekken.

Dat is allemaal leuk en aardig maar we moeten de computer ook vertellen dat hij de video moet uitzenden zodat wij kunnen zien of het allemaal werkt. klik dus ergens anders op het scherm en typt VideoOut, kies vervolgens de Dshow9 en niet de Dshow 9 device. je wilt het namelijk vertonen op je computer en niet zenden naar een apparaat.

Nu dat gedaan is willen we de video steam die geladen wordt ook verbinden aan het stuk programma dat de video moet gaan vertonen. Dit doe je door op het grijze blokje te klikken links onder VideoIn. Nu zul je zien dat je een lijntje kan trekken naar het grijze blokje links bovenin bij VideoOut. Als alles in goed gegaan zien je dat een ActiveMovie Window verschijnen op je scherm. Wat je nu heb gedaan in VVVV termen is 2 nodes (VideoIn en VideoOut) verbonden door Pins (de grijze blokjes). De Pins bovenop een node zijn de Input pins en de pins onderop zijn de output pins.

Bij sommige mensen zal dit schermpje meteen de webcam feed tonen en bij andere niet, dit komt doordat deze mensen meerdere apparaten hebben die een videostream kan versturen. Mocht je niet meteen je webcam beeld zien doe het volgende. Bij de VideoIn Node is de meeste rechtse input pin (bovenop) klik je met de rechtermuis knop en kies je uit het lijstje dat verschijnt je webcam. Als het goed is zal je nu in je ActieveMovie window zien wat je webcam ziet.

VVVV objecten laten herkennen


Huzzah! we hebben beeld! Nu gaan we verder door VVVV objecten te laten herkennen die we voor de camera houden. hiervoor heeft VVVV ook een stukje programma dat heet DetectObject. klik dus weer ergens op het grijze vlak, typ in DetectObject en je heb een nieuwe node die instaat is objecten te herkennen vanaf een video feed.

Om het object herkennen te laten plaatsvinden haal je het bestaande streepje tussen VideoIN en VideoOUT weg, klik op het streepje en druk op delete, en verbind je het outpunt streepje van VideoIn naar de input node van DetectObject (het grijze blokje links bovenin). Verbind vervolgens het de output node van DetectObject naar dat van VideoOut. Nu heb nu beeld maar er lijkt niet heel veel te gebeuren……

Dat klopt! het probleem is namelijk dat je DetectObject door middel van een bestand moet leren wat hij moet gaan herkennen als object. Nou schijnt het mogelijk te zijn om deze bestanden zelf te maken via openCV maar dit is nogal een kostbaar proces en het is veel makkelijker als je een bestaand bestand pakt van iemand anders. Gelukkig heeft de help beschrijving van DetectObjects op de vvvv site 2 suggesties. de eerste is deze site met een collectie om verschillende dingen te volgen zoals ogen, hele lichamen, gezicht vanuit verschillende hoeken en wandklokken. Deze site is helaas op dit moment niet te bereiken, ik heb nog wat bestanden van deze site die ik zal uploaden zodra ik thuis ben.

De tweede suggestie is om openCV te downloaden en het voorbeeld bestand er uit te vissen die in staat is om de voorkanten van gezichten te herkken. Die heb ik even voor jullie er alvast uitgevist en hier neergezet, ik zal tijdens deze tutorial ook dit bestand gebruiken omdat het een snel bestand is qua verwerkingsnelheid en het snel gezicht herkent.

Nu we een bestand hebben om zaken te herkennen zorgen we het bestand op een makkelijk te bereiken plek is neergezet en gaan we met de rechtermuis knop klikken op de derde input node van DetectObject. Je krijg nu een bestanddialoog box waar je het herkenningsbestand selecteert. Als je dit gedaan heb zal je op het moment dat DetectObject iets herkent een rood vierkant tekenen om het herkende object.

Kijken naar de mogelijkheden van DetectObject

Voordat we spannende dingen gaan doen wil ik eerst laten zien wat je allemaal er kan met Detect object qua instellingen, hierdoor kun je het resultaat verbeteren en je headtracking optimaal laten verlopen.

Input pins:
Video Input:
de videobron die gebruikt moet worden voor het tracken, dit kan een webcam feed zijn of een videobestand.
Show rectangle: kan je op 0 of 1 zetten (true or false), dit laat de rode vierkanten zien als er iets getracked wordt. 0 is geen vierkanten laten zien, 1 wel.
Trainingfile: Dit geeft aan welk bestand er wordt gebruikt om objecten te herkennen.
Min Neigbours: Hoeveel herkenningen uit het bestand moet toegepast worden voor het als hoofd telt, lagere waarde is snellere herkenning, hogere waarde is nauwkeuriger.
Scale cascading: DetectObject scant het totale plaatje op verschillende precisie niveau’s om te kijken of het dingen herkent. Als je dit getal hoger maakt zal het minder niveau’s scannen en bij lagere getallen op meer niveau’s scannen. Speel hier dus een beetje mee als je het gevoel hebt dat er vertraging ontstaat.
Canny pruning: Heeft ook te maken met hoe precies hij het beeld analyseert, Deze input op 1 zetten activeert een snellere methode dan wanneer je hem op 0 zet, maar is natuurlijk weer minder precies
MIN. face side: Hoe groot moet het object minimaal zijn voordat het herkent mag worden. Handig voor als je pas gezichten wil herkennen vanaf een bepaalde afstand.
Unique ID: moet het ID nummer voor een getracked object steeds bij 1 beginnen of moet hij doortellen sinds het gestart is
Lifetime: Hoelang moet het object blijven staan als tracking wegvalt, is in staat om het daarna weer op te pikken als object in dezelfde buurt terug komt binnen de tijd.
Enabled: kan je op 0 of 1 zetten, en bepaald of DetectObject moet tracken of niet.

Output pins:
VideoOutput:
Video output om te koppelen aan bijvoorbeeld afspeel vensters
X: de X positie van het getrackte object
Y: de Y positie van het getrackte object
Width: de breedte van het getrackte object
Height: de hoogte van het getrackte object
ID: het ID nummer van het getrackte object

Let er overigens op dat DetectObjects prima meerdere objecten tegelijkertijd kan tracken en dat de output pins dan zaken in Array’s gaan laten zien. Omdat Array’s een beetje anders werken in VVVV kom ik hier later op terug.

Zoals je ziet zijn er heel van instelmogelijkheden en output variabelen die je kan gebruiken. Door de Width en Height variabelen zou je kunnen kijken hoe dichtbij iemand staat en door de X Y variabelen zou je bijvoorbeeld een object iemand kunnen laten volgen door een winkel heen.

Morgen of woensdag (ligt aan de hoeveelheid tijd die ik deze week overhoud) gaan we kijken hoe we al die mooie variabelen over kunnen zetten naar flash zodat we er dingen mee aan kunnen sturen in flash. Vragen kunnen hieronder gesteld worden en zullen meegenomen worden in volgende tutorials

  • Share/Bookmark

Discussion

No comments for “Headtracking deel 1: Headtracking opzetten”

Post a comment

Advertenties via ProjectWonderful. Jouw advertentie hier voor slechts !