Gebarentaal herkennen met de Microsoft Kinect

Maat: px
Weergave met pagina beginnen:

Download "Gebarentaal herkennen met de Microsoft Kinect"

Transcriptie

1 Gebarentaal herkennen met de Microsoft Kinect Joery Vannieuwenhuyse Promotor: prof. dr. ir. Benjamin Schrauwen Begeleiders: Pieter-Jan Kindermans, Sander Dieleman Masterproef ingediend tot het behalen van de academische graad van Master in de ingenieurswetenschappen: computerwetenschappen Vakgroep Elektronica en Informatiesystemen Voorzitter: prof. dr. ir. Jan Van Campenhout Faculteit Ingenieurswetenschappen en Architectuur Academiejaar

2

3 Gebarentaal herkennen met de Microsoft Kinect Joery Vannieuwenhuyse Promotor: prof. dr. ir. Benjamin Schrauwen Begeleiders: Pieter-Jan Kindermans, Sander Dieleman Masterproef ingediend tot het behalen van de academische graad van Master in de ingenieurswetenschappen: computerwetenschappen Vakgroep Elektronica en Informatiesystemen Voorzitter: prof. dr. ir. Jan Van Campenhout Faculteit Ingenieurswetenschappen en Architectuur Academiejaar

4 Voorwoord Ik heb in eerste instantie gekozen voor een masterproef waarin gebruik wordt gemaakt van de Kinect camera omdat ik reeds langer de intentie had om met de voornoemde camera te werken. Echter was er altijd iets belangrijker dat me verhinderde om met zo een projectje te beginnen. Bij deze heb ik dan de kans gegrepen om met de Kinect te werken. Hiernaast is er gekozen om met gebarentaal te werken omdat dit een populaire toepassing van de Kinect aan het worden is waar ook veel onderzoek rond gebeurt. Echter had ik deze masterproef niet kunnen verwezenlijken zonder de hulp van een aantal personen, die ik dan ook expliciet wens te bedanken voor de geleverde bijdragen. David Verstraeten, Sander Dieleman en Pieter-Jan Kindermans hebben me op de vergaderingen, maar ook daarbuiten, bijgestaan met raad en tips. Ik kon te allen tijde een beroep doen op hun eigen ervaringen en meningen over bepaalde beslissingen. Deze bijstand heeft een cruciale rol gespeeld tijdens de uitvoering van deze masterproef. Voor het opnemen van de dataset wens ik expliciet Jean-Pierre Ball en Siegfried Ball te bedanken. Voor het nalezen van deze masterproef wens ik Sander Dieleman, Pieter-Jan Kindermans en Jean-Pierre Ball te bedanken. Als laatste zou ik ook nog mijn familie, vrienden en vele kennissen willen bedanken voor de steun en getoonde interesse tijdens de uitvoering van deze masterproef en mijn studies in het algemeen. Joery Vannieuwenhuyse, 25 mei 2013

5 Toelating tot bruikleen De auteur geeft de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie. Joery Vannieuwenhuyse, 25 mei 2013

6 Overzicht Gebarentaal herkennen met de Microsoft Kinect Joery Vannieuwenhuyse Promotor: Prof. Dr. Ir. Benjamin Schrauwen Begeleiders: Ir. Sander Dieleman, Ir. Pieter-Jan Kindermans Masterproef ingediend tot het behalen van de academische graad van Master in de ingenieurswetenschappen: computerwetenschappen Vakgroep Elektronica en Informatiesystemen Voorzitter: Prof. Dr. Ir.Jan Van Campenhout Faculteit Ingenieurswetenschappen en Architectuur Academiejaar Universiteit Gent Samenvatting In het eerste hoofdstuk wordt er meer algemene informatie gegeven over gebarentaal waarbij meer precies de Vlaams Belgische gebarentaal het belangrijkste is. Dat hoofdstuk dient de lezer meer achtergrond bij te brengen in verband met gebarentaal om deze masterproef te kunnen volgen en deze ook op de hoogte te stellen van de doelstelling. Daarnaast worden er ook twee use-cases besproken waarbij een commerciële applicatie voor herkenning van gebaren nuttig kan zijn. Het tweede hoofdstuk geeft een overzicht van onderzoek dat reeds werd uitgevoerd en nauw aansluit bij de masterproef. Hierbij wordt gekeken naar onderzoek rond het bekomen van de nodige data voor het herkennen van gebaren, de reeds toegepaste methoden voor het effectief herkennen van gebaren alsook enkele specifieke werken waarbij de Kinect camera reeds werd gebruikt voor herkenning van gebaren. De gebruikte apparatuur en software wordt besproken in het derde hoofdstuk. Bij die bespreking kan de gebruiker meer inzicht verwerven in de Kinect alsook de verschillende software die bekeken en gebruikt is. Daarbij worden er een aantal bevindingen in verband met de software aangehaald en kan er voor meer informatie in verband met de installatie van de software gebruik worden gemaakt van de bijhorende Bijlage. Hoofdstuk vier beschrijft de vingerdetectie die gebruikt is om tot de nodige data voor

7 het herkennen van gebaren te komen. Deze vingerdetectie is voor het overgrote deel eigen werk waarbij dan ook verschillende methoden geïmplementeerd werden. In het hoofdstuk zijn de meest interessante implementaties opgenomen met een beschrijving van de werking. Uit alle methodes werd vervolgens de beste geselecteerd voor verder gebruik op basis van het behaalde aantal frames per seconde en de daarmee gepaard gaande accuraatheid. En als laatste wordt er ook nog een vorm van vingerclustering beschreven die toelaat om de data op niveau van de vingers te achterhalen. In hoofdstuk vijf worden twee vormen van smoothing besproken, met name moving average en exponentiële smoothing. Beide vormen worden besproken gevolgd door de beschrijving van enkele uitgevoerde testen die de methode die definitief gebruikt zou worden diende aan te duiden. Het zesde hoofdstuk geeft een woordje uitleg bij het tot stand komen van de dataset. Dit omvat de mogelijkheid om extern bestaande datasets te gebruiken, de voorwaarden voor het opnemen van de eigen dataset alsook de uiteindelijke opbouw van de zelf opgenomen dataset. Hoofdstuk zeven draait volledig rond een vorm van machinaal leren. Meer precies draait het om het gebruik van Hidden Markov Modellen. Het verantwoordt de keuze om met HMMs te werken en geeft een beknopte introductie tot de opbouw en het gebruik ervan. Na wat theoretische achtergrond volgt er dan een overzicht van de verschillende HMMs die binnen deze masterproef zijn gebouwd en gebruikt. In hoofdstuk acht worden de bekomen resultaten uitgezet. Gezien het grote aantal testen dat is uitgevoerd konden niet alle resultaten worden opgenomen en is er dus een selectie van de meest relevante resultaten gemaakt. Bij de bespreking van de resultaten wordt telkens op bepaalde fenomenen gewezen die dan ook zo goed mogelijk verklaart worden. Het negende en tevens laatste hoofdstuk geeft een beknopte conclusie die uit de masterproef getrokken kan worden. Trefwoorden Gebarentaalherkenning, Kinect, Vingerdetectie, Handdetectie, Hidden Markov Modellen

8 Sign Language recognition using the Microsoft Kinect Joery Vannieuwenhuyse Supervisor(s): Pieter-Jan Kindermans, Sander Dieleman Abstract Today there is still a gap left between speech and sign language recognition whereby sign language recognition is staying behind. This leads to limitations for deaf people because they are only able to communicate with other people when both know sign language. Although some signs can be interpreted by people who do not know sign language, a great deal of signs will bring difficulties when communicating with someone who lacks the necessary skills to interpret them. This is where a system for automatic sign language recognition could be useful. In this article I will explain one approach towards building such a system by using Hidden Markov Models (HMMs). For this system a dataset of twenty signs was recorded and led to 85.33% accuracy in detection of those signs. Keywords Sign language recognition, Microsoft Kinect, Hidden Markow Models I. INTRODUCTION A. Sign language recognition Sign language refers to a language whereby people communicate through the use of gestures instead of spoken words. This means that it is a highly visual language and the users actually use their eyes to listen to another signer. Due to the lack of hearing people that understand sign language, deaf people might run into serious problems when trying to communicate. But for every problem there is a solution and in this case the deaf people could use text writing or data interpreters to communicate. However the use of text writing makes the deaf people more uncomfortable while data interpreters are scarce and most of the time expensive as well. The solution to this problem that is most user friendly is the use of a camera to interpret the sign language and output the right words or sentences. The Microsoft Kinect is a camera which is commercially available for the price of C Furthermore this camera possesses the ability to calculate and offer three dimensional datapoints. These three dimensional points are of interest for the method described in this article. Sign language itself takes place in four dimensions: shape, rotation, position and movement of the hands. Besides these four dimensions there are more elements that can take part in sign language such as facial expressions and the amount of hands that are used. There are signs that use only one hand but where the signer can use two hands to describe two things at once. For instance a story about two people whereby each hand J. Vannieuwenhuyse is a Master student in Computer Science, Ghent University (UGent), Gent, Belgium. Joery.Vannieuwenhuyse@UGent.be. represents one person. In this work however I will only focus on the four main dimensions. B. Previous work A lot of work has been done on sign language recognition whereby a lot of different methods where used. However before the recognition of signs itself it is of utmost importance to trace the hands of a user. To achieve this many different approaches have been developed. One of these methods is segmentation of the video stream by using skin color and afterwards excluding the user s head [1]. The problem of this method is that the user has to wear clothing with long sleeves as it would otherwise greatly hinder the detection of the hands. To make the first method more accurate one could use 3D data to easily differentiate between the hands and the head [2]. But the problem of the uncomfortable sleeves remains. The solution came after research from Microsoft [3] whereby they used only 3D data to detect a person followed by fitting a skeleton on the person. This skeleton then allows easy detection of the hands or any other body part of the user. It is exactly this method that was implemented in the Microsoft Kinect SDK to detect a user. After detection of the hands the recognition of signs could continue. Previous research on the sign recognition itself has shown that it is possible to recognise signs with highly accurate results [4]. To achieve sign recognition a lot of methods have been used in the past such as convolutional networks and Hidden Markov Models. Also the training methods of these systems have very different approaches ranging from a recorded dataset as small as five recordings per gesture up to a live stream of a TV-show with gestures and subtitles. However most of the work that has been done did not take depth data into consideration when trying to recognise gestures. The few works that have been performed on sign language recognition that make use of depth data where all based on the usage of the Kinect camera. Argyros [5] has proven that it is possible to accurately and efficiently detect the handpose in real time using depth data and this at a framerate of 15Hz. Thus suggesting that it is possible to achieve accurate sign language recognition using depth data which is exactly what was achieved with the system d in this article. I also achieved 15Hz framerate on my user tracking algorithm that will not be explained as it is merely a tool to extract the necessary

9 data from the hands. C. Dataset The dataset that was used for this research was recorded with the Kinect camera using the standard 640 by 480 resolution. In total the dataset consisted of twenty signs that where chosen by the other participants who had no knowledge of the used method or its pros and cons. Thus allowing the use of neutral dataset. The signs where recorded fifteen times each and this for each of the 3 persons resulting in a total of nine hundred recordings. Furthermore none of the persons had any real experience with sign language resulting in some variety for the signs between persons. II. HIDDEN MARKOV MODELS As mentioned before I have used HMMs to detect sign language. This means that some HMMs had to be trained in recognizing the gestures whereafter they could be tested. Since there is no labeled data I made use of unlabeled training of the HMMS whereby one HMM per sign was used. The parameters that where used for training included the number of fingers, position and direction of both hands as well as the position and direction of the individual fingers. Thus for each parameter itself another HMM was needed in order to look at the standard detection of gestures based on only one parameter. Naturally the number of fingers is discrete and can take only seven states including a default state that is used when a hand cannot be detected. On the other hand all the remaining parameters can take on a wide range of values in three dimensions (X,Y,Z) with small variances resulting in a continuous distribution. For these parameters a Gaussian distribution was used. Strangely enough multiple test have shown that the results get better when using a specific default value for these Gaussian models instead of a default value with noise. There have also been extensive tests with either standard positions for the fingers as well as positions that were made relative in relation to the center position of the hand. These have shown that relative positions for the fingers give better accuracy for the HMMs based on them. Furthermore there still remains the matter of the amount of hidden states that was used. Again tests have shown that the best amount of hidden states to be used is fixed at three. Up till now I have only spoken about the basic HMM models, however it is also possible to combine multiple HMMs. I have used the method whereby the resulting probabilities after evaluation of an input sequence are multiplied with one another. Keep in mind that the results have to be from the same sign. In other words the probabilities can be summed when working in the logarithmic domain. It is better to be working in the logarithmic domain in order to prevent underflow as a Fig. 1. Confusion matrix for the optimal combined HMM. result of continuously multiplying small floating point numbers. In the end the best results were achieved using a combined HMM with three hidden states that uses only the amount of fingers, position and direction of the hands. The results of such a model will be described in the next section. III. RESULTS The best model that I was able to build uses a combined HMM with three hidden states that makes use of the amount of fingers, position and direction of the hands. Figure 1 shows the result of a test with such a model. This model achieved an accuracy of 84.33% correctly estimated signs. Fifteen recordings of each sign where shuffled in a testset and given to the system for detecting the signs. In the confusion matrix of the figure the amount of correctly detected signs can be seen on the main diagonal. The vertical axis represents the actual signs while the horizontal axis represents the detected signs. It is obvious that the diagonal is interrupted at sign eleven, the reason for this is the almost identical sign three that was detected nine times instead of the sign eleven. Both signs are identical with exception of the initial state. This means that the system is having problems with identical data that a deaf person could interpret by using the context it is used in. There is not really an obvious solution to this problem by looking only at HMMs. However, more complex models that combine results of different methods might be able to differentiate between these two signs. IV. CONCLUSION I have been able to prove that the usage of depth data within HMMs can lead to highly accurate detection of sign language. Furthermore experiments that were not described in this article have shown that the method generalizes fairly well to datasets with more signs. This means that the method that has been described surely has the potential for future research. Although I was

10 unable to detect the signs in real time, I can extract the necessary data from a live stream at 15Hz which is a good first step towards real time detection. What is left to be done to achieve this is segmentation of the live stream. ACKNOWLEDGMENTS First of all I want to thank David Verstraeten, Pieter- Jan Kindermans and Sander Dieleman for the support and advice they provided at regular meetings as well as at unplanned moments. I also want to thank the signers that have participated in the recordings for the dataset. Without Jean-Pierre Ball and Siegfried Ball I wouldn t have had the dataset that was used in my work, which would have led to less accurate conclusions. REFERENCES [1] Antonis A. Argyros, Manolis I.A. Lourakis, Tracking Skincolored Objects in Real-time, invited contribution to the Cutting Edge Robotics book, ISBN , Advanced Robotic Systems International, [2] S. E. Ghobadi, O. E. Loepprich, K. Hartmann, O. Loffeld, Hand Segmentation using 2D/3D Images, Proceedings of Image and Vision Computing New Zealand 2007, pp. 6469, Hamilton, New Zealand, December [3] J. Shotton, A. Fitzgibbon, M. Cook, T. Sharp, M. Finocchio, R. Moore, A. Kipman, A. Blake, Real-time human pose recognition in parts from single depth images, In In CVPR, [4] H. Cooper, Eng-Jon ONG, N. Pugeault, R. Bowden, Sign Language Recognition using Sub-Units, Journal of Machine Learning Research 13 (2012), [5] I. Oikonomidis, N. Kyriazis and A.A. Argyros, Efficient model-based 3D tracking of hand articulations using Kinect, in Proceedings of the 22nd British Machine Vision Conference, BMVC2011, University of Dundee, UK, Aug. 29-Sep. 1, 2011.

11 INHOUDSOPGAVE i Inhoudsopgave 1 Inleiding Gebarentaal Het ontstaan van gebarentaal Gebarentaal en gesproken taal De opbouw van gebarentaal Vlaamse gebarentaal Mogelijke use-cases Scenario één: Communicatie met een stomme Scenario twee: Het aanleren van gebarentaal Doelstelling Voorgaande studies Verwerven van data voor de handen Herkenning van gebaren Herkening van gebaren met de Kinect Apparatuur en Software Microsoft Kinect ROS (Robot Operating System) PCL (Point Cloud Library) OpenNI MLPack De vingerdetectie Kalibratie van een nieuwe gebruiker Het creëren van een 3D puntenwolk Voorbehandeling van de puntenwolk voor de hand Detectie van de vingers

12 INHOUDSOPGAVE ii Punt per punt filter met een kleine bol Punt per punt filter met een grote bol Punt per punt filter met grote kubus Een dubbel filter voor hogere accuraatheid Een dubbel filter met raster voor hogere framerate Clustering van de vingers Smoothing Moving average Exponentiële smoothing Testresultaten De dataset Datasets van derden Richtlijnen voor opname Opbouw van de dataset Machinaal leren Hidden Markov Modellen Training Evaluatie Decodering Logaritmisch domein Types Resultaten Uitgevoerde testen Dataset 7 gebaren Eenvoudige modellen Gecombineerde modellen Dataset 20 gebaren Conclusie 59 A ROS (Robot Operating System) 61 A.1 Het raamwerk opzetten A.2 De opbouw van het raamwerk

13 INHOUDSOPGAVE iii A.3 De werking van vinger-detectie B PCL (Point Cloud Library) 70 B.1 Het installeren van PCL Kinect Fusion C Uitgebreide resultaten van smoothing 74 D Gebruikte gebaren 76

14 Gebruikte afkortingen OpenNI PCL ROS MLPack HMM Open Natural Interaction Point Cloud Library Robot Operating System Machine Learning Pack Hidden Markov Model

15 INLEIDING 1 Hoofdstuk 1 Inleiding 1.1 Gebarentaal Het begrip gebarentaal verwijst naar een taal waarbij gecommuniceerd of gesproken wordt aan de hand van uitgebeelde gebaren. Dergelijke taal wordt hoofdzakelijk door doven en slechthorenden gebruikt waarbij men het hele lichaam gebruikt om te communiceren en de ogen om te luisteren door middel van interpretatie van uitgebeelde gebaren. In deze sectie zal er dieper worden ingegaan op gebarentaal en zal er onder meer worden gekeken naar de opbouw en het ontstaan van gebarentaal, verder wordt er een vergelijking gemaakt met gesproken taal en als laatste wordt ook nog een woordje uitleg gegeven over de Vlaams Belgische gebarentaal. De toelichtingen tot gebarentaal zullen vrij beperkt zijn en hebben enkel tot doel voldoende inzicht te hebben in gebarentaal om deze masterproef te kunnen begrijpen Het ontstaan van gebarentaal Gebarentaal bestaat al sinds het begin der tijden. De mens zocht namelijk steeds naar manieren om te communiceren en indien dit niet met gesproken taal kon werd het lichaam gebruikt om dingen uit te beelden en op die manier toch communicatie mogelijk te maken. Deze uitbeeldingen waren in het begin echter een eigen uiting die ieder op zijn manier bracht zonder dat er een bepaalde structuur aanwezig was. Dit soort van gebarentaal werd dan ook gebruikt bij communicatie met doven, slechthorenden of anderstaligen, ook in het heden wordt dit soort gebarentaal nog veel gebruikt door toeristen die de lokale taal niet beheersen. Dove mensen begonnen echter hun eigen taal te creëren waardoor er een overvloed aan regiogebonden gebarentalen en dialecten ontstonden, terwijl ook niet-doven een bepaalde vorm van gebarentaal ontwikkelden om te kunnen communiceren zonder dat derden het gesprek

16 1.1 Gebarentaal 2 kunnen volgen. Vanaf 1755, wanneer de eerste school voor doven werd opgericht, begonnen gebarentalen zich vooral nog te ontwikkelen rond deze scholen. Het was pas in de jaren zestig dat men gebarentaal als een officieel communicatiemiddel aanvaarde toen William Stokoe, een Amerikaanse taalkundige, bewees dat gebarentaal net als gesproken talen bestaat uit een aantal bouwstenen. Gebarentalen hebben over het algemeen geen direct verband met de gesproken taal in het land waar de gebarentaal is ontstaan en veelal zijn gebarentalen dan ook van elkaar afgeleid of een combinatie van verschillende andere gebarentalen Gebarentaal en gesproken taal Er wordt nog al eens snel verondersteld dat gebaren zijn vastgelegd oftewel uitgevonden door horenden, echter uit vorige sectie is al snel af te leiden dat dit volkomen verkeerd is en dat de meeste gebaren zijn ontstaan uit het gebruik ervan door doven. Net als gesproken taal heeft ook gebarentaal een volledig alfabet, dat bij de definitie van nieuwe gebaren wel eens wordt gebruikt om een handvorm te bepalen. Zo kan de handvorm de eerste letter van het uit te beelden woord voorstellen, echter bestaat er tussen woorden en gebaren geen enkelvoudig verband. Een gebaar kan dus meerdere woorden voorstellen waarbij het woord enkel bepaald kan worden door inzicht en kennis van de daarrond gebruikte gebaren. Dit zorgt er enerzijds voor dat de gebarentaal minder gebaren bevat dan een gesproken taal woorden bezit terwijl het anderzijds de gebarentaal bemoeilijkt. Ondanks dat er geen direct verband bestaat tussen gebarentaal en gesproken taal zijn er toch gebaren die voor beide een identieke betekenis hebben en dan ook binnen beide talen worden gebruikt. Deze gebaren zijn dan ook door iedereen verstaanbaar verondersteld zoals bijvoorbeeld een duim omhoog voor goed en een duim omlaag voor slecht. Verder zijn er ook nog andere gebaren uit de gebarentaal die intuïtief herkenbaar zijn omdat ze een eigenschap, handeling of kenmerk van een woord voorstellen. Zo is er bijvoorbeeld auto alsook rijden waarbij de handen een denkbeeldig stuur vasthouden, jagen waarbij men een denkbeeldig vuurwapen vasthoud en duwen waarbij men de hand van zich weg duwt. Dus het is niet zo dat gebarentaal volledig onverstaanbaar is, er zijn gebaren die door iemand zonder enige kennis van gebarentaal verstaanbaar zijn. Toch zijn er ook nog steeds veel gebaren die zonder kennis niet geplaatst kunnen worden of dat iets verkeerd wordt geïnterpreteerd omdat een gebaar meerdere betekenissen bezit die afhankelijk zijn van de context. De overstap van gesproken taal naar het leren van gebarentaal is ook niet voor iedereen even eenvoudig omdat de persoon in kwestie geneigd is de woordvolgorde van de gesproken taal uit te beelden terwijl deze volgorde in gebarentaal veelal verschillend is net zoals dit het geval is tussen vele verschillende gesproken talen.

17 1.1 Gebarentaal De opbouw van gebarentaal Om deze masterproef te kunnen verwezenlijken en dus ook deze scriptie te kunnen volgen is het belangrijk om voldoende inzicht te hebben in de opbouw van gebarentaal. Allereerst is het belangrijk om te begrijpen dat gebarentaal zich in vier dimensies uit doordat er gebruik wordt gemaakt van de driedimensionale ruimte rondom het lichaam maar ook van een extra dimensie die de tijd voorstelt. Een gebaar kan namelijk uit meerdere handelingen bestaan waardoor de tijd mee in rekening moet worden gebracht. Daarnaast is een gebaar opgebouwd uit een aantal onderdelen zoals een woord in gesproken taal is opgebouwd uit verscheidene klanken. En net zoals bij deze klanken hebben de onderdelen op zich geen betekenis, maar kunnen ze samen toch het gebaar voor een woord voorstellen. volgende: Deze onderdelen zijn de ˆ De handvorm. Er zijn een aantal handvormen in gebarentaal die op zich geen betekenis hebben maar in combinatie met de andere onderdelen toch een gebaar kunnen vormen. Het gaat hier dan wel om gebaren die verschillen van de handvormen voor het alfabet aangezien de gebaren voor deze laatste vrij statisch zijn. ˆ De rotatie van de hand. Door de rotatie van de hand die een bepaalde vorm heeft kan men een bepaalde handvorm voor meerdere gebaren gebruiken. Er bestaan dan ook gebaren die door een simpele rotatie van de hand een andere betekenis krijgen. Zo is er bijvoorbeeld het gebaar voor Antwerpen dat een duim omhoog is ter hoogte van de schouder terwijl bel een duim in horizontale richting is ter hoogte van de schouder. ˆ De positie van de handen ten opzichte van het lichaam. Ook de positionering van de handen kan een invloed hebben op het gebaar, echter is het moeilijk om hier een voorbeeld van te geven omdat een gebaar meestal gepaard gaat met een beweging die dan ook nog eens hetzelfde moet zijn. ˆ De verplaatsing van de handen. De manier waarop de handen verplaatst worden kan voor dezelfde rotatie en handvorm een andere betekenis aan een gebaar geven. Zo zijn de gebaren boven en hoog zeer gelijkaardig op de beweging na, hoog zal namelijk een grotere verticale verplaatsing hebben dan boven. Naar aanleiding van de hier vernoemde onderdelen zal in deze masterproef gewerkt worden met zowel de handen als de vingers waarbij de positie en richting van de handen en vingers

18 1.2 Mogelijke use-cases 4 in rekening worden gebracht alsook de tijd om de verplaatsing mee in rekening te brengen. De handvorm zit dan reeds mee vervat in de data voor de vingers. Ook de samenwerking van beide handen is belangrijk in de gebarentaal, zo zijn er gebaren met maar één hand (bel, Antwerpen, hoog, boven) alsook gebaren die een uitbeelding met twee handen vereisen (auto, rijden, fietsen, aanvallen, aanhalingsteken). Er zijn daarnaast ook nog gebaren waarbij de twee handen worden gebruikt om individuele gebaren voor te stellen die een verband hebben, op die manier kan er meer data in een tijdsmoment worden overgebracht met gebarentaal, wat met gesproken taal onmogelijk is. Met dit laatste zal binnen deze masterproef geen rekening worden gehouden. Met het gebruik van twee handen zal wel rekening moeten worden gehouden in deze masterproef, er zullen dus zowel gebaren met één hand als met twee handen worden gebruikt. Als laatste moet er nog worden toegevoegd dat de ruimte rond de gebruiker een belangrijke rol speelt en een bepaalde positie in die ruimte kan gebruikt worden in combinatie met een gebaar om een geografische positie of een bepaalde persoon aan te duiden Vlaamse gebarentaal In deze sectie wordt vrij beknopt wat gezegd over de Vlaamse gebarentaal omdat dit de gebarentaal is waarmee binnen deze masterproef wordt gewerkt. Alle gebruikte en detecteerbare gebaren zullen dus uit de set van Vlaamse gebaren komen, [1] is een goede bron voor de gebaren alsook extra informatie. De Vlaamse gebarentaal is een gebarentaal die tot dezelfde familie van talen behoort als de Nederlandse, Franse en Amerikaanse gebarentaal. Ze is ontstaan in België en meer precies in Vlaanderen. Na onderzoek is aangetoond dat de gebarentalen uit de verschillende provincies in Vlaanderen meer gelijkenis hebben dan men oorspronkelijk dacht, waardoor men het geheel dus omvat onder de term Vlaamse gebarentaal. Echter was het pas in 2006 dat de Vlaamse gebarentaal officieel erkend werd door het Vlaams Parlement als volwaardige taal voor de dovengemeenschap. Aan deze erkenning ging een lange strijd van de Vlaamse dovengemeenschap vooraf. Zo een strijd is een blijvend fenomeen dat optreedt bij de poging tot erkenning van verscheidene gebarentalen. 1.2 Mogelijke use-cases In deze sectie zullen enkele mogelijke scenarios besproken worden waarbij het herkennen van gebaren met de Kinect zijn nut kan hebben en het leven van de gebruikers kan vereenvoudigen.

19 1.2 Mogelijke use-cases Scenario één: Communicatie met een stomme Stel je een situatie voor tussen twee personen waarvan één persoon stom is waarbij deze een conversatie willen of moeten voeren. De stomme zal gebarentaal beheersen en dit als hoofdzakelijk communicatiemiddel gebruiken, terwijl de tweede persoon wel kan spreken en dus gesproken taal als communicatiemiddel prefereert. Indien bidirectionele communicatie tussen deze twee personen vereist is zal dit moeilijkheden met zich meebrengen. De stomme kan wel verstaan en interpreteren wat de tweede persoon zegt maar voor deze tweede persoon is het moeilijk of onmogelijk om te begrijpen wat de stomme wil zeggen omdat hij geen kennis bezit van gebarentaal. Er zijn een aantal mogelijke oplossingen voor dit probleem die nu bekeken zullen worden. Ten eerste kan er een tolk worden ingezet om de gebarentaal te interpreteren en om te zetten naar gesproken taal. Dit zal echter een deel van de privacy wegnemen aangezien de tolk te allen tijde aanwezig moet zijn tijdens het gesprek. Bovendien dient men de tolk te vertrouwen om correcte vertalingen te maken en geen eigen interpretatie te geven aan de gebarentaal. Een tolk brengt uiteraard ook een kost met zich mee die met ieder uur stijgt en afhankelijk is van de prijs die de tolk vraagt voor zijn diensten. Een tweede oplossing is dat de stomme een speciale handschoen aandoet die gebaren kan detecteren en deze omzet naar tekst op een zichtbare display. Nog beter is het rechtstreeks omzetten van gebaren naar spraak met dergelijke handschoenen. Deze handschoenen bestaan reeds en maken gebruik van inwendige sensors, accelerometers, gyroscopen en kompassen voor de detectie van gebaren. Ze zijn echter niet erg praktisch in gebruik omdat ze de bewegingsvrijheid van de gebruiker beperken en zijn bovendien nogal duur. Een laatste oplossing is het systeem dat in deze masterproef verwezenlijkt zal worden waarbij de Kinect of een andere gesture recognition camera gebruikt kan worden. In deze masterproef wordt er een Kinect gebruikt die commercieel verkrijgbaar is voor 100,00, wat in vergelijking met een handschoen of een tolk niet veel is. Verder zal de bewegingsvrijheid niet beperkt worden zoals bij de handschoen, de enige beperking die hier nog rest is dat de gebruiker zich in het gezichtsveld van de camera moet bevinden opdat de gebaren herkend zouden worden. Na het bepalen van de gebaren kan de uitgebeelde zin worden weergegeven als tekst of zelfs als gesproken taal worden afgespeeld via luidsprekers. Het systeem dat ik hierbij in gedachten heb kan dus gebruikt worden om een conversatie met een stomme mogelijk te maken.

20 1.3 Doelstelling Scenario twee: Het aanleren van gebarentaal Om te kunnen communiceren met een doofstomme ben je genoodzaakt zelf gebarentaal te begrijpen en te kunnen uitbeelden. Uiteraard kan je hiervoor lessen volgen via avondschool of in bepaalde studierichtingen. Maar je kan gebarentaal ook op jezelf leren, er bestaan tal van boeken over gebarentaal, gaande van de geschiedenis en evolutie tot het zelf uitvoeren van gebarentaal. Er is echter één probleem bij het leren van gebarentaal op jezelf en dat is dat je niet kan controleren of je de gebaren correct uitvoert zodat een stomme of doofstomme ze kan begrijpen. Hier kan het systeem dat in deze masterproef ontwikkeld werd een handig hulpmiddel zijn. Het enige dat je nodig hebt is een Kinect camera en een boek of online cursus voor het leren van gebarentaal. Je kan de gebaren dan uitvoeren voor de Kinect om na te gaan of je ze goed uitvoert. Indien de Kinect de gebaren niet kan herkennen weet je dat er een fout is in de uitvoering en kan je vervolgens nagaan wat deze fout is. Uiteraard ben je niet beperkt tot de Kinect en zou deze methode in theorie ook mogelijk moeten zijn met andere gesture recognition camera s. 1.3 Doelstelling De ultieme doelstelling van deze masterproef is het detecteren van gebaren in ware tijd, en dit specifiek door gebruik te maken van 3D data voor de handen die verkregen kan worden met behulp van de Kinect camera. Door te focussen op de 3D data voor de handen moet het in theorie mogelijk zijn om gelijkaardige gebaren van elkaar te kunnen onderscheiden, wat dan ook wordt nagegaan binnen deze masterproef.

21 VOORGAANDE STUDIES 7 Hoofdstuk 2 Voorgaande studies Er is in het verleden reeds onderzoek gebeurd rond het herkennen van gebarentaal om de grote achterstand ten opzichte van spraakherkenning weg te werken. In dit hoofdstuk zal een overzicht worden gegeven van verscheidene studies die reeds gebeurd zijn. 2.1 Verwerven van data voor de handen Alvorens over te kunnen gaan tot het herkennen van gebaren moet men eerst in staat zijn om de nodige lichaamsdelen, met name de handen terug te vinden in videobeelden. Om dit te verwezenlijken zijn meerdere methoden bedacht. Eén van deze methoden die ook nu nog regelmatig wordt gebruikt bij onderzoek rond het herkennen van gebarentaal is segmentatie aan de hand van huidskleur. Hierbij worden pixels die een huidskleur voorstellen uit de data gefilterd voor verder gebruik. Argyros onderzocht in [2] dergelijke methode waarbij een Bayesian classifier werd gebruikt om de juiste pixels te bepalen. Deze methode bleek heel robuust en onafhankelijk van veranderingen in lichtcondities te zijn. Ook uit ander onderzoek [3] is gebleken dat gebruik van een Bayesian classifier tot de beste resultaten leidt voor het herkennen van lichaamsdelen aan de hand van huidskleur. Deze methode vereist echter wel dat de gebruikers kleding met lange mouwen dragen indien men de handen verder wil analyseren. Later werd er gebruik gemaakt van zowel 2D als 3D data om de handen van een persoon te verkrijgen ten einde deze te gebruiken voor het herkennen van gebaren [4]. Bij deze combinatie zal men de intensiteit van 2D beelden gebruiken om te segmenteren op huidskleur waardoor de handen en het hoofd gevonden worden. Vervolgens wordt de dieptedata gebruikt om de handen van het hoofd te onderscheiden, hierbij gaat men er vanuit dat de handen zich dichter bij de camera bevinden dan het hoofd. Uit de resultaten bleek de methode snel en robuust

22 2.2 Herkenning van gebaren 8 te zijn. Er traden echter wel problemen op wanneer de afstand tot de camera en intensiteit van de handen hetzelfde waren als deze van het hoofd. Hierdoor wordt het moeilijk om te bepalen wat de handen zijn en wat het hoofd is waardoor foute voorspellingen optreden. Naast het werken met huidskleur of een combinatie van 2D en 3D data werd er ook nog gebruik gemaakt van enkel 3D data onder de vorm van een dieptemap. Zowel de Universiteit van Stanford als Microsoft hebben hier onderzoek rond gedaan [5] [6]. Het onderzoek van Stanford heeft aangetoond dat het mogelijk is om alle pixels die een persoon voorstellen uit dieptedata te verkrijgen en hieruit verder een aantal belangrijke punten te gebruiken om lichaamsdelen te onderscheiden. Microsoft heeft soortgelijk onderzoek gedaan waarbij gebruik werd gemaakt van een pixel per pixel analyse. Zo kunnen zeer nauwkeurig verschillende lichaamsdelen van elkaar onderscheiden worden zonder enige afhankelijkheid van de lichaamsbouw of houding van de gebruiker. Deze methoden worden nu toegepast voor onder meer gaming, human-computer interactie en in de gezondheidszorg. Naast het verkrijgen van data over de nodige lichaamsdelen is er bij gebarentaal, zoals in het vorige hoofdstuk beschreven ook nog een beweging aanwezig. Deze bewegingen zouden mee in rekening moeten gebracht worden. In [7] wordt de beweging van een gebruiker en individuele lichaamsdelen bekeken. Hierbij maakt men gebruik van de GPU om het filter algoritme te versnellen, echter behaalde men nog steeds slechts vier tot zes frames per seconde met vrij goede accuraatheid. 2.2 Herkenning van gebaren Voor de detectie van gebaren in gebarentaal zal men deze meestal opsplitsen in subunits die dan apart geclassificeerd worden om vervolgens de resultaten van deze classificaties terug samen te brengen ten einde het gebaar te kunnen herkennen. De meest gebruikte subunits zijn de handvorm, rotatie en positie zoals in hoofdstuk 1 reeds beschreven werden, beweging is ook nog een mogelijke subunit maar wordt meestal achterwege gelaten. Bij het detecteren van gebaren met subunits wordt het probleem van gebarentaalherkenning dus als het ware opgesplitst in meerdere deelproblemen. Voor elk van de deelproblemen zal men dan een toestand bepalen. Ter bepaling van deze toestanden worden technieken uit het machinaal leren gebruikt. In een laatste stap worden dan de toestanden van de verschillende subunits samengenomen om het gebaar te bepalen. De resultaten die in het onderzoek met subunits zijn besproken [8] [9] [10] [11] [12] zien er veelbelovend uit. De laatste publicatie is hierbij veruit de meest interessante omdat ze gebruik hebben gemaakt van een grote data set (bijna 1000 gebaren) waarbij meerdere methodes worden bekeken. Bij deze grote dataset halen ze

23 2.3 Herkening van gebaren met de Kinect 9 een nauwkeurigheid van 73% terwijl de nauwkeurigheid op een dataset van 20 gebaren 99,9% bedraagt. Verder volgde hier ook uit dat de nauwkeurigste resultaten bekomen worden door gebruik te maken van 3D in plaats van 2D data. Naast het detecteren van gebarentaal waarbij gebruik wordt gemaakt van een dataset is er ook reeds onderzoek verricht rond het filteren van gebaren uit een vloeiende reeks aaneengesloten gebaren. Hieruit zijn dan ook algoritmes ontstaan die in staat zijn om vrij nauwkeurig bepaalde gebaren uit een reeks opeenvolgende gebaren te filteren zonder dat hierbij gebruik wordt gemaakt van gekleurde handschoenen of handschoenen met sensoren [13] [14]. Beide publicaties zijn van dezelfde auteurs en nauw verwant met elkaar. In een eerste stap bleek de gebruikte techniek kleine problemen te ondervinden bij het filteren van een gebaar door de verschillende contexten waarin het gebruikt kan worden. Hierbij was het de overgang tot het betreffende gebaar die soms moeilijk te detecteren was. Van dit probleem was in de tweede publicatie geen sprake meer, noch werd er een oplossing voor dit probleem beschreven. In [15] wordt er nog een ander medium gebruikt om een systeem voor herkenning van gebaren te trainen. Er wordt namelijk gebruik gemaakt van een TV-programma met gebarentaal en ondertiteling om het systeem te trainen. De resultaten van deze methode bleken positief te zijn bij gebruik van een state-of-the-art tracker voor het bovenlichaam, data die de handen beschrijven en een enorme hoeveelheid trainingsdata. Aan de andere kant zijn er ook onderzoekers die de training van het systeem zo laag mogelijk willen houden zonder al te veel aan accuraatheid in te boeten. In [16] is men erin geslaagd, aan de hand van Hidden Markov Modellen, om 164 gebaren te herkennen met een nauwkeurigheid van 74%, waarbij ieder gebaar slechts 10 keer werd gebruikt voor training. 2.3 Herkening van gebaren met de Kinect Uiteraard is er ook reeds onderzoek verricht rond herkenning van gebarentaal door gebruik te maken van de Microsoft Kinect camera. Het voordeel van een Kinect camera is niet zo zeer de beeldkwaliteit, want deze is lager dan vele andere camera s die gebruikt worden voor herkenning van gebaren. De Kinect is echter een goedkope camera die naast RGB-beelden ook 3D data opneemt. In [17] wordt bijvoorbeeld de Kinect gebruikt in een aangepaste versie van een bestaand spelletje om gebarentaal te leren aan kinderen, waardoor deze geen handschoenen met sensoren meer moeten dragen. Volgens de resultaten is de prestatie met gebruik van de Kinect vergelijkbaar aan die van de oudere versie, maar is het best dat de gebruiker rechtstaand speelt omdat een zittende houding resulteert in fouten voor het skelet-

24 2.3 Herkening van gebaren met de Kinect 10 tracking algoritme dat de gebruikers moet detecteren. Dit probleem met de zittende houding is voor de in deze masterproef besproken implementatie van gebarentaal herkenning echter geen probleem geweest. Verder heeft [18] aangetoond dat gebruik van GPU acceleratie in combinatie met de Kinect en een goede optimalisatie kan resulteren in robuuste en efficiënte tracking van de volledige handvorm en dit aan een framerate van 15Hz. Binnen mijn onderzoek was er echter geen mogelijkheid om gebruik te maken van GPU acceleratie omdat er met eigen hardware gewerkt werd. Deze hardware bevat geen Nvidia kaart, wat het gebruik van GPU acceleratie dus onmogelijk maakt.

25 APPARATUUR EN SOFTWARE 11 Hoofdstuk 3 Apparatuur en Software 3.1 Microsoft Kinect Figuur 3.1: De Microsoft Kinect camera. De Microsoft Kinect [19] is geen camera met de functionaliteiten van een webcam. De Kinect is tot veel meer in staat door de combinatie van een RGB-camera, een diepte-sensor en een ingebouwde microfoon. Deze drie ingrediënten zijn verpakt in een rechthoekige behuizing die rust op een kleine voet. Tussen deze behuizing en de voet zit nog een mechanisme om de camera in de juiste positie te kunnen zetten zonder enige manuele ingreep. Om een beter idee te geven hoe deze camera er in werkelijkheid uitziet kan u Figuur 3.1 raadplegen. De RGB-camera is vrij standaard en neemt gewoon kleurenbeeld op. Deze camera heeft een 8-bit VGA resolutie van 640 bij 480 pixels met een Bayerfilter om de kleuren te bepalen. Een Bayerfilter is een kleurenfilter dat gebruik maakt van speciale algoritmes om alle kleuren uit een beeld te reconstrueren met enkel rode, blauwe en groene pixels. Hierdoor kan de kleur van een pixel niet op zich bepaald worden, maar dienen de kleuren van naburige pixels ook gekend te zijn om de originele kleur van een pixel te reconstrueren. Dergelijk filter of

26 3.1 Microsoft Kinect 12 varianten ervan worden veelal toegepast in digitale camera s. De diepte-sensor bestaat uit een infrarood lichtbundel die een puntenpatroon projecteert op de zichtbare ruimte, wat door een CMOS sensor gedetecteerd wordt. Een CMOS sensor kan de diepte van een object bepalen aan de hand van het lichtpatroon dat erop geprojecteerd wordt. Doordat de Kinect zijn eigen lichtpatroon uitstuurt is hij niet afhankelijk van de belichting binnen de omgeving, hij zal dus ook detectie en tracking kunnen uitvoeren in een donkere kamer. Er is tijdens het testen echter wel gebleken dat de belichting de accuraatheid in kleine mate beïnvloedt, en reflecties van zonlicht aanleiding kunnen geven tot fouten. De diepte-sensor creëert net zoals de RGB-camera een video stream met een resolutie van 640 bij 480 pixels waarbij een diepte van 11 bit wordt gebruikt. Dit resulteert in 2048 detectieniveaus. Een voorbeeld van het dieptebeeld en het geprojecteerde puntenpatroon is te zien in Figuur 3.2. De combinatie van zowel de RGB-camera als diepte-sensor stelt de Kinect in staat om de positie van objecten en personen in het zichtbare bereik te bepalen. Dit zichtbare bereik bedraagt ongeveer een 6 m 2 gecentreerd voor het toestel. Naast het bepalen van de positie is de Kinect ook in staat om personen te onderscheiden van de omgeving waarbij vervolgens bepaalde bewegingen herkend kunnen worden. Het detecteren en traceren van meerdere personen is ook mogelijk. Figuur 3.2: Het dieptebeeld met niveaus (links) en het lichtpatroon uitgestuurd door de Kinect (rechts). De ingebouwde microfoon maakt het mogelijk om gesproken commando s te herkennen en de daarbij horende actie uit te voeren. Oorspronkelijk was de Kinect het antwoord van Microsoft op het Move systeem van Sony en de Wii van Nintendo, waarbij alle drie deze technologieën bedoeld zijn als entertain-

27 3.1 Microsoft Kinect 13 mentsysteem of als toevoeging aan een entertainmentsysteem. Maar voor de Kinect bleef het niet bij het gebruik voor entertainment omdat de mensen meer potentieel zagen voor het toestel. Velen begonnen te experimenteren met het toestel waarbij het uiteindelijk gehackt werd. Een kleine zeven maanden na deze hack heeft Microsoft een Kinect SDK vrijgegeven voor Windows zodat het publiek programma s kon gaan ontwikkelen voor de Kinect. Deze SDK was echter vrij beperkt en liet enkel ontwikkeling toe met C++, C# en Visual Basic. Ondertussen zijn er ook al open-source varianten beschikbaar die de functionaliteiten van de Windows Kinect SDK bezitten met nog extra uitbreidingen. Zo zijn er onder andere OpenKinect en OpenNi die communicatie met de Kinect toelaten en zijn er functionaliteiten van de Kinect opgenomen in raamwerken voor 3D bewerking en robotics zoals PCL en ROS. We zullen nu enkele sectoren opsommen waarvoor de Kinect nuttig kan zijn en waarrond reeds onderzoek is verricht. ˆ Gezondheidszorg In de gezondheidszorg en specifiek in ziekenhuizen draait alles rond het minimaliseren van het risico op besmetting voor de patiënten. Zo zijn dokters verplicht zicht te scrubben vooraleer ze een steriele ruimte betreden, ook al is het maar voor één minuut. Verder worden operaties tegenwoordig gedaan aan de hand van 3D-videobeelden die de dokter begeleiden, net zoals een GPS je de weg wijst in de auto. Maar natuurlijk is het niet handig om telkens te moeten scrubben indien de beelden bekeken of aangepast worden, aangezien dit tijd kost waardoor de operatie langer zal duren. Die aanpassingen gebeuren normaal in een andere ruimte omdat het gebruik van toetsenbord, muis of touchscreen gevaar met zich meebrengt, deze kunnen namelijk bacteriën dragen. De Kinect zou hiervoor een oplossing kunnen bieden omdat de dokter dan in staat is om de beelden met intuïtieve bewegingen aan te passen naar wens zonder enige apparatuur te moeten aanraken [20][21]. ˆ Commercieel E-shoppen wint steeds meer aan populariteit, maar hoe kan je nu voor het overgaan tot een aankoop weten of een bepaald kledingstuk je siert? Hierbij kan de Kinect een handige tool zijn om de kledingstukken virtueel aan te doen. Je gaat voor de camera staan, kiest een kledingstuk en vervolgens zie je jezelf met het kledingstuk aan. Er zijn reeds applicaties ontwikkeld die dit mogelijk maken [22]. De reacties van klanten die dergelijk systeem getest hebben waren positief, maar het kost nog wel vrij veel tijd en moeite om een virtuele bibliotheek met de kleren aan te maken. ˆ Onderwijs

28 3.2 ROS ( Robot Operating System) 14 In het hedendaags onderwijs tracht men de interactie tussen leerkrachten en leerlingen alsook tussen leerlingen onderling te vergroten, en dit vooral in het lager onderwijs. Op deze manier wil men de aandacht van de leerlingen langer bij de les houden en tegelijkertijd het lesgeven geen routinewerk maken voor de leerkracht. Met de intrede van het interactief bord (beter bekend als smartboard) is men hier dan ook gedeeltelijk in geslaagd en kunnen de leerlingen zelf meer input leveren tijdens de lessen. Maar met de Kinect zou men dit nog verder kunnen drijven. Door zijn eenvoudige en intuïtieve bediening kan men beelden die verschijnen aanpassen of er aantekeningen aan toevoegen. Bovendien kan de Kinect meerdere gebruikers detecteren en volgen waardoor met meer personen tegelijk kan worden gewerkt op éénzelfde beeld. Ook de prijs van de Kinect in vergelijking met die van een smartboard maakt de overstap interessant. Uit onderzoek blijkt dat een Kinect meer interactie veroorzaakt en bijna alle functionaliteiten bezit van een interactief bord [23]. Dit zijn nog maar enkele voorbeelden waarbij de Kinect nuttig kan zijn. [24] Geeft nog een aantal mogelijke situaties waarin of waarvoor de Kinect nuttig kan zijn. 3.2 ROS (Robot Operating System) ROS is een software raamwerk dat vooral gebruikt wordt voor het sturen van robots van allerlei soort. Maar ook de medewerkers van het ROS raamwerk hebben het potentieel van de Kinect gezien en deze dan ook opgenomen in het raamwerk. Er zijn vervolgens enkele Kinect demo s ter beschikking gekomen die in de repository eenvoudig zijn terug te vinden onder een gegroepeerde naam mit-ros-pkg. Onder deze demo s zijn onder andere handdetectie, vingerdetectie, virtueel piano spelen en nog meer terug te vinden. De voor deze masterproef meest interessante demo was de vingerdetectie. Deze zou gebruikt kunnen worden om zowel de handen als de vingers te detecteren. Met de data van zowel handen als vingers ter beschikking hoopte ik meer accurate resultaten te kunnen bekomen bij het herkennen van gebaren dan bij voorgaande studies [25]. Meer informatie over dit raamwerk en de vingerdetectie zit vervat in Bijlage A. 3.3 PCL (Point Cloud Library) PCL is een open source raamwerk dat verscheidene state of the art algoritmes implementeert voor het analyseren en bewerken van n-dimensionale puntenwolken. Deze puntenwolken kunnen van een omgeving, een bepaald object of zelfs personen afkomstig zijn. Wat het inter-

29 3.4 OpenNI 15 essantste is zijn de 3D analyse en bewerkingen om bijvoorbeeld objecten, personen of zelfs hele omgevingen in 3D te reconstrueren aan de hand van beelden die met een 2D camera zijn opgenomen. Hierbij kan onder andere gebruik worden gemaakt van de storingen in de camerabeelden om de 3D reconstructie te verbeteren. Er kan ook gebruik worden gemaakt van camera s zoals de Kinect die reeds diepte informatie meegeven van de beelden zodat het behandelen van de beelden vereenvoudigd kan worden. Voor meer informatie over PCL verwijs ik u door naar Bijlage B. PCL was voor deze masterproef vooral interessant omdat het vele functies bevat om met 3D data te werken. Deze functies werden ook reeds gebruikt in de vingerdetectie van ROS waardoor het interessant was om de bruikbaarheid van PCL na te gaan. 3.4 OpenNI OpenNI oftewel Open Natural Interaction is een open source SDK die toelaat om software te ontwikkelen voor 3D camera s. De Kinect valt ook onder deze categorie en wordt ondersteund door de SDK. Let wel op dat de ondersteuning voor de Kinect onder Linux distributies niet langer aanwezig is in versie 2.0 en het dus het gebruik van een eerdere versie oplegt. De oorzaak hiervan is dat de SDK bij detectie van een Kinect in versie 2.0 gebruik zal maken van de MS Kinect SDK die niet werkt op Linux. De OpenNI SDK bevat vele voorbeeldapplicaties in verscheidene programmeertalen, die zeer nuttig zijn om op verder te werken. Er zijn ook reeds boeken verschenen over het gebruik van deze SDK die nuttig zijn geweest tijdens de uitvoering van deze masterproef. Het interessante aan OpenNI is de skelet tracking die de programmeur in staat stelt om skeletten (gebruikers) te detecteren via de Kinect. Hieruit kan dan de positie van de ledematen bepaald worden om zo sneller naar de vingers te kunnen zoeken. Aangezien de installatie van deze SDK niet moeilijk is en duidelijk beschreven staat op de webpagina [26] zal er niet verder op worden ingegaan. 3.5 MLPack Mlpack [27] is een C++ bibliotheek die een vrij compleet pakket met functionaliteiten voor machinaal leren voorziet. Zo omvat het verschillende soorten algoritmes die gebruikt kunnen worden waarvan de Hidden Markov Model subbibliotheek het meest interessant is voor deze masterproef. Deze bibliotheek is relatief eenvoudig in gebruik eens de manier van input begrepen is, er wordt verder actief ondersteuning geboden voor alle vragen. Vragen worden

30 3.5 MLPack 16 dus vrij snel (binnen de week) beantwoord en moedigt de ontwikkelaars aan tot uitbreiding van de bibliotheek met meer functionaliteiten en documentatie. Wat de Hidden Markov Model bibliotheek betreft kunnen het Forward, Backward, Viterbi en Baum-Welch algoritme worden gehanteerd. Er kan dus eenvoudig een HMM worden getraind of een voorspelling worden gemaakt met logaritmische probabiliteiten door gebruik te maken van een eerder getrainde HMM.

31 DE VINGERDETECTIE 17 Hoofdstuk 4 De vingerdetectie Er is reeds gesproken over de functionaliteiten van ROS, PCL en OpenNI wat bestaande raamwerken zijn die in verband staan met de Kinect. Zo bevat ROS een hand- en vingerdetectie terwijl PCL meer gefocust is op de bewerking van 3D puntenwolken en OpenNI de nodige functionaliteiten bevat om met de Kinect te communiceren en gebruikers te tracken. Elk raamwerk heeft zijn voordelen en in een initiële fase van deze masterproef zou er één van de bestaande raamwerken gebruikt en aangepast worden om er de nodige data voor classificatie mee te verkrijgen. Echter wogen de voordelen van de raamwerken niet op tegen de nadelen en is er besloten om zelf een vingerdetectie te implementeren. Deze nadelen omvatten het ontbreken van een hand of vingerdetectie in OpenNI en PCL en de lage prestatie van ROS vanwege het publish-subscribe systeem waarmee de modules onderling communiceren, waardoor dan ook nog eens dataverlies optreedt. De eigen implementatie moest in staat zijn om de data die nodig is voor classificatie van gebaren te verkrijgen. Deze data omvat een positie en richtingsvector voor zowel de hand als iedere gedetecteerde vinger. Dit hoofdstuk zal de eigen implementatie van vingerdetectie toelichten met daarbij een aantal geteste methodes om tot de uiteindelijke versie te komen. Iedere sectie in dit hoofdstuk zal een stap van de vingerdetectie behandelen waarbij regelmatig enkele resultaten worden aangehaald. 4.1 Kalibratie van een nieuwe gebruiker De kinect bezit de mogelijkheid om een gebruiker te detecteren via de bibliotheken van OpenNI. Echter is het detecteren van een gebruiker niet voldoende en dient de camera voor de gedetecteerde gebruiker gekalibreerd te worden. Indien gebruik wordt gemaakt van versie 1.3 of een eerdere versie van OpenNI dient de gebruiker voor kalibratie van de camera

32 4.2 Het creëren van een 3D puntenwolk 18 een bepaalde houding aan te nemen. Deze houding bestaat eruit dat de gebruiker naar de camera kijkt en beide handen alsook onderarmen in de lucht steekt zodat de bovenarmen een horizontale houding ter hoogte van de schouders aannemen zoals in Figuur 4.1. Vanaf versie 1.5 is er een autokalibratie voorzien die geactiveerd kan worden zodra een gebruiker gedetecteerd is. Dit neemt het ongemak van de nood voor een kalibratiehouding dus weg, wat zeker wenselijk is voor de vingerdetectie. Toch zal de autokalibratie nog steeds een obstakel vormen om gebruik te maken van een dataset met gebaren. Eens de camera gekalibreerd is voor een gebruiker kunnen de posities van vijftien punten op het lichaam worden verkregen. Deze punten zijn het hoofd, de nek, de romp (zijnde een centraal punt op de borstkas), de linkerschouder, de linkerelleboog, de linkerhand, de linkerheup, de linkerknie, de linkervoet en de rechter varianten van de laatste zes uit deze lijst. Een deel van deze punten zijn ook in Figuur 4.1 (rechts) te zien als contactpunten van de getekende lijnen. In de volgende sectie zal het nut van deze posities worden aangehaald. Figuur 4.1: OpenNI kalibratiehouding. 4.2 Het creëren van een 3D puntenwolk De nood om een 3D puntenwolk te creëren van de camerabeelden ontstaat door gebruik te maken van de functionaliteiten die PCL biedt in plaats van deze zelf te gaan implementeren. Wetende dat OpenNI een kleurenmap alsook een dieptemap van het beeld zoals gezien door de Kinect levert kan er eenvoudig een omzetting gebeuren van de dieptemap naar een 3D puntenwolk (bij deze omzetting is het belangrijk er rekening mee te houden dat de afstanden in een dieptemap van OpenNI in millimeter zijn uitgedrukt terwijl dit voor een PCL-puntenwolk in meter wordt verondersteld). De omzetting van een dieptemap naar een puntenwolk zal

33 4.3 Voorbehandeling van de puntenwolk voor de hand 19 een aantal berekeningen per punt, of pixel, met zich meebrengen en dus enige tijd vragen. Aangezien een near-real-time vingerdetectie gewenst is, is het belangrijk om de rekentijd te minimaliseren. Hierdoor is er besloten om niet de gehele dieptemap om te zetten in een puntenwolk, maar in plaats daarvan enkel de belangrijke data op te nemen in de puntenwolk. Onder de belangrijke data vallen de punten die binnen de omgeving liggen waarbinnen gebaren kunnen plaatsvinden, zijnde een volledige armlengte aan weerszijden van de romp en van de heupen tot een halve armlengte boven de positie van het hoofd. Dit bleek echter nog steeds een overvloed aan informatie te zijn en dus is er nog een extra beperking opgelegd met positieve invloed op de prestatie. Er is namelijk beslist om enkel de data rond de handen op te nemen in een puntenwolk aangezien enkel deze data nodig is voor de detectie van de vingers. Hier komen dan ook de posities voor rechter- en linkerhand, zoals verkregen via OpenNI, goed van pas. Er zal namelijk een kubus rond iedere hand worden gelegd met de positie van de hand als centraal punt, waarna een puntenwolk wordt gecreëerd van alle punten binnen de kubus. De halve lengte van de zijden van deze kubus kan worden ingesteld met een parameter die standaard op elf centimeter is ingesteld om een verscheidenheid van handgroottes te kunnen behandelen. Om nog even samen te vatten zijn er in deze stap puntenwolken gecreëerd voor iedere hand, met mogelijk nog wat ruispunten die binnen de kubus vielen en in een later stadium worden weggefilterd. Indien een hand niet gedetecteerd werd of de onzekerheid van de detectie ervan hoger is dan vijftig procent, wordt de hand in kwestie niet behandeld. Door toepassing van de hier beschreven methode worden de bewerkingen om tot puntenwolken voor de handen te komen geminimaliseerd om zo de prestatie van deze fase te maximaliseren. 4.3 Voorbehandeling van de puntenwolk voor de hand Alvorens over te gaan tot de effectieve vingerdetectie wordt er eerst een kleine voorbehandeling uitgevoerd op de puntenwolken voor de handen: er wordt nagegaan of de hand open of gesloten is. Een puntenwolk zoals verkregen uit OpenNI door omzetting is te zien in Figuur 4.2. Hou er wel rekening mee dat de puntenwolk in de figuur een omzetting is naar 2D, dit zal in figuren veelal het geval zijn om het eenvoudiger interpreteerbaar te maken. Om na te gaan of een hand open is zullen de eigenwaarden voor de drie dimensies van de puntenwolk worden berekend, waarna deze met elkaar worden vergeleken. Als het resultaat van deze vergelijking lager is dan een opgelegde grens (zoals in de ROS hand-detectie werd gebruikt) kan er besloten worden dat de hand gesloten is. De afwijking tussen de eigenwaarden is namelijk laag in het geval de hand een vuist vormt. Echter is deze manier van werken niet goed genoeg aangezien het opsteken van één vinger slechts een marginale invloed zal hebben

34 4.4 Detectie van de vingers 20 op de eigenwaarden en dus moeilijk te detecteren valt. Om dit te compenseren wordt er, na het besluiten dat de hand gesloten is, nog een extra controle uitgevoerd. Bij deze controle wordt gezocht naar de grootste x en de grootste y afstand voor de hand, er wordt dus gezocht naar een metrieke afstand voor de dimensies van de hand. Het berekenen van de maximale z afstand is hierbij overbodig omdat een vinger die recht naar de camera wijst niet gezien wordt door de Kinect. Vervolgens zal de maximale x afstand vergeleken worden met de maximale y afstand om na te gaan of er alsnog een vinger is uitgestoken en de hand als open aanzien moet worden. Het geval waarbij vijf vingers zijn uitgestoken, dus een volledig open hand, zal gelijkaardige x en y afstanden hebben maar wordt reeds als open gezien in de eerste test en vormt daardoor geen probleem. Er wordt dus nagegaan of de hand open of gesloten is met het idee, geen verdere bewerkingen uit te voeren om de vingers te zoeken in het geval van een gesloten hand om zo de nodige berekeningen zo laag mogelijk te houden. Een direct gevolg hiervan is dat voor gesloten handen een hogere framerate bereikt kan worden in het uiteindelijke programma. Figuur 4.2: Voorbeeld van een puntenwolk voor de hand. 4.4 Detectie van de vingers De detectie van het aantal vingers per hand is een belangrijk onderdeel van de totale vingerdetectie met tot doel het detecteren van gebaren. Het aantal vingers is al een goede start voor latere classificatie van gebaren, die verder verbeterd kan worden door meer data van de handen in rekening te brengen zoals de richting en positie van de handen alsook van iedere vinger. Er is dan ook een aanzienlijke tijd gespendeerd aan de implementatie voor de detectie van het aantal vingers waarbij verschillende methodes zijn bedacht. Het centrale idee bij deze

35 4.4 Detectie van de vingers 21 methodes is om de puntenwolk voor iedere hand zodanig te bewerken dat de handpalm van de vingers gescheiden kan worden. Hiervoor is geopteerd om de handpalm zo goed mogelijk te gaan zoeken in de puntenwolk om deze vervolgens te verwijderen. Er is ook nagedacht over het rechtstreeks zoeken van de vingers in plaats van de handpalm. Echter is het laatste idee snel opgeschort omdat die manier complexer is en meer rekentijd zou vragen dan gewenst is, bovendien maakt de vorm en de hoge concentratie van punten voor de handpalm de detectie ervan voor verwijdering aantrekkelijker. Het is dan ook het gebruik van puntenconcentraties binnen een bepaald (wiskundig) lichaam dat in alle methodes wordt gebruikt om de handpalm te vinden. Tabel 4.1 geeft reeds een aantal resultaten van de verschillende methodes die getest werden. Een aantal van deze methodes zullen in deze sectie aan bod komen en in meer detail worden toegelicht (ROS vingerdetectie is toegevoegd ter volledigheid). Voor het bekomen van deze resultaten zijn geen specifieke regels gevolgd waardoor geen getallen worden gebruikt voor de accuraatheid. Het behaalde aantal frames is opgemeten door de tijd in milliseconden bij iedere frame op te meten en vervolgens na te gaan hoeveel frames er in één seconde worden getoond. De accuraatheid is gerankt volgens eigen bevindingen tijdens langdurige live test waarbij een verschillend aantal vingers werd gebruikt, in een later hoofdstuk zullen specifieke cijfers voor de accuraatheid worden vermeld. In een laatste sectie wordt dan nog een vorm van clustering besproken die gebruikt wordt om de vingers van elkaar te onderscheiden. Tabel 4.1: Vingerdetectie resultaten Methode Frames per seconde Accuraatheid ROS vingerdetectie 2 Met kleine bollen 1 Met kleine kubussen 2 Met grote bol 4 Met grote kubus 6 Dubbel filter 6 Raster met bol 15 Raster met bol en kubus Punt per punt filter met een kleine bol Zoals de titel reeds doet vermoeden zal er in deze methode gebruik worden gemaakt van een bol met kleine straal. Hierbij is het belangrijk om de straal van de bol groter te nemen

36 4.4 Detectie van de vingers 22 dan de halve diameter van de dikste vinger, zijnde de duim. Indien dit niet het geval is, zal de concentratie van punten voor de duim slechts marginaal afwijken van deze voor punten binnen de handpalm wat de detectie aanzienlijk moeilijker maakt. Bij het testen is er gebruik gemaakt van een straal van twee centimeter. Op dit punt van de masterproef werden er enkel testen op mezelf verricht en bewees deze waarde een goede afmeting te zijn voor mijn hand. In een later stadium is er overgegaan tot afmetingen die bepaald worden tijdens de uitvoering van het programma zodat het adaptief wordt naar andere gebruikers toe. Bij deze methode wordt de voornoemde bol punt per punt over de puntenwolk van een hand verplaatst terwijl voor ieder van de punten, waar de bol rond gelegd wordt, de puntenconcentratie binnen de bol berekend wordt. Wanneer deze concentratie groter is dan een opgelegd percentage worden de punten in de bol als deel van de handpalm gezien en gemarkeerd voor verwijdering. De punten worden niet meteen verwijderd omdat ze dan niet meer in rekening kunnen gebracht worden voor een andere bol. Na het bekijken van ieder punt in de puntenwolk worden alle gemarkeerde punten uit de totale puntenwolk verwijderd om zo enkel de vingers met eventueel wat ruispunten over te houden. Figuur 4.3 illustreert de werking met een visueel voorbeeld. Hou er wel rekening mee dat hier zoals voorheen voor de eenvoud een 2D weergave is gebruikt en de linkse afbeelding een standaard puntenwolk van de hand voorstelt terwijl de rechtse afbeelding een rechtstreeks resultaat is na toepassing van de methode. Deze methode is accuraat voor het onderscheiden van de handpalm ten opzichte van de vingers maar vereist veel bewerkingen en is dus enorm traag, er werd namelijk maar één frame per seconde verwerkt zoals aangegeven in Tabel 4.1. Om de snelheid op te drijven kan er worden overgegaan tot het gebruik van kleine kubussen in plaats van bollen omdat de berekening om te kijken of een punt binnen een kubus valt eenvoudiger is dan die om te kijken of het binnen een bol valt. De kubussen hadden hierbij een zijde die gelijk is aan de diameter van de eerder vernoemde bol (dus vier centimeter). Wat de werkwijze betreft was deze volledig gelijklopend met de werkwijze voor een bol, deze zal dus ook niet verder worden toegelicht. Uit de resultaten bij een kubus bleek inderdaad dat er een kleine versnelling plaatsvond en twee frames per seconde werden bereikt terwijl de nauwkeurigheid lichtjes verminderde (zie Tabel 4.1). Maar dit is uiteraard nog te traag voor gebruik dus is er verder gezocht naar andere benaderingen.

37 4.4 Detectie van de vingers 23 Figuur 4.3: Voorstelling van methode met een kleine bol: links de puntenwolk van een hand met de uit te knippen bollen, rechts de resterende puntenwolk Punt per punt filter met een grote bol Om de snelheid te verhogen zonder al te veel verlies aan accuraatheid kan gebruik worden gemaakt van één grote bol om de handpalm te detecteren. Uit theoretisch oogpunt alsook uit tests is namelijk gebleken dat het gebruik van een bolle vorm tot meer accurate resultaten leidt dan een kubusvormig lichaam. Daarom zijn er een aantal mogelijkheden bekeken waarbij op een andere manier gebruik wordt gemaakt van een bol. Een mogelijke benadering is om te vertrekken van een zeer grote bol die de hele hand omhult met als middelpunt het centraal punt van de hand. Vervolgens kan de bol verkleind worden totdat de puntenconcentratie nog maar weinig afwijking vertoont ten opzichte van die voor de vorige bolgrootte, op dat moment zouden de vingers zich buiten de bol moeten bevinden. Theoretisch gezien zou dit mogelijk moeten zijn, maar de variaties in puntenconcentratie waren zeer klein wat het moeilijk maakt om de detectie van de handpalm correct uit te voeren. Aldus werd deze benadering al snel verworpen. Ook de omgekeerde manier, van een kleine naar een grote bol gaan, kon dus meteen verworpen worden vanwege de gelijkaardige werking. Wat wel werkt en werd geïmplementeerd is het gebruik van een bol met vaste grootte die op een punt per punt manier over de puntenwolk wordt verplaatst. De straal van de bol werd voor mijn hand op zes centimeter vastgelegd. Het bepalen van de grootte voor deze straal kan ook tijdens de uitvoering van het programma worden vastgelegd door gebruik te maken van de maximale x en y afstanden voor de hand. Hierbij wordt dan de helft van de kleinste van deze twee waarde gebruikt omdat die de breedte van de handpalm zal vertegenwoordigen. Het verschil met de vorige methode is dat er nu niet wordt gezocht naar punten waarvoor de puntenconcentratie binnen de bol een grenswaarde overschreidt, maar deze keer worden de puntenconcentraties voor ieder middelpunt bijgehouden. Na het bekijken van ieder punt uit

38 4.4 Detectie van de vingers 24 de puntenwolk wordt dan teruggegaan naar het punt waarvoor de concentratie het grootst was om alle omringende punten die binnen de bol vielen uit de volledige puntenwolk te verwijderen. Figuur 4.4 illustreert het idee achter deze werkwijze. Zoals in Tabel 4.1 is aangegeven is deze manier van werken vrij accuraat en dus acceptabel. In tegenstelling tot de theoretische verwachtingen bleek deze methode toch sneller te zijn dan het gebruik van een kleine bol, er werden vier frames per seconde bereikt. Ondanks de acceptabele accuraatheid is deze manier van werken alsnog afgeschreven omdat ze te traag is om aan detectie van gebaren te doen. Figuur 4.4: Voorstelling van methode met een grote bol: links de puntenwolk van een hand met de gevonden uit te knippen bol, rechts de resterende puntenwolk Punt per punt filter met grote kubus Om de snelheid te verhogen bij acceptabele accuraatheid is er een implementatie gebeurd met een grote kubus. De werkwijze is gelijkaardig aan die waarbij gebruik werd gemaakt van een grote bol met als enige verschil het gebruik van een grote kubus in plaats van een bol. Een zijde van de kubus heeft de afmeting van de diameter van de bol uit de methode met een grote bol (zijnde 12 centimeter) en kan op dezelfde manier worden bepaald tijdens uitvoering. Zoals verwacht is het gebruik van een kubus in plaats van een bol ook hier iets sneller, er worden namelijk zes frames per seconde bereikt. Echter is de accuraatheid afgenomen wat het onderscheiden van de vingers onderling aanzienlijk bemoeilijkt door de blijvende verbindingspunten tussen de vingers. Bovendien zijn zes frames per seconde niet echt een noemenswaardige verbetering ten opzichte eerdere methodes. Figuur 4.5 toont ook hier het idee van de methode en het resultaat ervan voor een open handvorm waarbij de verbindingspunten tussen vingers duidelijk zichtbaar zijn.

39 4.4 Detectie van de vingers 25 Figuur 4.5: Voorstelling van methode met een grote kubus: links de puntenwolk van een hand met de gevonden uit te knippen kubus, rechts de resterende puntenwolk Een dubbel filter voor hogere accuraatheid Naast de snelheid is ook de accuraatheid zeer belangrijk om later tot goede classificatie over te gaan. Daarom is er gebruik gemaakt van een dubbel filter waarbij het tweede filter de accuraatheid moet verhogen. Het probleem dat kan optreden en aanleiding geeft tot minder accuraatheid is de aanwezigheid van ruispunten die de verschillende vingers met elkaar verbinden. Door deze ruispunten zullen regelmatig meerdere vingers als één geheel worden aanzien wat foute parameters als uiteindelijk gevolg zal hebben. Een eerste filter is een punt per punt filter met een grote kubus zoals beschreven in sectie Het tweede filter moet de puntenconcentraties binnen een klein lichaam met als middelpunt de punten op de rand van de grote kubus bekijken om eventueel overgebleven hoge concentraties alsnog te verwijderen. Het lichaam dat gebruikt wordt voor het tweede filter kan een bol of kubus zijn zoals gebruikt in sectie met gelijkwaardige afmetingen. Zoals uit de resultaten blijkt zal het gebruik van een bol tot hogere accuraatheid leiden ten opzichte van het gebruik van een kubus. In Figuur 4.6 is dan ook enkel de werking van het gebruik van de bollen geïllustreerd. Hierin valt meteen op dat er iets minder punten per vinger zijn, dit is geen echt minpunt omdat niet perfect alle punten van een vinger noodzakelijk zijn om mee verder te werken. Het gebruik van dit dubbel filter zorgt voor een merkbare stijging in accuraatheid zonder een meetbare invloed te hebben op het aantal frames per seconde in vergelijking met de methode uit sectie Theoretisch zou dit echter iets lager moeten worden ten gevolge van de toegevoegde berekeningen die moeten gebeuren.

40 4.4 Detectie van de vingers 26 Figuur 4.6: Voorstelling van methode met een dubbel filter: links de puntenwolk van een hand met de gevonden uit te knippen kubus en bollen aan de rand, rechts de resterende puntenwolk Een dubbel filter met raster voor hogere framerate Denkend aan de aangeleerde kennis rond multimedia, kwam het alom gekende gebruik van een raster in gedachten. In de multimedia wordt een raster veelal gebruikt bij videobeelden om bewegingen te bepalen of zelfs te voorspellen. Dit heeft dan ook aanleiding gegeven om een raster te gebruiken voor het bepalen van de hand. Het gebruik van het raster verschilt hier omdat er geen gebruik wordt gemaakt van de vakjes maar wel van de punten die ten minste twee lijnen van het raster met elkaar verbinden, ik zal dit van nu af verbindingspunten noemen. Aangezien het center van de hand gekend is kan er een driedimensionaal raster rond dit punt gevormd worden om dan enkel de verbindingspunten te gaan gebruiken. Het gebruik van een raster zorgt ervoor dat er aanzienlijk minder punten moeten bekeken worden in de verdere loop van deze methode. De tweede stap is afgeleid van de methode uit sectie 4.4.2, er zal dus rond ieder verbindingspunt een grote bol worden gelegd waarvoor de puntenconcentratie die erbinnen zit wordt berekend en bijgehouden. Vervolgens wordt het punt met de hoogste puntenconcentratie gebruikt als middelpunt van een grote kubus met als zijde de diameter van de bol. Er wordt overgestapt van een grote bol naar een grote kubus omdat een bol de hoogste accuraatheid heeft voor het vinden van de handpalm terwijl de kubus eventueel overblijvende ruispunten die de vingers met elkaar zouden verbinden mee verwijdert. Op deze manier gaan er ook wat extra punten van de vingers verloren maar zoals eerder aangegeven is dit niet erg voor het verdere gebruik van de overgebleven puntenwolk. Bovendien zijn de afmetingen van het raster, de bol en dus ook de kubus bepaald tijdens de uitvoering aan de hand van de gedetecteerde hand in kwestie waardoor het geheel adaptief en bruikbaar wordt voor derden.

41 4.4 Detectie van de vingers 27 Deze methode heeft een hoge accuraatheid alsook snelheid waardoor ze gekozen is als te gebruiken methode. Er werden vijftien frames per seconde gehaald met deze methode. Figuur 4.7 illustreert het raster waarbij eerst de positie van een grote bol wordt bepaald om vervolgens over te stappen op een kubus. De kubus is in de figuur iets groter getekend om het geheel overzichtelijk te houden. Figuur 4.7: Voorstelling van methode met raster en dubbel filter: links de puntenwolk van een hand met het raster met daarop de gevonden cirkel en de uit te knippen kubus, rechts de resterende puntenwolk Clustering van de vingers Figuur 4.8: De vorming van clusters voor vingers. Met het clusteren van vingers wordt bedoeld het samenvoegen of groeperen van punten die dicht bij elkaar liggen om zo de vingers te bekomen. Na het verwijderen van de punten die corresponderen met de handpalm uit de puntenwolk blijft er een puntenwolk met minder data over zoals zichtbaar in het rechtse deel van Figuren De bedoeling van het clusteren is het opdelen van de overgebleven puntenwolk in kleinere puntenwolken die dan later een vinger kunnen representeren. Figuur 4.8 illustreert op zeer eenvoudige wijze de werking van het clusteren die nu zal worden toegelicht. In eerste instantie is het nodig om

42 4.4 Detectie van de vingers 28 op zijn minst één nieuwe puntenwolk te creëren om het eerste punt in op te slaan. Hierna zal voor ieder punt worden gekeken of er een kleine puntenwolk bestaat waarin minstens één punt zit dat op minder dan twee millimeter van het huidige punt verwijderd is om het beschouwde punt vervolgens in de puntenwolk die hieraan voldoet op te slaan. Indien er zo geen tweede punt bestaat zal er een nieuwe puntenwolk worden gecreëerd voor het beschouwde punt, en dit tot ieder punt van de oorspronkelijke puntenwolk is bekeken. Op deze manier worden n kleine puntenwolken gecreëerd, deze zullen echter nog geen vingers representeren omdat vanwege de vorm van de hand en de manier waarop over de punten wordt gelopen (wat afhankelijk is van de handrotatie) punten die op minder dan twee millimeter van elkaar verwijderd zijn alsnog in verschillende puntenwolken terecht kunnen komen. Om tot de vingers te komen zal er dus tussen de puntenwolken onderling nog eens gekeken moeten worden of er zijn die mogen samengevoegd worden. Iedere puntenwolk wordt dus met iedere andere puntenwolk vergeleken waarbij de punten die in elk van deze puntenwolken zitten worden vergeleken om te tellen hoeveel punten er op minder dan twee millimeter van elkaar verwijderd zijn. Vervolgens zullen de puntenwolken met de meeste punten die op minder dan twee millimeter van elkaar verwijderd zijn worden samengevoegd. Deze samenvoeging van puntenwolken gebeurt iteratief tot er geen meer kunnen worden samengevoegd. Na al de bovenstaande stappen is er nog steeds geen zekerheid dat alle overgebleven puntenwolken vingers voorstellen. Om dit toch te garanderen worden de puntenwolken met minder dan honderd punten verwijderd. Uit tests is gebleken dat clusters met minder dan honderd punten nog overblijvende ruis bezitten. De kleinste puntenwolk die een vinger voorstelt is die voor de pink en deze bezit steeds meer dan tweehonderd punten. Indien er dan nog meer dan vijf puntenwolken overblijven worden de vijf grootste puntenwolken bijgehouden omdat dit de vingers moeten zijn. Figuur 4.9 toont een aantal resultaten na het clusteren van de vingers, hierin vertegenwoordigt iedere kleur een vinger en zijn in het klein ook steeds de handvormen toegevoegd ter verduidelijking.

43 4.4 Detectie van de vingers 29 Figuur 4.9: Resulterende puntenwolken na het clusteren van vingers met de bijhorende handvorm.

44 SMOOTHING 30 Hoofdstuk 5 Smoothing De eigen implementatie voor de detectie van vingers had acceptabele prestatie en nauwkeurigheid, echter is uit testen gebleken dat er nog regelmatige kleine foutsequenties aanwezig zijn bij het detecteren van het aantal vingers. Het wegwerken van deze kleine foutsequenties kan op verschillende manieren en kan al snel de eindresultaten positief beïnvloeden. Hierdoor is er overgegaan tot het toevoegen van een vorm van smoothing alvorens over te gaan tot de training van en classificatie met Hidden Markov Modellen. Er bestaan verschillende algemeen bekende smoothing algoritmes en smoothing filters waaronder Additieve, Kernel, Laplaciaanse, Exponentiële smoothing, Butherworth, Kalman, Recursief filter en Moving average. Na het bekijken van de toepasbaarheid van iedere vorm van filtering op de vingerdetectie kwamen Moving average en Exponentiële smoothing er als beste uit, deze twee zijn dan ook geïmplementeerd en getest. In dit hoofdstuk zullen beide filters worden toegelicht waarna de tests en resultaten worden besproken. 5.1 Moving average Moving average oftewel voortschrijdend gemiddelde is een analytische methode die onder meer wordt gebruikt bij analyse van beurskoersen. De methode zal een bestaande reeks waarden omvormen tot een nieuwe reeks van gemiddelde waarden en is in staat om korte fluctuaties in waarden weg te filteren. Dit is dan ook waarom het binnen deze thesis handig zou kunnen zijn. Moving average kan worden toegepast om de kleine fouten die voorkomen bij het detecteren van vingers weg te werken. Eerst zal kort worden beschreven hoe dit algoritme in theorie werkt waarna een kleine toelichting volgt over de manier van implementatie binnen deze masterproef. Er wordt voor dit algoritme van uit gegaan dat er een hele reeks waarden ter beschikking

45 5.1 Moving average 31 zijn om telkens de gemiddelden van te berekenen. Over hoeveel waarden het gemiddelde genomen moet worden is instelbaar met een eenvoudige parameter die gedefinieerd wordt als n. Indien nu elke waarde voor smoothing wordt voorgesteld door de letter x en na smoothing door de letter s met een index, waarbij de index van de meest recente waarde t is, kan het huidige resultaat van moving average als volgt berekend worden: s t = x t + x t x t (n 1) n (5.1) In de initialisatie, wanneer er nog geen n waarden beschikbaar zijn, worden slechts het aantal beschikbare waarden in rekening gebracht en wordt er gedeeld door dat aantal waarden. Op ieder moment wordt er dus een nieuwe waarde berekend door rekening te houden met de laatste n waarden. Dit heeft tot direct gevolg dat fluctuaties in waarden van langere duur (n/2) niet kunnen weggefilterd worden en dat het bij een verandering van een waarde die voor langere duur wordt aangehouden minstens n/2 waarden zal duren vooraleer de nieuwe waarde zichtbaar wordt bij gebruik van moving average. Er zal dus steeds een vertraging optreden bij een waardeverandering. Nog een nadeel is dat de laatste n waarden steeds ter beschikking moeten zijn wat bij implementatie meer geheugen vereist dan bijvoorbeeld de implementatie van het exponentiële filter (sectie 5.2). Het grootste voordeel van dit algoritme is de lage complexiteit. Figuur 5.1 geeft een fictief voorbeeld van toepassing van dit algoritme waarbij enkel met 5 en 3 als geobserveerde waarden wordt gewerkt. Zoals zichtbaar op de grafiek wijkt de implementatie af van het theoretische model, dit is doordat de resultaten voor de implementatie gediscretiseerd worden. De enige mogelijke waarden voor het aantal vingers zijn immers nul, één, twee, drie, vier of vijf. Net als in het voorbeeld zal ook in de implementatie binnen deze masterproef een gemiddelde van n waarden worden bekeken waarna wordt beslist of het huidige aantal vingers voldoet aan het resultaat van moving average. Indien dit het geval is wordt de huidige data behouden, maar indien dat niet het geval is zal de meest recente meting met dezelfde hoeveelheid vingers worden gebruikt als huidige meting. Op deze manier worden sommige metingen dus dubbel gebruikt teneinde de kleine fluctuaties in aantal vingers ten gevolge van storingen weg te werken.

46 5.2 Exponentiële smoothing 32 Figuur 5.1: Illustratie van moving average met venstergrootte n= Exponentiële smoothing Een exponentiële smoother is iets complexer dan moving average en wordt in de praktijk meer gebruikt zowel voor algemene smoothing alsook om voorspellingen uit af te leiden. In tegenstelling tot moving average houdt een exponentiële smoother rekening met alle waarden uit het verleden. Alle waarden moeten hiervoor niet worden bijgehouden, het algoritme is zodanig opgebouwd dat enkel de huidige waarde en het vorige resultaat van exponentiële smoothing gekend moeten zijn. Dit spaart in vergelijking met moving average geheugen uit en zorgt voor een snellere werking van het algoritme. Eerst zal even de opbouw van het algoritme bekeken worden om vervolgens over te gaan tot een korte toevoeging over de implementatie binnen deze masterproef. Het algoritme bestaat uit twee delen. Een initialisatie waarbij het eerste resultaat gewoon gelijk wordt gesteld aan de eerste waarde en een formule die van toepassing is op alle volgende waarden. Een exponentiële smoother kan beschreven worden met de volgende formules: s 0 = x 0 (5.2) s t = αx t + (1 α)s t 1, t > 0 (5.3) De x parameter stelt de originele waarden voor waarbij de index t staat voor de huidige

47 5.3 Testresultaten 33 waarde en 0 voor de eerste waarde, s duidt op de waarde na smoothing met index t voor de huidige en t-1 voor de vorige waarde. Verder is α de smoothing factor die bepaalt in welke mate de huidige waarde wordt beïnvloed door het verleden. In deze formulering zal een stijging van α resulteren in minder invloed van het verleden, indien α gelijk aan 1 wordt genomen zal er geen smoothing plaatsvinden. Deze formule komt soms ook voor in een lichtjes andere vorm waarbij α en 1-α zijn verwisseld waardoor een hogere α overeenkomt met meer invloed van waarden uit het verleden. Het grote voordeel van dit algoritme is de snellere respons op verandering in waarden dan bij moving average het geval was. Bij een exponentiële smoother zal het minder lang duren voordat een verandering in waarden merkbaar wordt, deze tijdsduur is wel nog voor een stuk afhankelijk van de α factor. Het wegfilteren van kortstondige fouten wordt ook beïnvloed door de α factor waardoor de keuze van deze factor uitermate belangrijk is voor de goede werking. Figuur 5.2 geeft hier een illustratief voorbeeld van de exponentiële smoothing. Hierbij werden dezelfde ingangswaarden gebruikt als in Figuur 5.1 en is bij vergelijking te zien dat in dit geval reeds een fout meer is weggewerkt op tijdstip 9. Daarnaast is ook hier te zien dat de implementatie afwijkt van het theoretische model omdat de waarde gediscretiseerd worden naar het aantal vingers. In de implementatie binnen deze masterproef is er opnieuw gebruik gemaakt van het aantal vingers voor de exponentiële smoother. Deze keer wordt er gekeken hoe dicht het aantal vingers van de vorige en huidige meting bij het resultaat van de smoother liggen en wordt de dichtste meting als huidige meting ingesteld. Indien beide metingen een gelijk aantal vingers vertonen zal steeds de meest recente meting worden gebruikt. 5.3 Testresultaten De vingerdetectie met toevoeging van smoothing omvat een groot deel van deze masterproef. Er zijn dan ook een aantal testen uitgevoerd om de prestatie van de smoothing methodes na te gaan. In deze sectie zullen de resultaten van deze de uitgevoerde testen besproken worden. Er zijn tests uitgevoerd met moving average waarbij verschillende waarden voor n zijn gebruikt alsook tests met exponentiële smoothing met een verscheidenheid aan α factoren. Voor moving average zal de n parameter zijnde het aantal waarden waarover het gemiddelde wordt genomen benoemd worden als venstergrootte omdat het kan aanzien worden als het plaatsen van een venster rond n opeenvolgende waarden. Wat de exponentiële smoother betreft zullen geen nieuwe benamingen gehanteerd worden. Bij de verschillende ingestelde parameters zijn vervolgens de vertragingstijden en het aantal fouten opgemeten. Deze fouten

48 5.3 Testresultaten 34 Figuur 5.2: Illustratie van exponentiële smoothing met factor α=0.2. zijn dan nog eens wat dieper bekeken door de grootste en kleinste foutsequentie in rekening te brengen. Om tot representatieve testresultaten te komen zijn er een aantal opnames uitgevoerd die dan gebruikt werden voor de tests. Deze opnames staan volledig los van de in een later hoofdstuk besproken dataset. Dit wil zeggen dat deze opnames niet gebruikt worden in de dataset en ook de opnameregels van de dataset niet volledig volgen. Er is een opname uitgevoerd waarbij de gebruiker een handvorm aanneemt en tijdens de opname overgaat naar een handvorm met een ander aantal vingers, dit om de vertraging bij overgangen te kunnen opmeten. Om de tijden op te meten werd bij ieder resultaat ook de tijd in milliseconden meegegeven. Om te bepalen hoeveel fouten er optreden bij een bepaalde smoothing methode met specifieke parameters zijn er zes opnames gebeurd. Bij elk van deze opnames zal de gebruiker een handvorm met nul, één, twee, drie, vier of vijf zichtbare vingers aannemen en deze willekeurig bewegen voor de Kinect tot er duizend frames bekomen zijn. Door met opnames te werken is er zekerheid dat telkens op dezelfde data wordt gewerkt waardoor de resultaten met elkaar vergeleken kunnen worden. Er zal eerst worden gekeken naar de optredende vertraging. Hiervoor zijn vele waarden voor de venstergrootte alsook voor de α parameter gebruikt. Figuur 5.3 toont de opgemeten resultaten. Er is bij moving average slechts tot een venstergrootte van zestien gegaan omdat een hogere venstergrootte te veel vertraging met zich meebrengt. Hierbij treed een vertraging

49 5.3 Testresultaten 35 Figuur 5.3: Opgemeten delay bij smoothing algoritmes. van meer dan 800ms op, aangezien er aan 15 frames per seconde wordt gewerkt wil dit zeggen dat het ongeveer één seconde zal duren vooraleer een verandering aan de ingang zichtbaar wordt aan de uitgang. Bij moving average is meteen duidelijk dat er een stijging in de vertragingstijd plaatsheeft bij een stijgende venstergrootte. Een venstergrootte van 8 zou nog aanvaardbaar kunnen zijn maar daarboven wordt de vertraging veel te groot. Als er gekeken wordt naar de resultaten bij een exponentiële smoother is er te zien dat een α factor dichter bij één een kleinere vertraging met zich meebrengt. Dit wil zeggen dat de vertraging die optreedt bij een waardeverandering afneemt wanneer de resultaten uit het verleden minder invloed hebben wat ook logisch is aangezien dit wil zeggen dat een nieuwe waarde minder moet voorkomen vooraleer ze merkbaar wordt. Ook hier is voor een α van 0.1 reeds een ongewenste vertraging zichtbaar en zal dus met een α factor van minimaal 0.2 worden gewerkt. Tabel 5.1 geeft enkele resultaten van de vingerdetectie na toepassing van de verschillende smoothing modes. Deze resultaten zijn procentueel weergegeven om ze eenvoudiger te kunnen interpreteren. Er zijn voor iedere test 1000 metingen uitgevoerd waarbij het belangrijk is ook op te merken dat een groot deel van de fouten optreedt in de initiële fase, zijnde de tijd tussen kalibratie van de gebruiker en het effectief aannemen van de handvorm. Dat is dan ook de reden dat de grootste, kleinste en gemiddelde foutpercentages zijn gebruikt. Alle drie deze waarden zijn nodig om een volledige vergelijking te kunnen maken. Uit de resultaten die hier zijn vermeld komt moving average er als beste uit. Echter zijn deze resultaten opgetreden bij een venstergrootte van 16 waarmee een vertraging van meer dan 800ms gepaard gaat. Dit is overduidelijk een onacceptabele vertraging in tegenstelling tot de vertraging die optreedt bij exponentiële smoothing. Voor exponentiële smoothing met een α factor van 0.1 bedraagt de vertraging slechts 570ms voor resultaten die niet zo enorm veel afwijken van deze voor moving average smoothing met venstergrootte 16 terwijl de resultaten toch nog beter zijn dan zonder smoothing. Meer uitgebreide resultaten van de uitgevoerde

50 5.3 Testresultaten 36 Tabel 5.1: Foutpercentages bij vingerdetectie. Kleinste Grootste Gemiddelde Normaal 3% 26.9% 20% Moving average (n = 16) 0.2% 24.5% 11.9% Exponentieel (α = 0.1) 2.5% 24.6% 17.4% testen zijn terug te vinden in Bijlage C. Ondanks dat met een grote venstergrootte bij moving average een hogere accuraatheid kan bekomen worden is er toch gekozen om verder te werken met de exponentiële smoothing. De doorslaggevende factor bij deze beslissing is de vertraging die optreedt bij moving average, deze is aanzienlijk lager voor exponentiële smoothing. Hierbij is bovendien gekozen voor een α factor van 0.2 omdat de betere accuraatheid bij een lagere factor niet opweegt tegen de bijkomende vertraging.

51 DE DATASET 37 Hoofdstuk 6 De dataset Na het detecteren van de handen en vingers waarbij voldoende parameters kunnen achterhaald worden zoals het aantal vingers, de positie en richtingsvector voor iedere vinger alsook de hand dient er uiteraard nog een vorm van classificatie voor de gebaren plaats te vinden. Voor de classificatie zelf wordt gebruik gemaakt van Hidden Markov modellen die later aan bod komen. Dit brengt de nood aan training van het systeem met zich mee wat aanleiding geeft tot dit hoofdstuk. Er is dan ook gekeken hoe het beste met een dataset kan gewerkt worden en wat zoal de vereisten zijn. De dataset moet bestaan uit opnames van gebaren die bij voorkeur met een Kinect zijn opgenomen om zowel de RGB als dieptedata ter beschikking te hebben. Er zijn eerst mogelijkheden bekeken om gebruik te maken van een bestaande datasets van derden. Dit was echter niet mogelijk en de reden hiervoor zal in dit hoofdstuk worden toegelicht. Verder zal er nog gekeken worden naar een aantal opgestelde regels voor het opnemen van een dataset alsook de opbouw van de uiteindelijk gebruikte dataset. 6.1 Datasets van derden Zoals reeds vermeld is er eerst gekeken in hoeverre bestaande datasets bruikbaar zijn binnen deze masterproef. Er bestaat een verscheidenheid aan datasets die vrij beschikbaar zijn, echter wordt deze groep al veel kleiner door de nood aan dieptedata. Van de overblijvende datasets zijn er nog veel afgevallen doordat de meeste datasets opnames bevatten van objecten of ruimtes met tot doel het gebruik bij onderzoek rond 3D reconstructie door middel van opnames. Uiteindelijk bleven er nog twee datasets over die mogelijk bruikbaar zouden zijn. Een eerste dataset was er één die door Prof. Mieke van Herreweghe zou worden opgenomen met gebruik van een Kinect camera. Na opvraging van de plannen rond de dataset bleek deze gepland te zijn tegen september 2013 wat het gebruik ervan binnen deze masterproef

52 6.2 Richtlijnen voor opname 38 onmogelijk maakt. De tweede mogelijkheid was het gebruik van een dataset die werd opgenomen voor gebruik in een masterproef van vorig academiejaar [25]. In deze dataset zaten vijftig gebaren die tien keer waren opgenomen met de Kinect voor drie verschillende personen. Hierbij kwamen telkens enkele gelijkaardige gebaren voor met zowel één hand als twee handen. Er zaten zowel voorbewerkte alsook onbewerkte opnames in deze dataset. Het eerste probleem met deze dataset was dat alle opnames in avi formaat stonden en OpenNI (het Kinect raamwerk dat gebruikt wordt) dit formaat niet kan inlezen. OpenNI kan enkel bestanden in oni formaat, wat een veel gebruikt formaat is voor opnames met de Kinect, inlezen. Bovendien bezit OpenNI geen enkele mogelijkheid om een oni bestand te maken van een avi bestand. Zo een oni bestand kan aan OpenNI gegeven worden om de initialisatie te starten waarbij de verwerking van de beelden in het oni bestand verder gebeurt zoals wanneer ze rechtstreeks van de kinect worden gestreamed. Om toch met de avi bestanden te kunnen werken is een programma geschreven dat in staat is om de avi bestanden om te zetten naar oni bestanden voor gebruik met OpenNI. In dit conversieprogramma wordt een bestaand oni bestand gebruikt om een virtuele Kinect te initialiseren. Daarna wordt voor iedere frame in een avi bestand de data gekopieerd naar een frame zoals opgeslagen in een oni bestand. Op die manier kan de conversie toch geschieden door pixel per pixel te kopiëren. De beschikbaarheid van een oni bestand als template is noodzakelijk om de nieuwe bestanden op de juiste manier op te slaan met alle extra relevante data voor de Kinect erbij. Na omzetting van de opnames voor één gebaar werd het nieuwe oni bestand aan de vingerdetectie gegeven om de resultaten ervan al eens te bekijken. Deze resultaten waren niet aanwezig, er vond dus geen kalibratie van de gebruiker plaats met tot gevolg dat de handen niet gedetecteerd werden. De oorzaak hiervan was de resolutie van de opnames die slechts 170 bij 128 pixels bedroeg, met als gevolg dat er niet genoeg details uit de beelden verkregen kunnen worden voor detectie van de handen en al zeker niet voor het vinden van de vingers. Voor de masterproef van voorgaand academiejaar was die resolutie wel hoog genoeg omdat er andere methoden werden toegepast. Er was dus nood ontstaan aan het opnemen van een eigen dataset voor gebruik binnen deze masterproef. Meer details over deze dataset worden in de volgende secties uitgezet. 6.2 Richtlijnen voor opname Om over te kunnen gaan tot het opnemen van een dataset is het belangrijk om een aantal regels en specificaties op te stellen waaraan de opnames moeten voldoen. Op die manier komt er enige uniformiteit in de opnames en kunnen fouten bij de opnames vermeden worden.

53 6.3 Opbouw van de dataset 39 Wat de regels voor de omgeving betreft is het belangrijk om te voorkomen dat er fel zonlicht in de opnameruimte kan optreden. Fel zonlicht zal het beeld dat de Kinect opneemt verstoren omdat het puntenpatroon dat deze uitstuurt hierdoor grondig verstoord wordt. Anderzijds is het best er voor te zorgen dat de ruimte goed verlicht is, hoewel dit geen absolute vereiste is zorgt het wel voor betere beelden om op verder te werken. Indien er te weinig licht is kunnen de persoon alsook zijn handen nog steeds gedetecteerd worden via de dieptedata waarvoor het lichtpatroon wordt gebruikt. De RGB beelden zullen echter wel invloed ondervinden van een tekort aan belichting. Het is tevens ook belangrijk ervoor te zorgen dat er ten allen tijde slechts één persoon in beeld is. Er zal slechts detectie worden toegepast op één persoon dus indien meerdere personen in beeld zijn wordt een extra selectie van de persoon noodzakelijk. Wat de opstelling betreft is het belangrijk om een afstand van ongeveer anderhalve meter te voorzien tussen de camera en de plaatst waar de persoon zich zal bevinden. Deze afstand is dusdanig gekozen dat er genoeg details uit het beeld kunnen verkregen worden zonder dat de persoon te dicht bij de camera staat. Indien de persoon te dicht bij de camera staat zal voor grotere personen niet het volledige bovenlichaam zichtbaar zijn waardoor de gebruikersdetectie fouten kan vertonen. De Kinect zelf wordt op een verhoogd platform gezet van ongeveer één meter hoog, hier mag spelling opzitten aangezien de Kinect nog omlaag of omhoog kan getilt worden. Figuur 6.1 illustreert een mogelijke opstelling. Als laatste is het ook belangrijk om een aantal technische specificaties voor de opgenomen beelden vast te leggen. Het is niet noodzakelijk om alle data op te nemen, voor de opgenomen dataset is dan ook besloten om het opnemen van geluid achterwege te laten. Geluid zal voor het herkennen van gebaren geen meerwaarde leveren en is dus overbodig. Ondanks dat er enkel gebruik wordt gemaakt van de dieptedata is ook de RGB data opgenomen met de mogelijkheid van het gebruik van de dataset in de toekomst in het achterhoofd. Voor alle beelden (RGB en diepte) is een VGA resolutie van 640 bij 480 pixels gebruikt. 6.3 Opbouw van de dataset Alle geselecteerde gebaren zijn gekozen uit een lijst met gebaren uit de vlaamse gebarentaal [1]. Er zijn zowel gebaren met één hand als met twee handen gebruikt en met verschillende handvormen. Hiermee wordt bedoeld dat het aantal vingers verschilt tussen gebaren. Uiteraard zijn er ook gebaren die zeer gelijkaardige handvorm hebben en waarbij enkel de positie waar het gebaar wordt uitgebeeld verschilt. De eerste vijf gebaren die een kleine startersdataset vormden zijn door mezelf geselecteerd, gebaren die achteraf werden toegevoegd zijn

54 6.3 Opbouw van de dataset 40 Figuur 6.1: Voorbeeld van een opstelling om dataset op te nemen. geselecteerd door andere personen die hebben meegewerkt aan de dataset. Die andere personen hebben geen inzicht in de werking van de vingerdetectie die de parameters moet achterhalen waarop geclassificeerd zal worden. Zij waren dus niet op de hoogte van de sterktes en zwaktes van de detectie. Op die manier is er geen voorkeur gegeven aan bepaalde gebaren en kan er getest worden met een verscheidenheid aan gebaren. Voor de opnames zijn drie personen gebruikt (waaronder mezelf) die telkens vijftien opnames per gebaar uitvoerden. Bij die opnames diende de gebruiker in beeld te wandelen en het gebaar uit te beelden. Het in beeld wandelen is noodzakelijk voor de kalibratie van de gebruiker. Verder zijn er geen bepaalde regels opgelegd voor de opnames en was er de meewerkende personen opgedragen niets te forceren en het gebaar uit te voeren zoals ze het zouden gebruiken in een gesprek. Voor gebaren met één hand is er dus geen bepaalde positie of houding voor de tweede hand opgelegd. Het enige punt dat van belang was en werd meegedeeld is dat gebaren die een verplaatsing in de richting van de camera bevatten worden uitgevoerd met de beweging naar het ledje op de Kinect gericht. Dit om de hand of handen ten allen tijde in beeld te houden bij een beweging. In Bijlage D zijn de gebruikte gebaren terug te vinden.

55 MACHINAAL LEREN 41 Hoofdstuk 7 Machinaal leren Om over te kunnen gaan tot de effectieve detectie van gebaren dient er eerst een techniek van machinaal leren geselecteerd te worden. Voor het herkennen van gebaren is hierbij gekozen voor Hidden Markov Modellen omdat dit een uitstekende techniek is voor het werken met sequentiële data. Een gebaar bestaat namelijk uit een sequentie van handelingen in de tijd, zijnde een bepaalde beweging en/of verandering van handvorm. Daarnaast zijn Hidden Markov modellen in staat om overlappende clusters van datapunten te onderscheiden. Zulke clusters kunnen ook voorkomen bij de detectie van gebaren waarbij twee gebaren gemeenschappelijke posities bevatten bij een beweging. Aldus zullen Hidden Markov Modellen gebruikt worden. Er zal in dit hoofdstuk eerst een beschrijving van Hidden Markov modellen aan bod komen waarbij ook de verschillende mogelijkheden die er zijn bij het gebruik van dergelijke modellen besproken worden. Deze mogelijkheden zijn het trainen van een Hidden Markov model, het evalueren en decoderen van een sequentie van observaties. Als laatste zullen er ook nog enkele specifieke Hidden Markov modellen besproken worden die binnen de masterproef gebruikt zijn. 7.1 Hidden Markov Modellen Een Hidden Markov model oftewel HMM is een statistisch model dat zeer populair is en toepassingen kent in herkenning van spraak, geschrift, kentekenplaten en gebaren. Hieruit blijkt meteen dat deze modellen reeds zijn gebruikt bij het herkennen van gebaren en dit meestal met goede resultaten. Een HMM is in theorie een Markov model met onbekende toestanden. Dit wil zeggen dat in tegenstelling tot een Markov model, waar de toestandssequentie die een bepaalde sequentie van observaties veroorzaakt eenvoudig te achterhalen is, bij een HMM de toestandssequentie die een sequentie van observaties veroorzaakt heeft on-

56 7.1 Hidden Markov Modellen 42 Figuur 7.1: Eenvoudige voorstelling van een Hidden Markov Model. bekend is. Bij een gewoon Markov Model wordt dan ook meestal enkel over observaties gesproken om verwarring te voorkomen. Voor een HMM kan echter wel worden nagegaan wat de waarschijnlijkheid is dat de sequentie van observaties veroorzaakt is door een bepaald model alsook wat de meest waarschijnlijke toestandssequentie is. Dit laatste is binnen deze masterproef minder belangrijk aangezien er voor ieder gebaar een HMM wordt gebouwd om vervolgens bij de detectie na te gaan welke het meest waarschijnlijke HMM (en dus gebaar) is. Figuur 7.1 geeft een grafische voorstelling van een HMM in zijn eenvoudigste vorm. Op de figuur zijn zowel de verborgen toestanden z als observaties x terug te vinden waarbij de index duidt op een tijdstip oftewel de positie van die waarde in een reeks van opeenvolgende data. Er is één uitzonderlijk geval zijde de initiële toestand i die bij het gebruik van een HMM moet worden bepaald. Zoals reeds eerder vermeld is ook in de figuur te zien dat een observatie steeds het gevolg is van de verborgen toestand op dat moment, waar ook steeds een emissie B met gepaard gaat. Tussen de verschillende verborgen toestanden vindt ook een transitie A plaats met een bepaalde kans. De twee termen emissie en transitie behoeven enige verklaring. Een transitie wordt bijgehouden in een transitiematrix, zo een matrix bevat de probabiliteiten om van een verborgen toestand naar een andere of dezelfde verborgen toestand over te gaan. Dit is dus een vierkante matrix met dimensie gelijk aan het aantal verborgen toestanden. Dit aantal verborgen toestanden kan bij het bouwen van een HMM worden vastgelegd. Een emissie zit in een emissiematrix die de probabiliteit op een bepaalde verborgen toestand voor een gegeven observatie bezit. Zo een emissiematrix heeft rijen gelijk aan het aantal verborgen toestanden en kolommen gelijk aan het aantal mogelijke observaties. Het net beschreven geval is enkel van toepassing op een HMM met discrete distributie. Wanneer er een gaussiaanse distributie wordt gebruikt zullen de emissies bestaan uit een matrix met gemiddelde waarden voor de observaties alsook een covariantiematrix per dimensie

57 7.1 Hidden Markov Modellen 43 van de observatie en dit per verborgen toestand. Een HMM wordt dus volledig gedefinieerd door zijn transitiematrix, emissiematrix en initiële toestand. In deze masterproef zijn HMMs met zowel discrete als Gaussiaanse distributies gebruikt Training Het doel van de training is het bekomen van de definiërende parameters van een HMM, zijnde de transitiematrix, emissiematrix en initiële toestand. Hiervoor zal het HMM moeten leren wat de verborgen toestanden zijn en wat de probabiliteiten zijn voor transities en emissies. Er kunnen bij training twee methoden onderscheiden worden. Allereerst is er training met toezicht (beter bekend als supervised training) waarbij zowel de input als output van een proces gekend is. Deze methode zal niet gebruikt worden binnen deze masterproef omdat de output data niet gekend is. Dan is er anderzijds nog training zonder toezicht (beter bekend als unsupervised training) waarbij enkel de input data gekend is zoals het geval is in deze masterproef. Het is voor deze trainingsfase dat de dataset belangrijk is. Er moet voldoende data ter beschikking zijn om een model te trainen, maar tegelijkertijd mag er ook geen overfitting optreden. Overfitting treedt op bij gebruik van een te complex model. Dit wil zeggen dat de aanwezigheid van ruis in de trainingsdata bij een te complex model mee wordt opgenomen, als direct gevolg wordt de kans op een correcte detectie negatief beïnvloed. Voor het effectief unsupervised trainen van een HMM wordt het Baum-Welch algoritme gebruikt. Dit algoritme zal hier niet worden uitgelegd, maar is volledig terug te vinden in [28] Evaluatie Voor evaluatie wordt er van uitgegaan dat er reeds training heeft plaatsgevonden en een HMM gedefinieerd kan worden. Bij evaluatie wordt dan een sequentie van observaties gebruikt om de probabiliteit dat de sequentie is ontstaan uit het gedefinieerde HMM na te gaan. In andere woorden omvat evaluatie het nagaan hoe goed een HMM een gegeven sequentie van observaties kan produceren. Dit is een zeer belangrijke fase binnen deze masterproef omdat hiermee wordt nagegaan welk gebaar volgens gegeven observaties gedetecteerd is. Stel dat er n gebaren in de dataset aanwezig zijn. Dan zijn er n HMMs getraind zodat deze gedefinieerd kunnen worden door middel van de emissiematrix, transitiematrix en initiële toestand. Bij evaluatie kan dan voor ieder van de HMMs de probabiliteit berekend worden dat de sequentie van observaties erdoor geproduceerd werd waarna het HMM met de hoogste probabiliteit het gebaar voorstelt. Zo kan dus voor iedere sequentie van observaties het bijhorende gebaar achterhaald worden.

58 7.1 Hidden Markov Modellen 44 Het algoritme dat gebruikt wordt voor evaluatie is het voorwaarts (oftewel Forward) algoritme en staat volledig beschreven in [28] Decodering Ook voor decodering wordt er verondersteld dat er reeds een HMM getraind is en gedefinieerd kan worden. Indien dit het geval is kan door decodering de meest waarschijnlijke sequentie van verborgen toestanden die een gegeven sequentie van observaties geproduceerd heeft achterhaald worden. Hiervoor wordt het Viterbi algoritme gebruikt. Dit is zeer gelijkaardig aan het voorwaarts algoritme met als verschil dat de probabiliteiten gemaximaliseerd worden in plaats van ze op te tellen. Het volledig algoritme is terug te vinden in [28]. Echter wordt decodering op geen enkel moment gebruikt binnen deze masterproef en is het enkel toegevoegd ter volledigheid Logaritmisch domein Bij het implementeren van HMMs kan underflow van floating-point types een probleem vormen. Dit omdat bij gebruik van het Viterbi of het Forward algoritme bij lange sequenties zeer kleine probabiliteiten kunnen ontstaan ten gevolge van vermenigvuldigingen op kleine kommagetallen. Voor het Viterbi algoritme wordt dit opgelost door gebruik te maken van probabiliteiten in het logaritmische domein en deze op te tellen in plaats van te vermenigvuldigen. Wat het Forward algoritme betreft wordt er gewerkt met schalingsfactoren die de probabiliteiten in een acceptabel bereik houden. Dit heeft dan wel tot gevolg dat de schalingsfactoren voor ieder tijdstip moeten bijgehouden worden Types Uit de beelden die verkregen zijn van de Kinect worden een aantal parameters bepaalt. Deze zijn: het aantal vingers, positie en richtingsvector voor de handen en voor iedere individuele vinger. Door elk van deze parameters apart in rekening te brengen en later combinaties te maken zijn enkele types van HMMs ontstaan. Er kunnen dus per gebaar meerdere HMMs zijn, namelijk een HMM per parameter. De verschillende types van HMMs zullen in deze sectie besproken worden waarbij ook reeds een aantal conclusies worden vermeld. De experimenten die tot deze conclusies hebben geleden zijn terug te vinden in Hoofdstuk 8.

59 7.1 Hidden Markov Modellen 45 Vingers Dit type HMM is gebouwd om enkel rekening te houden met het aantal vingers. Er kan meteen gesproken worden over een discrete distributie met één dimensie voor de observaties doordat er slechts zeven mogelijke waarden voor een observatie zijn. Namelijk nul, één, twee, drie, vier of vijf vingers plus nog een extra toestand voor het geval de hand niet gevonden is en er dus geen vingers gedetecteerd konden worden. Door enkel rekening te houden met het aantal vingers kunnen de gebaren met een verschillend aantal vingers reeds goed van elkaar onderscheiden worden. Echter doordat er meerdere gebaren met eenzelfde aantal vingers in de dataset zijn opgenomen is dit niet voldoende en kan de totale accuraatheid van de detectie niet als goed worden aanzien. Bij deze gebaren met eenzelfde aantal vingers is er wel steeds een verschil in rotatie, positie of beweging waardoor er zeker mogelijkheid is tot verbetering door meer parameters in rekening te brengen. Handposities Een andere mogelijkheid bij het trainen van de HMMs is door gebruik te maken van de positie van de handen. Dit is niet langer een discrete distributie omdat de handen zich overal in het gezichtsveld van de Kinect kunnen bevinden waardoor zeer veel waarden mogelijk zijn. Bovendien zullen tussen verschillende opnames van eenzelfde gebaar variaties aanwezig zijn bij de positie. Deze variaties zijn willekeurig doordat de persoon op een iets andere plaats in de ruimte staat. Daarbovenop zijn er ook nog verschillen tussen personen (zoals de lengte van de persoon) die meespelen. Toch zal de data van verschillende opnames voor eenzelfde gebaar steeds geclusterd kunnen worden. Voor dit geval is er dus gekozen voor een Gaussiaanse distributie met dimensie van de observaties gelijk aan drie. Er wordt gebruik gemaakt van 3D data dus zijn er drie dimensies noodzakelijk (X,Y,Z) en onbekende data voor een hand die niet gevonden werd krijgt een fictieve waarde. Het gebruiken van de posities levert meestal betere resultaten dan bij gebruik van enkel de vingers doordat er weinig gebaren zijn die precies dezelfde positie gebruiken. Overlap tussen de gaussiaanse verdelingen van verschillende gebaren is echter altijd mogelijk en zorgt dan ook steeds voor optredende fouten. Voor de richtingsvector van de handen kan hetzelfde type gebruikt worden. Omdat we ook in dat geval werken met continue data met mogelijk afwijkingen tussen opnames voor eenzelfde gebaar. Bij gebruik van de richtingsvectoren bleek uit testen ook reeds een goede correctheid op te treden, wat onverwacht was.

60 7.1 Hidden Markov Modellen 46 Vingerposities Als laatste eenvoudige type is er nog een HMM dat enkel rekening houdt met de posities van individuele vingers. Hierbij is bij testen een onderscheid gemaakt tussen normale posities die relatief zijn ten opzichte van het centraal punt voor de Kinect en posities die relatief zijn gemaakt ten opzichte van de bijhorende handpositie. Maar hierover zal in de resultaten nog meer worden gezegd. Deze posities zijn allen ondergebracht in één HMM waardoor de observaties een dimensie van vijftien krijgen. Deze dimensie van vijftien is het gevolg van werken met 3D data op vijf vingers waarbij voor onbekende data een fictieve waarde wordt gebruikt. Er is opnieuw gekozen voor een gaussiaanse distributie omwille van dezelfde reden als bij het vorige type. Het gebruik van de posities van de vingers levert ondermaatse correctheid op wat het gebruik ervan al snel heeft stopgezet. Opnieuw kan er voor de richtingsvectoren per vinger hetzelfde type worden gebruikt maar ook dit leidde tot ondermaatse accuraatheid waardoor het verder niet meer gebruikt werd. Combinaties Naast de HMMs die rekening houden met één parameter kan er ook rekening worden gehouden met meerdere parameters door gebruik te maken van verschillende HMMs. Deze kunnen op twee manieren gecombineerd worden. De eerste en eenvoudigste manier is het evalueren van een sequentie van observaties voor alle types HMMs en vervolgens de probabiliteiten voor de HMMs van de gewenste types voor eenzelfde gebaar op te tellen. Indien bijvoorbeeld gebruik wordt gemaakt van het aantal vinger en de handposities moeten deze types HMMs getraindd worden en bij evaluatie kunnen beide types voor gebaar1 apart bekeken worden, dit resulteert in een probabiliteit voor het aantal vinger en een probabiliteit voor de handposities. Na het achterhalen van de probabiliteiten kunnen ze opgeteld worden om tot de totale probabiliteit voor gebaar1 te komen. Hierbij wordt er vanuit gegaan dat er met logaritmische probabiliteiten wordt gewerkt. Deze methode levert reeds goede resultaten en kan zonder twijfel gebruikt worden indien de verschillende observaties geen direct verband hebben met elkaar. Een tweede methode bestaat eruit de observaties te gaan combineren en een HMM te trainen voor die combinatie om dan detectie uit te voeren met een combinatie van observaties van dezelfde soort. Dit wil dus zeggen dat er een hoger aantal dimensies gebruikt zal worden. Een direct gevolg hiervan is dat de trainingsfase aanzienlijk langer zal duren. Echter is deze methode enkel noodzakelijk indien de eerste methode geen goede resultaten levert en werd

61 7.1 Hidden Markov Modellen 47 ze binnen deze masterproef niet toegepast.

62 RESULTATEN 48 Hoofdstuk 8 Resultaten Bij de afwerking van deze masterproef zijn er een aantal testen uitgevoerd die aanleiding hebben gegeven tot een aantal resultaten. In dit hoofdstuk zal getracht worden om de meeste resultaten op een overzichtelijk manier zo goed mogelijk te beschrijven. Zo zal er eerst worden gestart met een uiteenzetting van de verschillende testen waarna de resultaten in relevante groepen zullen worden besproken. 8.1 Uitgevoerde testen Allereerst is er reeds een onderscheid tussen twee gebruikte datasets waarbij het verschil aanwezig is in het aantal gebaren dat gebruikt wordt. Zo is er een dataset met zeven gebaren gebruikt voor initiële validatie van verschillende modellen waarna is overgestapt op een grotere dataset met 20 gebaren om de prestatie op grotere schaal te bekijken. Voor elk van de datasets op zich is er dan nog eens een verschil tussen normale testen en testen met kruisvalidatie op niveau van de gebruiker met tot doel na te gaan hoe de modellen generaliseren naar andere gebruikers. Onder kruisvalidatie wordt binnen deze masterproef verstaan het uitvoeren van verschillende testen waarbij telkens een ander deel van de dataset wordt afgezonderd voor validatie. De resultaten die zo bekomen worden zullen dan ook apart bekeken worden. Aangezien er met HMMs gewerkt wordt is het nodig de dataset op te splitsen in een deel voor training en een deel voor validatie. Dit houdt in dat 2/3 van de data gebruikt wordt voor training terwijl de overige 1/3 gebruikt wordt voor het valideren. Aldus zijn verschillende combinaties mogelijk zoals in Figuur 8.1 visueel zichtbaar is gemaakt. Er is in de figuur duidelijk te zien dat er bij de kruisvalidatie telkens één gebruiker wordt gereserveerd voor het valideren terwijl op de andere data getraind wordt, zoals kruisvalidatie eerder gedefinieerd werd, in tegenstelling tot de normale mode waarbij voor iedere persoon

63 8.2 Dataset 7 gebaren 49 Figuur 8.1: Gebruikte opsplitsingen van de dataset voor tests. een stuk wordt getraind. Van hieraf zal naar de verschillende modes verwezen worden met de namen die in de Figuur zijn vermeld. Als laatste kan ook nog een onderscheid worden gemaakt door rekening te houden met de gebruikte data voor training en validatie. Mogelijke data omvat het aantal vingers, de positie van de handen, de richtingsvectoren van de handen, de posities van de vingers, de richtingsvectoren van de vingers of combinaties van de voornoemde mogelijkheden. De opbouw van het HMM voor elk van deze types is terug te vinden in Hoofdstuk 7 en zal niet opnieuw behandeld worden. 8.2 Dataset 7 gebaren In eerste instantie werd er gebruik gemaakt van een basis dataset bestaande uit zeven gebaren (de eerste zeven uit Bijlage D). Hierop zijn de meeste testen uitgevoerd en konden dan ook reeds mede door het onderscheid tussen eenvoudige en gecombineerde HMMs een aantal conclusies getrokken worden Eenvoudige modellen De eenvoudige modellen bestaan uit slechts één data parameter en geven een idee van de basis detectie van gebaren. Figuur 8.2 geeft een overzichtvan de resultaten bij gebruik van de eenvoudige HMMs voor de verschillende soorten testen bij gebruik van 3 verborgen toestanden. Uit deze resultaten is meteen te zien dat de normale test betere resultaten oplevert

64 8.2 Dataset 7 gebaren 50 dan gebruik van kruisvalidatietesten. Dit is op zich logisch omdat voor de kruisvalidatietesten niet getraind werd voor de testpersoon. Verder is ook te zien dat de eenvoudige modellen met uitzondering van de vingerposities en richting van de vingers reeds aanleiding geven tot goede resultaten voor de correcte detectie van gebaren, er wordt reeds 89% accuraatheid behaald in het beste geval. De slechte prestatie van de data op niveau van de vingers is te wijten aan de gevoeligheid aan kleine afwijkingen op die data. Kleine afwijkingen in datapunten ten gevolge van ruis zullen op de vingerdata reeds een aanzienlijke invloed hebben waardoor het gebruik van deze data ontmoedigd wordt. Deze conclusie kan overigens worden doorgetrokken naar alle uitgevoerde testen, met andere woorden zullen de datapunten op niveau van de vingers in geen geval tot betere resultaten leiden. Over het algemeen worden de minst goede resultaten behaald op basis van het aantal vingers indien de positie en richting van de vingers achterwege wordt gelaten. Dit is te danken aan de opbouw van de dataset waarbij verschillende gebaren met eenzelfde aantal vingers aanwezig zijn waardoor het moeilijk wordt om detectie uit te voeren op enkel die data. De positie en richting van de handen voor de gebaren verschilt dan weer wel tussen de gebaren onderling wat zich ook reflecteert in de accuraatheid bij gebruik van deze data. Voor de kruisvalidatie is echter wel steeds een lagere accuraatheid merkbaar die toch nog tot degelijke resultaten kan leiden in de gecombineerde modellen die later aan bod komen. Wat persoon 3 betreft worden steeds de minst goede resultaten behaald voor alle testen. Dit toont aan dat er toch enige afhankelijkheid is tussen de personen voor training en de persoon voor het testen. Deze prestatie zal vanuit theoretisch oogpunt dan ook verbeteren indien de trainset uit meer dan 2 personen zou bestaan. In de tot nog toe gebruikte resultaten werd er steeds vanuit gegaan dat de onbekende data voor training en validatie van de HMMs een vaste fictieve waarde kreeg toegewezen. Deze onbekende data kan plaatsvinden wanneer een hand niet gedetecteerd kan worden of indien op niveau van de vingers bepaalde vingers niet zichtbaar zijn (denk hierbij aan een handvorm met twee vingers). Echter is het ook mogelijk om in plaats van een vaste fictieve waarde een beperkte ruis te te voegen aan de waarde. Door toevoeging van de ruis kan gegarandeerd worden dat de verdeling bij de Gaussiaanse distributies niet te nauwer wordt, waarbij in het slechtste geval één enkele piekwaarde kan overblijven. Dit is dan ook mee opgenomen in de testen en gaf aanleiding tot de resultaten uit Figuur 8.3. Bij het gebruik van fictieve waarden waar een ruis op aanwezig is bleek de prestatie met enkel de richting of posities van de vingers te verbeteren, hetzelfde fenomeen treedt ook op bij gecombineerde modellen met deze data. Voor alle andere eenvoudige modellen alsook gecombineerde modellen blijkt de toegevoegde

65 8.2 Dataset 7 gebaren 51 Figuur 8.2: Resultaten bij gebruik van eenvoudige modellen met 3 verborgen toestanden voor de verschillende testen. Figuur 8.3: Resultaten bij gebruik van eenvoudige modellen met 3 verborgen toestanden voor de verschillende testen waarbij fictieve waarden ruis bevatten.

66 8.2 Dataset 7 gebaren 52 ruis tot minder goede prestatie te leiden in tegenstelling tot wat er verwacht werd. Door toevoeging van ruis kan de data als te variabel aanzien worden waardoor deze niet veel invloed zou mogen hebben op de training terwijl bij het gebruik van een vaste waarde de data mee als nuttig wordt aanzien en deel van het gebaar gaat uitmaken. Het blijkt dus beter te zijn om de fictieve waarden vast te nemen zodat ze zeker deel van het gebaar gaan uitmaken. Ook deze vaststelling is van toepassing op alle andere uitgevoerde testen (met gecombineerde data of een ander aantal verborgen toestanden). Om nog even alles samen te vatten is er reeds geconcludeerd dat het gebruik van de positie en richting van de vingers geen meerwaarde met zich meebrengt net zoals het gebruik van fictieve waarden met ruis de resultaten niet positief beïnvloedt. Op het gebruik van de posities van de vingers wordt later nog even teruggekomen, maar vanaf nu wordt er alvast verondersteld dat alle testen gebruik maken van vaste fictieve waarden voor onbekende data Gecombineerde modellen Naast de eenvoudige modellen kan er ook nog gebruik worden gemaakt van gecombineerde datamodellen voor de HMMs waarbij rekening wordt gehouden met meer dan één parameter. Deze combinatie gebeurt op de eenvoudigste manier door vermenigvuldiging van de probabiliteiten van de eenvoudige HMM modellen. Indien wordt overgegaan naar het logaritmische domein komt dit overeen met het optellen van de probabiliteiten. Het doel van het gebruiken van gecombineerde modellen is het verhogen van de accuraatheid omdat combinatie van twee modellen met middelmatige prestatie theoretisch resulteert in een nieuw model met betere resultaten dan de individuele modellen. Figuur 8.4 geeft de resultaten voor een stap per stap uitgebreid HMM waarbij telkens meer data in rekening wordt gebracht en dit voor 3 verborgen toestanden bij de verschillende testen. Uit de resultaten blijkt dat ook hier de normale test het beste presteert. De resultaten die hier zijn bekomen voor de normale test zijn tevens de beste resultaten die verkregen zijn voor de dataset van zeven gebaren. Verder is het ook hier nog eens duidelijk dat de posities en richtingen van de vingers geen meerwaarde met zich meebrengen en de resultaten enkel aanzienlijk slechter maken. Het is tevens ook zichtbaar dat het gebruik van het aantal vingers, handposities en richting van de hand betere prestaties oplevert dan wanneer de richting van de handen niet in rekening wordt gebracht. Hieraan kan dan meteen de opbouw van een gebaar gerelateerd worden. Aangezien een gebaar bestaat uit een handvorm met een bepaalde rotatie waar nog een beweging bij komt kijken is het te verwachten dat de beste resultaten optreden bij het in rekening brengen van deze elementen. Dit is dan ook wat gedaan wordt door de drie voornoemde parameters te gebruiken in het

67 8.2 Dataset 7 gebaren 53 model dat hier resulteert in een accuraatheid van 94,29%. Ook voor kruisvalidatie zijn de resultaten toegenomen en werden er accuraatheden bekomen die wijzen op de bruikbaarheid van het systeem voor personen waarvoor niet getraind werd indien de dataset voor training meer personen zou bevatten. Toch is het best om bij commercialisatie van dergelijke systemen het geheel te calibreren voor de gebruiker door deze bijvoorbeeld een aantal gebaren te laten uitbeelden. Naast alle testen die reeds besproken zijn is er ook nog een speciaal geval. Dat is namelijk het geval waarbij gebruik wordt gemaakt van vingerposities relatief ten opzichte van het centraal punt van de hand in plaats van de posities te gebruiken zoals verkregen van de camera. De resultaten van deze verandering zijn te zien in Figuur 8.5. Ondanks dat er een aanzienlijke prestatieverbetering optreedt door de vingerposities relatief te maken ten opzichte van de hand, blijft de prestatie door deze data mee in rekening te brengen minder goed dan wanneer er gebruik wordt gemaakt van het tot nu toe optimale model dat resulteert in 94.29% accuraatheid. Uitzonderlijk zien we de resultaten wel één keer verbeteren voor de kruisvalidatie. In zijn totaliteit en bij het in rekening brengen van alle resultaten (die terug te vinden zijn op de bijgevoegde DVD) kan echter alsnog geconcludeerd worden dat het in rekening brengen van de positie en/of richting van de vingers geen meerwaarde oplevert. Ondertussen is het misschien reeds opgevallen dat er telkens met drie verborgen toestanden werd gewerkt. Dit is niet toevallig zo gekozen maar is doordat daarbij de beste prestaties worden behaald. Om dit te bewijzen worden nu de resultaten bekeken voor een verschillend aantal verborgen toestanden. Hierbij zal gebruik worden gemaakt van de bekomen resultaten voor het optimale model waarbij rekening wordt gehouden met het aantal vingers en de positie en richting van de handen met vaste fictieve waarden. Deze resultaten zijn opgenomen in Figuur 8.6. Uit de figuur valt eerst en vooral op dat drie verborgen toestanden tot de beste resultaten leidt. Anderzijds is er ook nog te zien dat het resultaat voor één en twee verborgen toestanden identiek is, ook de bekomen confusion matrices zijn voor beide steeds identiek (ook terug te vinden op de DVD). Dit is een fenomeen dat opnieuw voor alle uitgevoerde testen is waargenomen en waarvoor geen directe verklaring werd gevonden. Dat er voor één en twee verborgen toestanden dezelfde resultaten worden bekomen betekent dat een HMM met twee verborgen toestanden hetzelfde is als een Naive Beyes classifier (wat een HMM met één verborgen toestand in weze is). Om alles samen te vatten kan er dus gesteld worden dat het beste model gebruik maakt van het aantal vingers en de positie en richting van de handen waarbij een vaste fictieve waarde wordt gebruikt, en dit alles bij drie verborgen toestanden. Voor dit model zijn nog

68 8.2 Dataset 7 gebaren 54 Figuur 8.4: Resultaten bij gebruik van gecombineerde modellen met 3 verborgen toestanden voor de verschillende testen. Figuur 8.5: Resultaten bij gebruik van gecombineerde modellen met 3 verborgen toestanden voor de verschillende testen met gerelativeerde vingerposities.

69 8.3 Dataset 20 gebaren 55 eens alle resultaten weergegeven voor normale test in Figuur Dataset 20 gebaren Naarmate de masterproef evolueerde zijn er op regelmatige momenten uitbreidingen gedaan aan de dataset. Deze uitbreidingen resulteerden in een uiteindelijke dataset met twintig gebaren die opgenomen zijn voor drie personen. Op deze dataset is een finale test uitgevoerd voor het optimale model om na te gaan in hoeverre de in deze masterproef gehanteerde methode voor herkenning van gebaren schaalt naar een grotere dataset. Echter is er alsnog gekeken naar een aantal verborgen toestanden hoger dan drie, met name vier en vijf. Dit omdat er meer overlap tussen gebaren aanwezig kan zijn waardoor een hoger aantal verborgen toestanden de prestatie zou kunnen beïnvloeden. De resultaten die in Figuur 8.8 zijn opgenomen bewijzen dat drie verborgen toestanden het optimale model blijft. Hoewel drie en vier verborgen toestanden dezelfde resultaten oplevert voor de normale test is dit bij kruisvalidatie niet het geval en worden daar steeds minder goede resultaten behaald voor een hoger aantal verborgen toestanden. De enige uitzondering hierop is persoon 1 waarbij voor vijf verborgen toestanden 39,33% wordt behaald, echter is dit toch nog lager dan het resultaat voor drie verborgen toestanden en dus blijft het optimale model voor de dataset van zeven gebaren ook hier gelden. Voor kruisvalidatie is echter wel een duidelijke daling in prestatie te zien bij het gebruik van twintig gebaren. Het is dus noodzakelijk om bij een groter aantal gebaren trainingsdata op te nemen voor iedere gebruiker uit de testset. Hoewel de 85,33% die hier behaald wordt voor de normale test lager ligt dan de 94,29% bekomen bij de dataset van zeven gebaren kunnen deze niet rechtstreeks worden vergeleken. Om ze toch tegenover elkaar af te wegen zullen de random percentages in rekening worden gebracht waarbij wordt nagegaan hoe goed beide presteren in vergelijking met een random classifier. Voor de dataset van zeven gebaren komt het random percentage uit op 14,29% wat wil zeggen dat het optimale model met HMMs 6,6 keer beter presteert dan een random classifier. De dataset van twintig gebaren heeft een random percentage van 5% waardoor het model met HMMs 17 keer betere prestatie oplevert. Er kan dus besloten worden dat de prestatie bij een dataset van twintig gebaren niet per se slechter is dan de prestatie bij een dataset van zeven gebaren ondanks dat er geen rechtstreekse vergelijking mogelijk is. Als laatste zal de confusion matrix voor normale test met drie verborgen toestanden in meer detail bekeken worden. Deze confusion matrix is te zien in Figuur 8.9. In deze confusion matrix stelt de horizontale as het voorspelde gebaar voor terwijl de verticale as het eigenlijke gebaar voorstelt. De waarden die in de matrix terug te vinden zijn stellen het aantal

70 8.3 Dataset 20 gebaren 56 Figuur 8.6: Resultaten bij gebruik van optimale model met vaste fictieve waarde bij verschillende aantallen verborgen toestanden. Figuur 8.7: Resultaten bij gebruik van het optimale model voor zeven gebaren.

71 8.3 Dataset 20 gebaren 57 Figuur 8.8: Resultaten bij gebruik van het optimale model voor twintig gebaren bij verschillende aantallen verborgen toestanden. Figuur 8.9: Confusion matrix van de normale test met optimaal model voor twintig gebaren.

72 8.3 Dataset 20 gebaren 58 detecties voor, wetende dat elk gebaar vijftien keer voorkomt in de dataset wil dit zeggen dat een vijftien op de diagonaal een perfect voorspelbaar gebaar is. Wat meteen opvalt in deze confusion matrix is de onderbreking in de diagonaal bij gebaar elf. Dit gebaar is geen enkele keer correct voorspeld en heeft dus een grote invloed gehad op de totale accuraatheid. Het is wel negen keer als gebaar drie voorspeld wat op de initiële houding bij uitvoering van het gebaar na identieke gebaren zijn. Gebaar drie is hierbij aanraken terwijl gebaar elf gooien voorstelt. Het onderscheid tussen deze gebaren is dus moeilijk te maken door de software aan de hand van de verkregen data omdat die initiële toestand maar van zeer korte duur is. Verder zijn er nog wat afwijkingen te zien die meestal vrij klein zijn en het gevolg zijn van één element van het gebaar dat identiek is zijnde het aantal vingers, de positie of richting van de handen. Zoals bij gebaar twintig dat vier keer verward wordt met gebaar negen doordat de positie van de handen amper verschilt.

73 CONCLUSIE 59 Hoofdstuk 9 Conclusie In deze masterproef werd onderzocht of er goede herkenning van gebaren kan verwezenlijkt worden door gebruik te maken van 3D data. Om tot de 3D data te komen werd gebruik gemaakt van opnames die hebben plaatsgevonden met de Kinect camera. Uit die opnames werden vervolgens het aantal vingers, de positie en richting van de handen alsook de positie en richting van de vingers gehaald met zelf ontworpen software die gebruik maakt van bestaande bibliotheken en raamwerken. Voor het effectief detecteren van de gebaren zijn een aantal HMMs geconstrueerd die dan getraind werden om er testen mee te kunnen uitvoeren. Deze HMMs werden dan ook nog eens gecombineerd om tot hogere accuraatheid bij de detectie van gebaren te komen. Ondanks het vele onderzoek dat reeds is gebeurd omtrent het herkennen van gebaren bleek het gebruik van 3D data meestal achterwege te blijven en aldus was er geen software ter beschikking voor het achterhalen van de data in 3D. Als eerste deel werd er dan ook een eigen vingerdetectie geïmplementeerd die na het detecteren van een gebruiker deze zijn handen uit het beeld moest knippen. Na het uitknippen van de handen diende er nog een aantal stappen te gebeuren om tot de nodige datapunten voor iedere gevonden hand te komen voor training van de HMMs. Naast de vingerdetectie werd er ook nog een smoothing geïmplementeerd en getest om de afwijkingen die optreden ten gevolge van storingen in de videobeelden van de Kinect zo veel mogenlijk te minimaliseren. Dit was allemaal onverwacht werk dat nodig was om verder te kunnen bij het herkennen van gebaren aan de hand van de 3D data. Uit de resultaten is gebleken dat er goede herkenning van gebaren kan plaatsvinden door gebruik te maken van 3D data in HMMs. Hoewel het uitgevoerde werk niet meteen kan vergeleken worden met ander werk duiden de hoge behaalde accuraatheden van 94,27% bij zeven gebaren en 85,33% bij twintig gebaren duidelijk op potentieel voor het gebruiken van 3D data bij het herkennen van gebaren. Het achterwege laten van de positie en richting

74 CONCLUSIE 60 voor de vingers was onverwacht maar deze data bracht duidelijk geen meerwaarde met zich mee bij de herkenning van gebaren door de gevoeligheid aan afwijkingen. De overblijvende data, zijnde aantal vingers, positie en richting van de handen, leidde met een eenvoudige methode van gecombineerde HMMs reeds tot goede resultaten. Dit doet vermoeden dat er nog hogere resultaten bereikt kunnen worden door de data samen onder te brengen in één HMM. Echter brengt dit nog heel wat werk mee omdat het dan een HMM met zowel discrete als continue distributie moet zijn waarvoor nog geen bestaande machine learning bibliotheek ondersteuning bied. Bij het gebruik van twintig gebaren is gebleken dat twee bijna identieke gebaren niet onderscheiden kunnen worden en er steeds naar één van beide gebaren wordt afgedwaald. Hiervoor zijn andere methoden misschien beter geschikt maar in geen enkel van de werken die ik reeds heb bestudeerd heb ik iets terug gevonden over de prestatie bij bijna identieke gebaren. Indien dit gebaar niet aanwezig was en een ander gebaar was gebruikt zou het percentage van correct voorspelde gebaren ongetwijfeld hoger liggen maar door het toeval bij samenstelling van de dataset ben ik toch tot deze conclusie kunnen komen. De overstap van een dataset met zeven gebaren naar een dataset met twintig gebaren heeft aangetoond dat de in deze masterproef gehanteerde methode goed generaliseert naar meerdere gebaren. De gebarenset kan dus worden uitgebreid zonder al te veel in te boeten aan de accuraatheid van detectie. Echter zijn er nog steeds twee punten die een rem zetten op de prestatie hoewel dit niet duidelijk is uit de resultaten. Enerzijds is er de kalibratie van de gebruiker, hoewel deze automatisch gebeurt speelt deze toch mee bij het achterhalen van de data uit de dataset omdat er steeds zekerheid moet zijn van kalibratie. Indien de kalibratie iets langer dan normaal zou duren gaan er een aantal datapunten verloren wat onrechtstreeks invloed kan hebben op de accuraatheid. Anderzijds is er ook de eigen vingerdetectie waarvoor maar een beperkte tijd kon worden uitgetrokken met als gevolg dat deze ongetwijfeld verder geoptimaliseerd kan worden. Om alles nog even samen te vatten ben ik in deze masterproef tot een accurate detectie van gebaren gekomen die gebruik maakt van HMMs met drie verborgen toestanden. De datapunten die hierbij gebruikt worden zijn het aantal vingers, de positie en richting van de handen. Ik ben niet gekomen tot het herkennen van gebaren in ware tijd. Hoewel de geschreven code wel ondersteuning bied voor een live stream van de Kinect waarbij ook de datapunten achterhaald worden dient er voor de herkenning van gebaren nog een fragmentatie in de tijd te gebeuren. Hierbij zou nog heel wat werk komen kijken.

75 ROS (ROBOT OPERATING SYSTEM) 61 Bijlage A ROS (Robot Operating System) In deze appendix is meer informatie over het ROS raamwerk terug te vinden zoals onder meer het opzetten van het raamwerk alsook de Kinect demo s, een lijst met de mogelijke commando s en de werking van de vinger-detectie demo. Veel van de informatie die hier beschreven staat is ook terug te vinden op de ROS webpagina, echter zijn er hier eigen toevoegingen gedaan en vormt het een beknopte leidraad tot het opzetten en gebruiken van de vinger-detectie demo. A.1 Het raamwerk opzetten Om ROS te installeren kan je beginnen vanaf [29], als besturingssysteem raad ik persoonlijk Ubuntu aan. Indien je toch een nieuwere versie van Ubuntu wenst te gebruiken zal je te kampen krijgen met problemen omdat er voor die versies nog geen ondersteuning voorzien werd voor de Kinect demo s. Verder is het uitermate belangrijk om iedere stap van de installatie te volgen zoals op de website aangegeven, indien een stap wordt overgeslagen of vergeten is het lastig om te achterhalen welke stap dit is om het vervolgens recht te zetten. Hier volgt een kort stappenplan voor het installeren van ROS met het oog op gebruik van de Kinect demo s: ˆ Kies een versie, bij voorkeur electric ˆ Installeer het desktop pakket van de door u gekozen ROS versie ˆ Installeer de openni packages met de nodige tools ˆ Installeer een Kinect demo naar keuze Zorg er ook zeker voor dat de werkomgeving in het bashrc bestand is aangepast, de commando s die hiervoor zorgen worden best met root rechten (sudo) uitgevoerd om het

76 A.2 De opbouw van het raamwerk 62 toevoegen te garanderen. Na de installatie zou je in staat moeten zijn om de Kinect demo s uit te voeren op voorwaarde dat de Kinect aangesloten is. A.2 De opbouw van het raamwerk De ROS depository is in de loop der jaren blijven groeien en is vandaag dus zeer groot geworden, daarom hebben we dan ook het desktop pakket geïnstalleerd en niet alles dat in de electric versie is opgenomen. Wat de versies betreft zijn er nog 2 oudere versies alsook twee nieuwere versies beschikbaar, waarbij de nieuwere versies geen ondersteuning bieden voor de Kinect demo s. ROS bevat zeer veel packages die in een aantal stack zijn opgenomen, bovendien kunnen er meerdere stacks aanwezig zijn binnen een ROS versie. De packages omvatten de eigenlijke modules oftewel nodes van ROS die elk hun eigen functionaliteiten bevatten. Om het navigeren tussen en manipuleren van al deze mappen te vereenvoudigen heeft ROS een eigen versie van verscheidene Unix commando s geïmplementeerd. Roscd en rosls zijn de ROS varianten voor cd en ls. Met roscd kan je door de naam van een stack of package mee te geven meteen navigeren naar de hoofdirectory van die stack of package. Rosls laat dan weer toe om de inhoud van de meegegeven stack of package te bekijken zonder heel het pad in te geven. Rosstack en rospack laten toe om naar bepaalde stacks of packages te zoeken door de naam ervan als argument mee te geven. Beide commando,s geven het pad naar de stack of package terug indien deze gevonden is, het is dus een handig vervangmiddel om niet het volledige pad te moeten invullen bij het aanmaken van scripts. Indien gewenst kan er ook andere informatie worden opgevraagd door extra argumenten mee te geven. Rosmake laat toe om een package te compileren door de naam van de package als argument mee te geven, wat veel gebruiksvriendelijker is dan helemaal naar de package te moeten navigeren om deze vervolgens met make te compileren. Rosdep is een belangrijk commando om na te gaan welke dependencies een package heeft, en deze dan ook meteen te compileren. Indien een dependency niet gevonden is zal deze automatisch geïnstalleerd worden op voorwaarde dat het als root wordt uitgevoerd. Rosrun laat toe om een node uit te voeren door de naam ervan mee te geven als argument. Hou er wel rekening mee dat de node bereikbaar moet zijn vanuit ROS PACKAGE PATH en dat deze daarnaast ook reeds gecompileerd is. Indien één van deze voorwaarden niet voldaan is zal er een foutmelding worden gegeven. Rostopic stelt de gebruiker in staat om alle informatie over een topic op te vragen. Dit commando kan ook gebruikt worden om alle topics of een specifieke topic te bekijken. Bij

77 A.2 De opbouw van het raamwerk 63 het opvragen kan de informatie die de topic ontvangt of verzend bekeken worden. Rosnode laat toe om alle draaiende nodes te bekijken, onafhankelijk of deze individueel gestart zijn of via een master node. Er kan ook gekozen worden om meer informatie van een draaiende node te bekijken, deze node te stoppen, pingen en dergelijke. Roscore is een absolute must indien meerdere nodes gebruikt worden. Dit commando zal een aantal benodigde nodes opstarten die de communicatie tussen nodes onderling mogelijk zullen maken. Het uitvoeren van dit commando zal drie ROS elementen starten: ˆ Master De communicatie binnen ROS gebeurt volgens een publisher-subscriber patroon waarbij de ROS master instaat voor het registreren en de naamgeving van alle nodes uit het raamwerk. Zo kunnen nodes met elkaar communiceren en elkaar services aanbieden of deze van elkaar gebruiken. De master is dus noodzakelijk om verschillende nodes connectie te laten maken met elkaar, waarna ze peer-to-peer kunnen communiceren. ˆ Parameter server Deze zogenaamde server is volledig gedeeld met alle nodes om ze in staat te stellen parameters op te slaan of te verkrijgen. Het is echter niet ontworpen voor zware lasten en kan dus best enkel gebruikt worden voor opslag van parameters voor de configuratie van nodes. Volgende parameter types zijn toegestaan: 32-bit integer boolean string double iso8601 datum list base64-geëncodeerde binaire data ˆ Rosout Dit is een node die instaat voor het bijhouden van logs. Roslaunch stelt de gebruiker in staat om een ROS package uit te voeren zonder naar de directory te navigeren. Dit kan enkel gebruikt worden op voorwaarde dat de package in kwestie gevonden kan worden door ROS en dat deze daarnaast ook nog een launch file bevat. Over de launch files volgt later nog meer.

78 A.2 De opbouw van het raamwerk 64 Om al deze commando s en nog anderen te bekijken alsook meer inzicht te krijgen in de opbouw en de werking van het ROS raamwerk is het sterk aangeraden om de tutorials te doorlopen. Deze tutorials zijn terug te vinden op de wiki en laten je zelf een volledige package maken waardoor de structuur en werking ervan meteen duidelijk worden. Naast al deze commando s bevat ROS ook nog een aantal tools om te bekijken wat er gebeurt in één of meerdere nodes of om een visueel beeld te krijgen van de werking van bepaalde nodes. Rxplot geeft een weergave van de data voor één of meerdere ROS topics in de vorm van een grafiek. Rxgraph laat de verschillende nodes zien alsook de relaties tussen elkaar door gebruik te maken van ovalen en connectielijnen. Deze tool kan zeer handig zijn om meer inzicht te krijgen in de nodes die gebruikt worden voor bepaalde packages. In Figuur A.1 zijn de nodes en bijhorende relaties te zien voor de vinger-detectie, bij de lijnen staat de naam van de bijhorende topic en in een ovaal staat de naam van de bijhorende node. Het is meteen duidelijk dat er al een aantal nodes vereist zijn bij de uitvoering van de vinger-detectie demo. Rosbag kan gebruikt worden om een datastroom op te nemen en deze vervolgens ook op te slaan in een bestand met extensie.bag. De opgenomen data kan dan later opnieuw worden afgespeeld door het opgeslagen bestand te gebruiken, hierbij kan onder meer de afspeelsnelheid worden aangepast. Dit is vooral bruikbaar voor het opnemen van data die achteraf regelmatig terug gebruikt zal worden zodat deze niet steeds opnieuw moet worden uitgevoerd maar gewoon kan worden afgespeeld. Rviz is voor deze scriptie een zeer handige tool omdat deze toelaat de omgeving te vizualizeren in 3D op de manier waarop de camera of sensoren deze zien of detecteren. Er kan vrij nauwkeurig worden ingesteld wat er juist zichtbaar moet zijn en wat overbodig is. Bij de vinger-detectie bijvoorbeeld is er niet veel nut aan de omgeving en zijn enkel de handen belangrijk. Rziv kan dan worden ingesteld zodat we enkel dit te zien krijgen zoals zichtbaar is in Figuur A.2. In de figuur zien we hoe de Kinect met behulp van de vinger-detectie code twee handen detecteert, waarvan één thumbs-up en een open hand met de palm naar de Kinect gericht. Nu zullen we nog even kijken naar de van een launch file. Zoals reeds eerder aan bod is gekomen kunnen de launch files uitgevoerd worden via het roslaunch commando, maar wat omvat dergelijke launch file dan precies? Een launch file is geschreven in een vorm van XML en kan zowel nodes als parameters bevatten. De files kunnen bestaan uit een hiërarchy van andere files waarbij een depth-first algoritme wordt toegepast voor de uitvoering, zodat de diepste files eerst uitgevoerd worden. Een parameter

79 A.2 De opbouw van het raamwerk 65 Figuur A.1: Rxgraph van de vinger-detectie uit het ROS raamwerk. beschrijving omvat een naam en waarde voor de parameter waarbij ook substitutieargumenten zoals $ROS PACKAGE PATH gebruikt kunnen worden. Indien meerdere parameters met dezelfde naam gedefinieerd zijn, zal de laatste definitie gebruikt worden als waarde. Nodes bevatten een naam, een package naam, een type en eventueel argumenten. Verder zijn er nog enkele mogelijkheden die beschikbaar zijn voor de launch files waaronder if en unless. If zal een tag, zijnde het parameters of nodes, in rekening brengen indien aan een bepaalde voorwaarde voldaan is terwijl deze met unless uitgesloten kunnen worden door aan de voorwaarde te voldoen. Hoewel een launch file voornamelijk bestaat uit parameters en nodes kunnen er daarnaast ook nog andere tags gedefinieerd worden: ˆ Launch is het hoofdelement waarbinnen alle andere tags gedefinieerd worden. ˆ Machine definieert het toestel waar de nodes uitgevoerd kunnen worden, maar is niet toepasselijk aangezien we lokaal zullen werken. ˆ Include wordt gebruikt om andere launch files te integreren in de huidige launch file. ˆ Remap laat naamveranderingen toe voor argumenten van de ROS node. ˆ Env gebruikt men om variabelen in te stellen voor nodes die gestart zullen worden. ˆ Rosparam kan parameters ophalen uit en opslaan op de parameter server, die zoals eerder vermeld gestart wordt door roscore.

80 A.2 De opbouw van het raamwerk 66 Figuur A.2: Rviz voorbeeld van de vinger-detectie uit het ROS raamwerk. ˆ Group laat toe om groepen te maken in een launchfile zodat instellingen toegepast worden toegepast op een groep van nodes. ˆ Test is in principe hetzelde als een node tag maar benadrukt specifiek dat het om een te testen node gaat. Hou er wel rekening mee dat de tags enkel kleine letters bevatten en de hoofdletters hier enkel waren toegevoegd om de opmaak proper te houden. Ter illustratie zullen we nu de launch file voor vinger-detectie bekijken aan de hand van een korte toelichting. <launch> <! launch k i n e c t s e n s o r > <i n c l u d e f i l e = $ ( f i n d openni camera )/ launch / openni node. launch /> <! run hand d e t e c t i o n > <node pkg= h a n d i n t e r a c t i o n type= d e t e c t s k e l h a n d s name= handdetector output= s c r e e n respawn= true /> <! This reduces the point cloud r e s o l u t i o n to 320 x240, f o r f a s t hand

SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead

SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead 7.1 Exploring Combinations of Ten Look at these cubes. 2. Color some of the cubes to make three parts. Then write a matching sentence. 10 What addition sentence matches the picture? How else could you

Nadere informatie

Add the standing fingers to get the tens and multiply the closed fingers to get the units.

Add the standing fingers to get the tens and multiply the closed fingers to get the units. Digit work Here's a useful system of finger reckoning from the Middle Ages. To multiply $6 \times 9$, hold up one finger to represent the difference between the five fingers on that hand and the first

Nadere informatie

S e v e n P h o t o s f o r O A S E. K r i j n d e K o n i n g

S e v e n P h o t o s f o r O A S E. K r i j n d e K o n i n g S e v e n P h o t o s f o r O A S E K r i j n d e K o n i n g Even with the most fundamental of truths, we can have big questions. And especially truths that at first sight are concrete, tangible and proven

Nadere informatie

De grondbeginselen der Nederlandsche spelling / Regeling der spelling voor het woordenboek der Nederlandsche taal (Dutch Edition)

De grondbeginselen der Nederlandsche spelling / Regeling der spelling voor het woordenboek der Nederlandsche taal (Dutch Edition) De grondbeginselen der Nederlandsche spelling / Regeling der spelling voor het woordenboek der Nederlandsche taal (Dutch Edition) L. A. te Winkel Click here if your download doesn"t start automatically

Nadere informatie

Eye Feature Detection Towards Automatic Strabismus Screening

Eye Feature Detection Towards Automatic Strabismus Screening Eye Feature Detection Towards Automatic Strabismus Screening Ken Allen, Khanh Nguyen Gettysburg College What is strabismus? Eye defect that causes eyes to look in two different directions If left untreated,

Nadere informatie

ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK EN BEHANDELING (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK EN BEHANDELING (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM Read Online and Download Ebook ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK EN BEHANDELING (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM DOWNLOAD EBOOK : ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK STAFLEU

Nadere informatie

MyDHL+ Van Non-Corporate naar Corporate

MyDHL+ Van Non-Corporate naar Corporate MyDHL+ Van Non-Corporate naar Corporate Van Non-Corporate naar Corporate In MyDHL+ is het mogelijk om meerdere gebruikers aan uw set-up toe te voegen. Wanneer er bijvoorbeeld meerdere collega s van dezelfde

Nadere informatie

Non Diffuse Point Based Global Illumination

Non Diffuse Point Based Global Illumination Non Diffuse Point Based Global Illumination Karsten Daemen Thesis voorgedragen tot het behalen van de graad van Master of Science in de ingenieurswetenschappen: computerwetenschappen Promotor: Prof. dr.

Nadere informatie

04/11/2013. Sluitersnelheid: 1/50 sec = 0.02 sec. Frameduur= 2 x sluitersnelheid= 2/50 = 1/25 = 0.04 sec. Framerate= 1/0.

04/11/2013. Sluitersnelheid: 1/50 sec = 0.02 sec. Frameduur= 2 x sluitersnelheid= 2/50 = 1/25 = 0.04 sec. Framerate= 1/0. Onderwerpen: Scherpstelling - Focusering Sluitersnelheid en framerate Sluitersnelheid en belichting Driedimensionale Arthrokinematische Mobilisatie Cursus Klinische Video/Foto-Analyse Avond 3: Scherpte

Nadere informatie

Engels op Niveau A2 Workshops Woordkennis 1

Engels op Niveau A2 Workshops Woordkennis 1 A2 Workshops Woordkennis 1 A2 Workshops Woordkennis 1 A2 Woordkennis 1 Bestuderen Hoe leer je 2000 woorden? Als je een nieuwe taal wilt spreken en schrijven, heb je vooral veel nieuwe woorden nodig. Je

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE. Toets Inleiding Kansrekening 1 8 februari 2010

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE. Toets Inleiding Kansrekening 1 8 februari 2010 FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Toets Inleiding Kansrekening 1 8 februari 2010 Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe. Als je een onderdeel

Nadere informatie

Introductie in flowcharts

Introductie in flowcharts Introductie in flowcharts Flow Charts Een flow chart kan gebruikt worden om: Processen definieren en analyseren. Een beeld vormen van een proces voor analyse, discussie of communicatie. Het definieren,

Nadere informatie

Luister alsjeblieft naar een opname als je de vragen beantwoordt of speel de stukken zelf!

Luister alsjeblieft naar een opname als je de vragen beantwoordt of speel de stukken zelf! Martijn Hooning COLLEGE ANALYSE OPDRACHT 1 9 september 2009 Hierbij een paar vragen over twee stukken die we deze week en vorige week hebben besproken: Mondnacht van Schumann, en het eerste deel van het

Nadere informatie

Pesten onder Leerlingen met Autisme Spectrum Stoornissen op de Middelbare School: de Participantrollen en het Verband met de Theory of Mind.

Pesten onder Leerlingen met Autisme Spectrum Stoornissen op de Middelbare School: de Participantrollen en het Verband met de Theory of Mind. Pesten onder Leerlingen met Autisme Spectrum Stoornissen op de Middelbare School: de Participantrollen en het Verband met de Theory of Mind. Bullying among Students with Autism Spectrum Disorders in Secondary

Nadere informatie

Security Les 1 Leerling: Marno Brink Klas: 41B Docent: Meneer Vagevuur

Security Les 1 Leerling: Marno Brink Klas: 41B Docent: Meneer Vagevuur Security Les 1 Leerling: Klas: Docent: Marno Brink 41B Meneer Vagevuur Voorwoord: In dit document gaan we beginnen met de eerste security les we moeten via http://www.politiebronnen.nl moeten we de IP

Nadere informatie

Classification of triangles

Classification of triangles Classification of triangles A triangle is a geometrical shape that is formed when 3 non-collinear points are joined. The joining line segments are the sides of the triangle. The angles in between the sides

Nadere informatie

Chapter 4 Understanding Families. In this chapter, you will learn

Chapter 4 Understanding Families. In this chapter, you will learn Chapter 4 Understanding Families In this chapter, you will learn Topic 4-1 What Is a Family? In this topic, you will learn about the factors that make the family such an important unit, as well as Roles

Nadere informatie

COGNITIEVE DISSONANTIE EN ROKERS COGNITIVE DISSONANCE AND SMOKERS

COGNITIEVE DISSONANTIE EN ROKERS COGNITIVE DISSONANCE AND SMOKERS COGNITIEVE DISSONANTIE EN ROKERS Gezondheidsgedrag als compensatie voor de schadelijke gevolgen van roken COGNITIVE DISSONANCE AND SMOKERS Health behaviour as compensation for the harmful effects of smoking

Nadere informatie

Four-card problem. Input

Four-card problem. Input Four-card problem The four-card problem (also known as the Wason selection task) is a logic puzzle devised by Peter Cathcart Wason in 1966. It is one of the most famous tasks in the study of deductive

Nadere informatie

Media en creativiteit. Winter jaar vier Werkcollege 7

Media en creativiteit. Winter jaar vier Werkcollege 7 Media en creativiteit Winter jaar vier Werkcollege 7 Kwartaaloverzicht winter Les 1 Les 2 Les 3 Les 4 Les 5 Les 6 Les 7 Les 8 Opbouw scriptie Keuze onderwerp Onderzoeksvraag en deelvragen Bespreken onderzoeksvragen

Nadere informatie

Summary 124

Summary 124 Summary Summary 124 Summary Summary Corporate social responsibility and current legislation encourage the employment of people with disabilities in inclusive organizations. However, people with disabilities

Nadere informatie

Beïnvloedt Gentle Teaching Vaardigheden van Begeleiders en Companionship en Angst bij Verstandelijk Beperkte Cliënten?

Beïnvloedt Gentle Teaching Vaardigheden van Begeleiders en Companionship en Angst bij Verstandelijk Beperkte Cliënten? Beïnvloedt Gentle Teaching Vaardigheden van Begeleiders en Companionship en Angst bij Verstandelijk Beperkte Cliënten? Does Gentle Teaching have Effect on Skills of Caregivers and Companionship and Anxiety

Nadere informatie

(1) De hoofdfunctie van ons gezelschap is het aanbieden van onderwijs. (2) Ons gezelschap is er om kunsteducatie te verbeteren

(1) De hoofdfunctie van ons gezelschap is het aanbieden van onderwijs. (2) Ons gezelschap is er om kunsteducatie te verbeteren (1) De hoofdfunctie van ons gezelschap is het aanbieden van onderwijs (2) Ons gezelschap is er om kunsteducatie te verbeteren (3) Ons gezelschap helpt gemeenschappen te vormen en te binden (4) De producties

Nadere informatie

LDA Topic Modeling. Informa5ekunde als hulpwetenschap. 9 maart 2015

LDA Topic Modeling. Informa5ekunde als hulpwetenschap. 9 maart 2015 LDA Topic Modeling Informa5ekunde als hulpwetenschap 9 maart 2015 LDA Voor de pauze: Wat is LDA? Wat kan je er mee? Hoe werkt het (Gibbs sampling)? Na de pauze Achterliggende concepten à Dirichlet distribu5e

Nadere informatie

Sociale Cognitie bij Psychisch Gezonde Volwassenen

Sociale Cognitie bij Psychisch Gezonde Volwassenen Sociale Cognitie bij Psychisch Gezonde Volwassenen Onderzoek met het Virtuele Lab Social Cognition in Psychologically Healthy Adults Research with the Virtual Laboratory Anja I. Rebber Studentnummer: 838902147

Nadere informatie

B1 Woordkennis: Spelling

B1 Woordkennis: Spelling B1 Woordkennis: Spelling Bestuderen Inleiding Op B1 niveau gaan we wat meer aandacht schenken aan spelling. Je mag niet meer zoveel fouten maken als op A1 en A2 niveau. We bespreken een aantal belangrijke

Nadere informatie

Academisch schrijven Inleiding

Academisch schrijven Inleiding - In this essay/paper/thesis I shall examine/investigate/evaluate/analyze Algemene inleiding van het werkstuk In this essay/paper/thesis I shall examine/investigate/evaluate/analyze To answer this question,

Nadere informatie

Karen J. Rosier - Brattinga. Eerste begeleider: dr. Arjan Bos Tweede begeleider: dr. Ellin Simon

Karen J. Rosier - Brattinga. Eerste begeleider: dr. Arjan Bos Tweede begeleider: dr. Ellin Simon Zelfwaardering en Angst bij Kinderen: Zijn Globale en Contingente Zelfwaardering Aanvullende Voorspellers van Angst bovenop Extraversie, Neuroticisme en Gedragsinhibitie? Self-Esteem and Fear or Anxiety

Nadere informatie

01/ M-Way. cables

01/ M-Way. cables 01/ 2015 M-Way cables M-WaY Cables There are many ways to connect devices and speakers together but only few will connect you to the music. My Way of connecting is just one of many but proved it self over

Nadere informatie

MyDHL+ ProView activeren in MyDHL+

MyDHL+ ProView activeren in MyDHL+ MyDHL+ ProView activeren in MyDHL+ ProView activeren in MyDHL+ In MyDHL+ is het mogelijk om van uw zendingen, die op uw accountnummer zijn aangemaakt, de status te zien. Daarnaast is het ook mogelijk om

Nadere informatie

Although eventually I became a writer I have struggled my entire life with reading and

Although eventually I became a writer I have struggled my entire life with reading and Although eventually I became a writer I have struggled my entire life with reading and writing. Out of first hand I can tell you how frustrating it is to struggle with words. Even though I am able to recognize

Nadere informatie

The genesis of the game is unclear. Possibly, dominoes originates from China and the stones were brought here by Marco Polo, but this is uncertain.

The genesis of the game is unclear. Possibly, dominoes originates from China and the stones were brought here by Marco Polo, but this is uncertain. Domino tiles Dominoes is a game played with rectangular domino 'tiles'. Today the tiles are often made of plastic or wood, but in the past, they were made of real stone or ivory. They have a rectangle

Nadere informatie

L.Net s88sd16-n aansluitingen en programmering.

L.Net s88sd16-n aansluitingen en programmering. De L.Net s88sd16-n wordt via één van de L.Net aansluitingen aangesloten op de LocoNet aansluiting van de centrale, bij een Intellibox of Twin-Center is dat de LocoNet-T aansluiting. L.Net s88sd16-n aansluitingen

Nadere informatie

Meetkunde en Lineaire Algebra

Meetkunde en Lineaire Algebra Hoofdstuk 1 Meetkunde en Lineaire Algebra Vraag 1.1 Het trapoppervlak is een afwikkelbaar oppervlak met oneindig veel singuliere punten. Vraag 1.2 Het schroefoppervlak is een afwikkelbaar oppervlak met

Nadere informatie

Het Effect van Verschil in Sociale Invloed van Ouders en Vrienden op het Alcoholgebruik van Adolescenten.

Het Effect van Verschil in Sociale Invloed van Ouders en Vrienden op het Alcoholgebruik van Adolescenten. Het Effect van Verschil in Sociale Invloed van Ouders en Vrienden op het Alcoholgebruik van Adolescenten. The Effect of Difference in Peer and Parent Social Influences on Adolescent Alcohol Use. Nadine

Nadere informatie

Puzzle. Fais ft. Afrojack Niveau 3a Song 6 Lesson A Worksheet. a Lees de omschrijvingen. Zet de Engelse woorden in de puzzel.

Puzzle. Fais ft. Afrojack Niveau 3a Song 6 Lesson A Worksheet. a Lees de omschrijvingen. Zet de Engelse woorden in de puzzel. Puzzle a Lees de omschrijvingen. Zet de Engelse woorden in de puzzel. een beloning voor de winnaar iemand die piano speelt een uitvoering 4 wat je wil gaan doen; voornemens 5 niet dezelfde 6 deze heb je

Nadere informatie

Uitgebreid eindwerkvoorstel Lokaliseren van personen en objecten met behulp van camera s

Uitgebreid eindwerkvoorstel Lokaliseren van personen en objecten met behulp van camera s Uitgebreid eindwerkvoorstel Lokaliseren van personen en objecten met behulp van camera s Sofie De Cooman 21 December 2006 Stagebedrijf: Interne begeleider: Externe begeleider: BarcoView Koen Van De Wiele

Nadere informatie

De ondernemende psychotherapeut (Dutch Edition)

De ondernemende psychotherapeut (Dutch Edition) De ondernemende psychotherapeut (Dutch Edition) Dick Bouman Click here if your download doesn"t start automatically De ondernemende psychotherapeut (Dutch Edition) Dick Bouman De ondernemende psychotherapeut

Nadere informatie

Taco Schallenberg Acorel

Taco Schallenberg Acorel Taco Schallenberg Acorel Inhoudsopgave Introductie Kies een Platform Get to Know the Jargon Strategie Bedrijfsproces Concurrenten User Experience Marketing Over Acorel Introductie THE JARGON THE JARGON

Nadere informatie

Preschool Kindergarten

Preschool Kindergarten Preschool Kindergarten Objectives Students will recognize the values of numerals 1 to 10. Students will use objects to solve addition problems with sums from 1 to 10. Materials Needed Large number cards

Nadere informatie

0515 DUTCH (FOREIGN LANGUAGE)

0515 DUTCH (FOREIGN LANGUAGE) UNIVERSITY OF CAMBRIDGE INTERNATIONAL EXAMINATIONS International General Certificate of Secondary Education MARK SCHEME for the May/June 2011 question paper for the guidance of teachers 0515 DUTCH (FOREIGN

Nadere informatie

CTI SUITE TSP DETAILS

CTI SUITE TSP DETAILS CTI SUITE TSP DETAILS TAPI allows an application to access telephony services provided by a telecom PABX. In order to implement its access to ETRADEAL, a TAPI interface has been developed by Etrali. As

Nadere informatie

Main language Dit is de basiswoordenschat. Deze woorden moeten de leerlingen zowel passief als actief kennen.

Main language Dit is de basiswoordenschat. Deze woorden moeten de leerlingen zowel passief als actief kennen. Lesbrief Les 2.1: My family Main language Dit is de basiswoordenschat. Deze woorden moeten de leerlingen zowel passief als actief kennen. Nouns: brother, sister, cousin, mother, father, aunt, uncle, grandmother,

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Bewijzen en Technieken 1 7 januari 211, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe.

Nadere informatie

The colour of a pixel in a bit map picture can be presented in different ways. For this assignment, we distinguish two categories:

The colour of a pixel in a bit map picture can be presented in different ways. For this assignment, we distinguish two categories: Bitmap conversion A bit map picture is exactly what the name makes one suspect: a sequence of bits (0 or 1) that together represent a digital photo. The picture consists of a matrix (rectangle grid) of

Nadere informatie

Emotioneel Belastend Werk, Vitaliteit en de Mogelijkheid tot Leren: The Manager as a Resource.

Emotioneel Belastend Werk, Vitaliteit en de Mogelijkheid tot Leren: The Manager as a Resource. Open Universiteit Klinische psychologie Masterthesis Emotioneel Belastend Werk, Vitaliteit en de Mogelijkheid tot Leren: De Leidinggevende als hulpbron. Emotional Job Demands, Vitality and Opportunities

Nadere informatie

De Invloed van Innovatiekenmerken op de Intentie van Leerkrachten. een Lespakket te Gebruiken om Cyberpesten te Voorkomen of te.

De Invloed van Innovatiekenmerken op de Intentie van Leerkrachten. een Lespakket te Gebruiken om Cyberpesten te Voorkomen of te. De Invloed van Innovatiekenmerken op de Intentie van Leerkrachten een Lespakket te Gebruiken om Cyberpesten te Voorkomen of te Stoppen The Influence of the Innovation Characteristics on the Intention of

Nadere informatie

Bijlage 2: Informatie met betrekking tot goede praktijkvoorbeelden in Londen, het Verenigd Koninkrijk en Queensland

Bijlage 2: Informatie met betrekking tot goede praktijkvoorbeelden in Londen, het Verenigd Koninkrijk en Queensland Bijlage 2: Informatie met betrekking tot goede praktijkvoorbeelden in Londen, het Verenigd Koninkrijk en Queensland 1. Londen In Londen kunnen gebruikers van een scootmobiel contact opnemen met een dienst

Nadere informatie

Interface tussen Stuurbediening en Sony autoaudio

Interface tussen Stuurbediening en Sony autoaudio The information in this document is in Dutch, English version follows later in this document Interface tussen Stuurbediening en Sony autoaudio LET OP! HOEWEL DE UITERSTE ZORGVULDIGHEID IS BETRACHT BIJ

Nadere informatie

Opgave 2 Geef een korte uitleg van elk van de volgende concepten: De Yield-to-Maturity of a coupon bond.

Opgave 2 Geef een korte uitleg van elk van de volgende concepten: De Yield-to-Maturity of a coupon bond. Opgaven in Nederlands. Alle opgaven hebben gelijk gewicht. Opgave 1 Gegeven is een kasstroom x = (x 0, x 1,, x n ). Veronderstel dat de contante waarde van deze kasstroom gegeven wordt door P. De bijbehorende

Nadere informatie

Appendix A: List of variables with corresponding questionnaire items (in English) used in chapter 2

Appendix A: List of variables with corresponding questionnaire items (in English) used in chapter 2 167 Appendix A: List of variables with corresponding questionnaire items (in English) used in chapter 2 Task clarity 1. I understand exactly what the task is 2. I understand exactly what is required of

Nadere informatie

Lichamelijke factoren als voorspeller voor psychisch. en lichamelijk herstel bij anorexia nervosa. Physical factors as predictors of psychological and

Lichamelijke factoren als voorspeller voor psychisch. en lichamelijk herstel bij anorexia nervosa. Physical factors as predictors of psychological and Lichamelijke factoren als voorspeller voor psychisch en lichamelijk herstel bij anorexia nervosa Physical factors as predictors of psychological and physical recovery of anorexia nervosa Liesbeth Libbers

Nadere informatie

Verklaring van het beweeggedrag van ouderen door determinanten van. The explanation of the physical activity of elderly by determinants of

Verklaring van het beweeggedrag van ouderen door determinanten van. The explanation of the physical activity of elderly by determinants of Verklaring van het beweeggedrag van ouderen door determinanten van het I-change Model The explanation of the physical activity of elderly by determinants of the I-change Model Hilbrand Kuit Eerste begeleider:

Nadere informatie

Firewall van de Speedtouch 789wl volledig uitschakelen?

Firewall van de Speedtouch 789wl volledig uitschakelen? Firewall van de Speedtouch 789wl volledig uitschakelen? De firewall van de Speedtouch 789 (wl) kan niet volledig uitgeschakeld worden via de Web interface: De firewall blijft namelijk op stateful staan

Nadere informatie

Effecten van een op MBSR gebaseerde training van. hospicemedewerkers op burnout, compassionele vermoeidheid en

Effecten van een op MBSR gebaseerde training van. hospicemedewerkers op burnout, compassionele vermoeidheid en Effecten van een op MBSR gebaseerde training van hospicemedewerkers op burnout, compassionele vermoeidheid en compassionele tevredenheid. Een pilot Effects of a MBSR based training program of hospice caregivers

Nadere informatie

HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM READ ONLINE AND DOWNLOAD EBOOK : HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN Click button to download this ebook READ ONLINE AND DOWNLOAD

Nadere informatie

Verschil in Perceptie over Opvoeding tussen Ouders en Adolescenten en Alcoholgebruik van Adolescenten

Verschil in Perceptie over Opvoeding tussen Ouders en Adolescenten en Alcoholgebruik van Adolescenten Verschil in Perceptie over Opvoeding tussen Ouders en Adolescenten en Alcoholgebruik van Adolescenten Difference in Perception about Parenting between Parents and Adolescents and Alcohol Use of Adolescents

Nadere informatie

The upside down Louisa tutorial by Dorothée: Noortjeprullemie.blogspot.be Written for Compagnie M.: m.com

The upside down Louisa tutorial by Dorothée: Noortjeprullemie.blogspot.be Written for Compagnie M.:  m.com The upside down Louisa tutorial by Dorothée: Noortjeprullemie.blogspot.be Written for Compagnie M.: www.compagnie- m.com Dorothée heeft een unieke Compagnie M. hack gemaakt: de Louisa op zijn kop. Als

Nadere informatie

Functioneren van een Kind met Autisme. M.I. Willems. Open Universiteit

Functioneren van een Kind met Autisme. M.I. Willems. Open Universiteit Onderzoek naar het Effect van de Aanwezigheid van een Hond op het Alledaags Functioneren van een Kind met Autisme M.I. Willems Open Universiteit Naam student: Marijke Willems Postcode en Woonplaats: 6691

Nadere informatie

The first line of the input contains an integer $t \in \mathbb{n}$. This is followed by $t$ lines of text. This text consists of:

The first line of the input contains an integer $t \in \mathbb{n}$. This is followed by $t$ lines of text. This text consists of: Document properties Most word processors show some properties of the text in a document, such as the number of words or the number of letters in that document. Write a program that can determine some of

Nadere informatie

Quick start guide. Powerbank MI Mah. Follow Fast All rights reserved. Page 1

Quick start guide. Powerbank MI Mah. Follow Fast All rights reserved. Page 1 Quick start guide Powerbank MI 16.000 Mah Follow Fast 2016 - All rights reserved. Page 1 ENGLISH The Mi 16000 Power Bank is a very good backup option for those on the move. It can keep you going for days

Nadere informatie

Vergaderen in het Engels

Vergaderen in het Engels Vergaderen in het Engels In dit artikel beschrijven we verschillende situaties die zich kunnen voordoen tijdens een business meeting. Na het doorlopen van deze zinnen zal je genoeg kennis hebben om je

Nadere informatie

Keuzetwijfels in de Emerging Adulthood rondom Studie- en Partnerkeuze. in Relatie tot Depressie

Keuzetwijfels in de Emerging Adulthood rondom Studie- en Partnerkeuze. in Relatie tot Depressie 1 Keuzetwijfels in de Keuzetwijfels in de Emerging Adulthood rondom Studie- en Partnerkeuze in Relatie tot Depressie Open Universiteit Nederland Masterscriptie (S58337) Naam: Ilse Meijer Datum: juli 2011

Nadere informatie

Comics FILE 4 COMICS BK 2

Comics FILE 4 COMICS BK 2 Comics FILE 4 COMICS BK 2 The funny characters in comic books or animation films can put smiles on people s faces all over the world. Wouldn t it be great to create your own funny character that will give

Nadere informatie

!!!! Wild!Peacock!Omslagdoek!! Vertaling!door!Eerlijke!Wol.!! Het!garen!voor!dit!patroon!is!te!verkrijgen!op! Benodigdheden:!!

!!!! Wild!Peacock!Omslagdoek!! Vertaling!door!Eerlijke!Wol.!! Het!garen!voor!dit!patroon!is!te!verkrijgen!op!  Benodigdheden:!! WildPeacockOmslagdoek VertalingdoorEerlijkeWol. Hetgarenvoorditpatroonisteverkrijgenopwww.eerlijkewol.nl Benodigdheden: 4strengenWildPeacockRecycledSilkYarn rondbreinaaldnr8(jekuntnatuurlijkookgewonebreinaaldengebruiken,maar

Nadere informatie

De Relatie tussen Werkdruk, Pesten op het Werk, Gezondheidsklachten en Verzuim

De Relatie tussen Werkdruk, Pesten op het Werk, Gezondheidsklachten en Verzuim De Relatie tussen Werkdruk, Pesten op het Werk, Gezondheidsklachten en Verzuim The Relationship between Work Pressure, Mobbing at Work, Health Complaints and Absenteeism Agnes van der Schuur Eerste begeleider:

Nadere informatie

Travel Survey Questionnaires

Travel Survey Questionnaires Travel Survey Questionnaires Prot of Rotterdam and TU Delft, 16 June, 2009 Introduction To improve the accessibility to the Rotterdam Port and the efficiency of the public transport systems at the Rotterdam

Nadere informatie

i(i + 1) = xy + y = x + 1, y(1) = 2.

i(i + 1) = xy + y = x + 1, y(1) = 2. Kenmerk : Leibniz/toetsen/Re-Exam-Math A + B-45 Course : Mathematics A + B (Leibniz) Date : November 7, 204 Time : 45 645 hrs Motivate all your answers The use of electronic devices is not allowed [4 pt]

Nadere informatie

Relatie tussen Persoonlijkheid, Opleidingsniveau, Leeftijd, Geslacht en Korte- en Lange- Termijn Seksuele Strategieën

Relatie tussen Persoonlijkheid, Opleidingsniveau, Leeftijd, Geslacht en Korte- en Lange- Termijn Seksuele Strategieën Relatie tussen Persoonlijkheid, Opleidingsniveau, Leeftijd, Geslacht en Korte- en Lange- Termijn Seksuele Strategieën The Relation between Personality, Education, Age, Sex and Short- and Long- Term Sexual

Nadere informatie

Ontpopping. ORGACOM Thuis in het Museum

Ontpopping. ORGACOM Thuis in het Museum Ontpopping Veel deelnemende bezoekers zijn dit jaar nog maar één keer in het Van Abbemuseum geweest. De vragenlijst van deze mensen hangt Orgacom in een honingraatpatroon. Bezoekers die vaker komen worden

Nadere informatie

De Relatie Tussen de Gehanteerde Copingstijl en Pesten op het Werk. The Relation Between the Used Coping Style and Bullying at Work.

De Relatie Tussen de Gehanteerde Copingstijl en Pesten op het Werk. The Relation Between the Used Coping Style and Bullying at Work. De Relatie Tussen de Gehanteerde Copingstijl en Pesten op het Werk The Relation Between the Used Coping Style and Bullying at Work Merijn Daerden Studentnummer: 850225144 Werkstuk: Empirisch afstudeeronderzoek:

Nadere informatie

De causale Relatie tussen Intimiteit en Seksueel verlangen en de. modererende invloed van Sekse en Relatietevredenheid op deze relatie

De causale Relatie tussen Intimiteit en Seksueel verlangen en de. modererende invloed van Sekse en Relatietevredenheid op deze relatie Causale Relatie tussen intimiteit en seksueel verlangen 1 De causale Relatie tussen Intimiteit en Seksueel verlangen en de modererende invloed van Sekse en Relatietevredenheid op deze relatie The causal

Nadere informatie

UNIT 2 Begeleiding. Coaching proces, Instrumenten and vaardigheden voor Coacing en mobiliteit for Coaching and Mobility

UNIT 2 Begeleiding. Coaching proces, Instrumenten and vaardigheden voor Coacing en mobiliteit for Coaching and Mobility UNIT 2 Begeleiding Coaching proces, Instrumenten and vaardigheden voor Coacing en mobiliteit for Coaching and Mobility 1 2 Wat is coaching? Coaching is een methode voor het ontwikkelen van potentieel

Nadere informatie

Borstkanker: Stichting tegen Kanker (Dutch Edition)

Borstkanker: Stichting tegen Kanker (Dutch Edition) Borstkanker: Stichting tegen Kanker (Dutch Edition) Stichting tegen Kanker Click here if your download doesn"t start automatically Borstkanker: Stichting tegen Kanker (Dutch Edition) Stichting tegen Kanker

Nadere informatie

DALISOFT. 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool. Connect the TDS20620V2. Start DALISOFT

DALISOFT. 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool. Connect the TDS20620V2. Start DALISOFT TELETASK Handbook Multiple DoIP Central units DALISOFT 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool Connect the TDS20620V2 If there is a TDS13620 connected to the DALI-bus, remove it first.

Nadere informatie

Fysieke Activiteit bij 50-plussers. The Relationship between Self-efficacy, Intrinsic Motivation and. Physical Activity among Adults Aged over 50

Fysieke Activiteit bij 50-plussers. The Relationship between Self-efficacy, Intrinsic Motivation and. Physical Activity among Adults Aged over 50 De relatie tussen eigen-effectiviteit 1 De Relatie tussen Eigen-effectiviteit, Intrinsieke Motivatie en Fysieke Activiteit bij 50-plussers The Relationship between Self-efficacy, Intrinsic Motivation and

Nadere informatie

Meetkunde en Lineaire Algebra

Meetkunde en Lineaire Algebra Hoofdstuk 1 Meetkunde en Lineaire Algebra Vraag 1.1 Het trapoppervlak is een afwikkelbaar oppervlak met oneindig veel singuliere punten. vals Vraag 1.2 Het schroefoppervlak is een afwikkelbaar oppervlak

Nadere informatie

28/10/2012. Onderwerpen: Scherpstelling - Focusering Sluitersnelheid en framerate. Sluitersnelheid en belichting

28/10/2012. Onderwerpen: Scherpstelling - Focusering Sluitersnelheid en framerate. Sluitersnelheid en belichting 8/0/0 Onderwerpen: Sluitersnelheid en framerate Sluitersnelheid en belichting Driedimensionale Arthrokinematische Mobilisatie Cursus Klinische Video/Foto-Analyse Avond 3: Scherpte en Scherptediepte www.damcursus.nl

Nadere informatie

Contextanalyse. Patrick v/d Vlist

Contextanalyse. Patrick v/d Vlist Contextanalyse Patrick v/d Vlist Contextanalyse Patrick v/d Vlist Krimpen ad IJsel 10-01-2016 Verdoold Installatiebedrijf Voorwoord Ik heb dit rapport geschreven naar aanleiding van een communicatieopdracht

Nadere informatie

VAN HET VAGEVUUR IN DE HEL PDF

VAN HET VAGEVUUR IN DE HEL PDF VAN HET VAGEVUUR IN DE HEL PDF ==> Download: VAN HET VAGEVUUR IN DE HEL PDF VAN HET VAGEVUUR IN DE HEL PDF - Are you searching for Van Het Vagevuur In De Hel Books? Now, you will be happy that at this

Nadere informatie

OPEN TRAINING. Onderhandelingen met leveranciers voor aankopers. Zeker stellen dat je goed voorbereid aan de onderhandelingstafel komt.

OPEN TRAINING. Onderhandelingen met leveranciers voor aankopers. Zeker stellen dat je goed voorbereid aan de onderhandelingstafel komt. OPEN TRAINING Onderhandelingen met leveranciers voor aankopers Zeker stellen dat je goed voorbereid aan de onderhandelingstafel komt. Philip Meyers Making sure to come well prepared at the negotiation

Nadere informatie

Dutch survival kit. Vragen hoe het gaat en reactie Asking how it s going and reaction. Met elkaar kennismaken Getting to know each other

Dutch survival kit. Vragen hoe het gaat en reactie Asking how it s going and reaction. Met elkaar kennismaken Getting to know each other Dutch survival kit This Dutch survival kit contains phrases that can be helpful when living and working in the Netherlands. There is an overview of useful sentences and phrases in Dutch with an English

Nadere informatie

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica. Examination 2DL04 Friday 16 november 2007, hours.

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica. Examination 2DL04 Friday 16 november 2007, hours. TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica Examination 2DL04 Friday 16 november 2007, 14.00-17.00 hours. De uitwerkingen van de opgaven dienen duidelijk geformuleerd en overzichtelijk

Nadere informatie

Running Head: INVLOED VAN ASE-DETERMINANTEN OP INTENTIE CONTACT 1

Running Head: INVLOED VAN ASE-DETERMINANTEN OP INTENTIE CONTACT 1 Running Head: INVLOED VAN ASE-DETERMINANTEN OP INTENTIE CONTACT 1 Relatie tussen Attitude, Sociale Invloed en Self-efficacy en Intentie tot Contact tussen Ouders en Leerkrachten bij Signalen van Pesten

Nadere informatie

Unlocking the potential of public available gene expression data for large-scale analysis

Unlocking the potential of public available gene expression data for large-scale analysis Faculty of Science and Bio-engineering Sciences Department of Computer Science Computational Modeling Lab Unlocking the potential of public available gene expression data for large-scale analysis Jonatan

Nadere informatie

9 daagse Mindful-leSs 3 stappen plan training

9 daagse Mindful-leSs 3 stappen plan training 9 daagse Mindful-leSs 3 stappen plan training In 9 dagen jezelf volledig op de kaart zetten Je energie aangevuld en in staat om die batterij op peil te houden. Aan het eind heb jij Een goed gevoel in je

Nadere informatie

De Relatie tussen Betrokkenheid bij Pesten en Welbevinden en de Invloed van Sociale Steun en. Discrepantie

De Relatie tussen Betrokkenheid bij Pesten en Welbevinden en de Invloed van Sociale Steun en. Discrepantie De Relatie tussen Betrokkenheid bij Pesten en Welbevinden en de Invloed van Sociale Steun en Discrepantie The Relationship between Involvement in Bullying and Well-Being and the Influence of Social Support

Nadere informatie

THE WORK HET WERK HARALD BERKHOUT

THE WORK HET WERK HARALD BERKHOUT THE WORK During the twenty years of its existence Studio Berkhout has evolved into the number one studio specialized in still life fashion photography. All skills needed for photography and styling, including

Nadere informatie

Group work to study a new subject.

Group work to study a new subject. CONTEXT SUBJECT AGE LEVEL AND COUNTRY FEATURE OF GROUP STUDENTS NUMBER MATERIALS AND TOOLS KIND OF GAME DURATION Order of operations 12 13 years 1 ste year of secundary school (technical class) Belgium

Nadere informatie

RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM Read Online and Download Ebook RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM DOWNLOAD EBOOK : RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN STAFLEU

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Analyse 6 januari 203, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe. Als je een onderdeel

Nadere informatie

Falende Interpretatie? De Samenhang van Faalangst met Interpretatiebias

Falende Interpretatie? De Samenhang van Faalangst met Interpretatiebias Falende Interpretatie? De Samenhang van Faalangst met Interpretatiebias Failing interpretation? The Relationship between Test Anxiety and Interpretation Bias Kornelis P.J. Schaaphok Eerste begeleider:

Nadere informatie

ECHTE MANNEN ETEN GEEN KAAS PDF

ECHTE MANNEN ETEN GEEN KAAS PDF ECHTE MANNEN ETEN GEEN KAAS PDF ==> Download: ECHTE MANNEN ETEN GEEN KAAS PDF ECHTE MANNEN ETEN GEEN KAAS PDF - Are you searching for Echte Mannen Eten Geen Kaas Books? Now, you will be happy that at this

Nadere informatie

Relationele Databases 2002/2003

Relationele Databases 2002/2003 1 Relationele Databases 2002/2003 Hoorcollege 4 8 mei 2003 Jaap Kamps & Maarten de Rijke April Juli 2003 Plan voor Vandaag Praktische dingen 3.1, 3.2, 3.3, 3.4, 3.5. SQL Aantekeningen 2 Tabellen. Theorie

Nadere informatie

Ik kom er soms tijdens de les achter dat ik mijn schoolspullen niet bij mij heb of niet compleet

Ik kom er soms tijdens de les achter dat ik mijn schoolspullen niet bij mij heb of niet compleet 1 2 3 4 MATERIAL PREPARING LESSON ATTITUDE TOWARD WORK Ik kom er vaak tijdens de les achter dat ik mijn schoolspullen niet bij mij heb Ik kom er soms tijdens de les achter dat ik mijn schoolspullen niet

Nadere informatie

AE1103 Statics. 25 January h h. Answer sheets. Last name and initials:

AE1103 Statics. 25 January h h. Answer sheets. Last name and initials: Space above not to be filled in by the student AE1103 Statics 09.00h - 12.00h Answer sheets Last name and initials: Student no.: Only hand in the answer sheets! Other sheets will not be accepted Write

Nadere informatie

Relationele Databases 2002/2003

Relationele Databases 2002/2003 Relationele Databases 2002/2003 Hoorcollege 4 8 mei 2003 Jaap Kamps & Maarten de Rijke April Juli 2003 1 Plan voor Vandaag Praktische dingen Huiswerk 3.1, 3.2, 3.3, 3.4, 3.5. SQL Aantekeningen 2 Tabellen.

Nadere informatie

It s all about the money Group work

It s all about the money Group work It s all about the money Group work Tijdsduur: 45 minuten Kernwoorden: money (geld) coin (munt), banknote (bankbiljet), currency (munteenheid) Herhalings-/uitbreidingswoorden: debate (debat), proposal

Nadere informatie

Creatief onderzoekend leren

Creatief onderzoekend leren Creatief onderzoekend leren De onderwijskundige: Wouter van Joolingen Universiteit Twente GW/IST Het probleem Te weinig bèta's Te laag niveau? Leidt tot economische rampspoed. Hoe dan? Beta is spelen?

Nadere informatie