©
KINECT szenzor intelligens terekben Önálló labor 2.
Pálfalvi József BME VIK, Intelligens Rendszerek MSc szakirány e-mail:
[email protected]
dr. Dobrowiecki Tadeusz egyetemi konzulens BME MIT
Budapest, 2011.05.07
Tartalomjegyzék TARTALOMJEGYZÉK ...................................................................................................................................... 2 1
BEVEZETŐ ........................................................................................................................................... 3
2
OPENNI ÉS NITE .................................................................................................................................. 4 2.1
MI AZ NI?.......................................................................................................................................... 4
2.2
MI AZ OPENNI? .................................................................................................................................. 4
2.3
HARDVER ÉS MIDDLEWARE KOMPONENSEK ................................................................................................ 5
2.4
PROGRAMOZHATÓSÁG .......................................................................................................................... 6
2.5
OPENNI ÉS A KINECT .......................................................................................................................... 7
2.6
MI A NITE? ....................................................................................................................................... 7
3
FELHASZNÁLÁSI LEHETŐSÉGEK ........................................................................................................... 8 3.1
ROBOTVEZÉRLÉS .................................................................................................................................. 8
3.2
AUGMENTED REALTY ............................................................................................................................ 9
3.3
ASSISTED AMBIENT LIVING, ACTIVITIES OF DAILY LIVING ............................................................................... 9
3.4
INTELLIGENS SZOBA (INTELLIGENS HÁZ) ................................................................................................... 10
3.5
BIZTONSÁGTECHNIKA .......................................................................................................................... 12
3.6
BIOMETRIA ....................................................................................................................................... 13
4
KINECT, MINT „BIOMETRIAI SZENZOR” ............................................................................................ 15 4.1
ÁLTALÁNOS ALKALMAZHATÓSÁG ........................................................................................................... 15
4.2
TAPASZTALATOK A SZENZORRAL............................................................................................................. 16
5
LÉTEZŐ MEGOLDÁSOK, MEGKÖZELÍTÉSEK ........................................................................................ 19 5.1
OPENCV [9]..................................................................................................................................... 19
5.2
BAYESI BECSLÉS AZ EMBERI TEST 3D-S MOZGÁSREKONSTRUKCIÓJÁHOZ [10] .................................................... 20
5.3
ORGANICMOTION [13]....................................................................................................................... 20
5.4
MÁS EGYETEMEKEN............................................................................................................................ 20
6
KINCET TECHNIKAI SPECIFIKÁCIÓ, MŰKÖDÉS ................................................................................... 21 6.1
SZENZORRAL KIADOTT HIVATALOS PARAMÉTEREK [8] .................................................................................. 21
6.2
A SZENZOR MŰKÖDÉSE ........................................................................................................................ 22
7
KONKLÚZIÓ ....................................................................................................................................... 23
8
FORRÁSJEGYZÉK ............................................................................................................................... 24
2
1 Bevezető A labor célja a 2010. november 10-én megjelent Microsoft KINECT szenzor, és a szenzor segítségével megvalósítható problémák tanulmányozása. A szenzor egy RGB kamerával, hangérzékelővel, és egy mélységtérképet szolgáltató IR kamerával és chippel van ellátva. Az integrált megoldásnak köszönhetően egyszerűen lehet objektumokat (elsősorban emberi alakokat, arcokat, végtagokat) azonosítani a 3D térben, és ez leegyszerűsíti a sok témakörben felmerülő problémát: jellegzetes pontokat 3D térben azonosítani és követni.
Olyan alkalmazási területeket szeretnék megvizsgálni, ahol a szenzor speciális adottságait kihasználva érdekes és innovatív feladatokat lehetne megoldani. A szenzor tulajdonságait szem előtt tartva felmerülhet a robotvezérlés, kiterjesztett valóság (augmented realty), biztonság technikai, vagy akár a biometriai felhasználás is. Az alkalmazás feltétele a szenzor tesztelése. Elsősorban nem egy konkrét probléma megoldhatóságát akarom megvizsgálni, hanem általános paramétereket tesztelni, amik körülhatárolhatják a felhasználás lehetőségeit (hatótávolság, érzékenység, felbontás…).
3
2 OpenNI és NITE Az ebben a fejezetben bemutatott technológiák hivatalos leírása és forrásai: [5, 6, 7]
2.1 Mi az NI? Az NI (Natural Interaction) egy olyan elgondolás, ami az ember-gép interakciót elsősorban a látásra és hallásra akarja alapozni. A koncepció szerint az olyan eszközök, mint a távirányító, egér vagy billentyűzet szükségtelenek egy ember-gép interakcióhoz. Alapvető céljai közé tartozik a hangfelismerés és hangvezérlés, kézjelek felismerése, vagy akár a teljes emberi alakfelismerés, követés és interpretáció további felhasználásra.
2.2 Mi az OpenNI? Az OpenNI egy cross-platform, több programozási nyelven elérhető (C, C++, C#, Java) framework, ami API-kat szolgáltat az olyan alkalmazások készítéséhez, amik az NI (Natural Interaction) alapelvekre épülnek. Az API-kat interfészeken keresztül lehet elérni, amik azt a célt szolgálják, hogy egységes felületen lehessen kommunikálni a hardver elemekkel, amik „látnak és hallanak”, és a szenzoradatokat feldolgozó middleware-rel. A middleware elemek olyan szoftverkomponensek, amik a szenzorból érkező adatokat feldolgozzák, és olyan magasabb szintű információkat szolgáltatnak a nyers adatokon felül, mint például egy felismert kézfej pozíciója a 3D térben. Ez alapján tehát az OpenNI egy sor olyan API-t definiál, amit a hardvernek, vagy a szoftverkomponensnek kell kielégítenie. Ezzel létrehozva egy egységes környezetet, ami lehetővé teszi: 1. a hardver elemek egyszerű helyettesítését 2. több hardver egyszerre való használatát 3. szoftver komponensek újrafelhasználását, hordozhatóságát Például, ha egy hardvergyártó implementálja egy eszközébenben az OpenNI interfészeket, akkor ezzel biztosítja, hogy az OpenNI-t használó szoftverek az ő készüléküket is használni tudják, gyakorlatilag szabványosan (ehhez persze minden hardvernek egy listát kell szolgáltatnia az elérhető szolgáltatásokról). Másik oldalról megközelítve pedig a szoftverfejlesztők olyan alkalmazásokat készíthetnek, amik függetlenek a konkrét hardvertől (attól, hogy melyik hardverből jön az adat), csak a hardver
4
képességeit kell szem előtt tartani (lsd. előbb említett szolgáltatáslista), és függetlenek a middleware komponensektől is. A koncepciót a 2.1-es ábra mutatja be. A legalsó réteg reprezentálja a hardver réteget, ide tartozik maga a KINECT eszköz is. A középső (zöld) réteg azokat a middleware alkalmazásokat jelöli, amik kielégítik az OpenNI API-t és valamilyen hardverre támaszkodva magasabb szintű adatokat szolgáltatnak (pl. nyers pixel adatok helyett egy kézfej pozícióját a térben). Az ezeket összekötő réteg maga az OpenNI, mely ez által egy egységes interfészt kínál a legfelsőbb szinten elhelyezkedő felhasználói alkalmazásnak. A felhasználói alkalmazásnak ez által egyidejűleg lehetősége van: 1. Middleware által kinyert információ felhasználására. 2. Nyers hardver adatok felhasználására. 3. Az OpenNI funkcionalitásait használni az előbbi két ponton. 4. Más API-kat (pl. OpenCV) használni bármelyik előbbi pontban leírt információforrással.
2.1 ábra: OpenNI architektúra (forrás: OpenNI dokumentáció, [5])
2.3 Hardver és middleware komponensek Az OpenNI által támogatott és menedzselt hardver komponensek:
3D érzékelő (mélységtérkép)
RGB kamera
IR kamera
Audio eszköz
Az OpenNI által támogatott és menedzselt middleware komponensek: 5
Teljes emberalak analizátor: emberi alakot felismerő, és általában szkeleton (csontváz) adatokat visszaadó komponens.
2.2 ábra: Emberalak analizátor (szkeleton) példaalkalmazás (forrás: OpenNI demo, [5])
Kézfej felismerő: olyan komponens mely analizálja a színtere, és a kézfej pozícióját követi.
Gesztus értelmező :olyan komponens, mely előre definiált gesztusokat, gesztusszekvenciákat (pl. integető mozdulat) képes felismerni.
Színtér analizáló: analizálja az egész 3D színteret, meghatározva az föld síkját. Azonosítja és követi a mozgó objektumokat (leválasztja a „hátteret” és az „objektumokat”).
A fenti komponenseket képes az OpenNI kezelni, és ezekhez biztosít rengeteg funkciót, kezdve a komponensek menedzselésétől és paraméterezésétől, a tényleges adatok kinyerésén át, a komponensek képességeinek analíziséig. Az OpenNI-vel és KINECT-tel szabadon felhasználható és a fenti funkciókat biztosító middleware a PrimeSense NITE megoldása.
2.4 Programozhatóság Az API elérhető C, C++ nyelven, és egy még fejlesztés alatt áll, de már tesztelhető a C# és Java API is. A programozáshoz megfontolandó, hogy a későbbiekben akarjuk-e az alkalmazást kombinálni valamilyen másik API-val, például az OpenCV-vel (Open Computer Vision), amely rengeteg plusz funkciót tenne elérhetővé. Mindkét API támogatja a C++ programnyelvet és dokumentált. Mivel a KINECT szolgáltat színes képet is, ezért az felhasználható az OpenCV által is.
6
2.5 OpenNI és a KINECT Az OpenNI interfész bármilyen, az interfészt implementáló hardvert és drivert képes kezelni. Ezzel tehát az eszköz helyettesíthető egyszerűbb, költséghatékonyabb megoldásokkal, amik például csak egy mélység térképet generáló kamerával vannak ellátva, mellőzve az RGB kamerát, a mozgatómotort és a hangérzékelőket. Ezt azért célszerű szem előtt tartani, mivel a KINECT elsősorban a szórakoztató ipar számára készült (Xbox360 játékkonzolhoz: http://productcatalog.xbox.com/hu-HU/), és nem ipari felhasználáshoz. Így kevésbé költséghatékony, illetve a kialakítása is alkalmatlanná teszi például külső terekben való alkalmazásra. Az OpenNI továbbá támogatja több hardver egyidejű, akár szinkronizált használatát. Ezzel könnyen kialakítható egy multi-szenzoros rendszer, mely több szemszögből figyeli meg a színteret, akár több különböző forrást (IR, RGB, 3D) kombinálva.
2.6 Mi a NITE? A NITE a Natural Interacion Technology for End-user kifejezésből ered, ami az OpenNI-t használó egyik legelső szabadon felhasználható middleware komponens. Célja a nyers 3D adatokból használható információkat kinyerni, ahhoz hasonlóan, ahogy az ember is teszi. A NITE-ban egyszerre megtalálhatók olyan eljárások, melyek segítségével egyszerűbbé válik a 3D térben a pontok, alakok követése, és számos funkciót (API) szolgáltat NI felhasználói felületek készítéséhez. Alapvetően két fontos területtel foglalkozik: 1. kéz (kézfej) követés 2. teljes alak (szkeleton) követés A kézfej követés két alapállapotból áll: fókusz mozdulat és vezérlő mozdulat követés. A fókusz mozdulatok lényege, hogy ezek segítéségével lehet a NITE rendszerben a vezérlést „átvenni”, vagy a vezérlést elkezdeni. Lényege, hogy a szenzor látóterében álló ember valamilyen jellegzetes kézmozdulatot végez (integetés, kéz felemelés), aminek hatására a vezérlést a mozdulatot végző kéz (és a hozzá tartozó ember alak) kapja meg. A vezérlő mozdulatokhoz akármilyen egyéb mozdulat (vagy mozdulatos orozat) tartozhat. A teljes test követés lényege, hogy a nyers mélységtérkép adatokból a NITE rendszer egy szekeltont hoz létre a látótérben tartózkodó alakokhoz. Ez által a felhasználói programoknak nem kell az alacsonyszintű adatokat feldolgozni, hanem egy könnyen kezelhető, végtag és csuklópontokból álló csontvázat kapnak meg. Az algoritmusok között megtalálható még a környezet (scene) detektálás is, mely az előző két követési algoritmusnak az alapja. Ez határozza meg az érzékelt világ síkját („föld”) és szeparálja a háttér objektumokat az előtér objektumoktól (ember alakok). 7
3 Felhasználási lehetőségek Ebben a fejezetben gyűjtöttem össze azokat a felhasználási lehetőségeket, amikkel elsősorban a KINECT, az OpenNI és a NITE nyújtotta előnyöket (egyszerű alakfelismerés és követés, kézfejkövetés, gesztus felismerés) lehetne kiaknázni.
3.1 Robotvezérlés 3.1.1 Közvetlen vezérlés (Teleoperation) A robotok közvetlen vezérlése egy KINECT által megfigyelt emberalak által. A szoftverből érkező jeleket a robotkarok vagy robotok közvetlenül végrehajtják. Lényegében az emberi végtagok csuklói illeszkednek a robotkar vagy robot csuklóihoz, és azok szinkronban mozognak az emberrel. Ezzel olyan gépeket lehet készíteni, melyek veszélyes környezetben (pl. sugárzás, elérhetetlen helyek) is könnyen, precízen irányíthatók, minden külső beavatkozó periféria (joystick, billentyűzet) nélkül. Érdekes projektek:
Robot felsőtest: http://kinecthacks.net/irobot-icub-humanoid-robot-kinect/
Teljes robot irányítás: http://kinecthacks.net/teleoperation-of-humanoid-robot-usingkinect/
A potenciál abban van, hogy a mozgás sokkal természetesebb, és ez által jobban irányítható a robot. Hátránya, hogy az emberi csuklópontok korlátozzák a robotot. Egyes robotkarok akár 27 szabadsági fokkal rendelkeznek, amit nem lehetne így irányítani.
3.1.2 Autonóm mozgás A robotok autonóm módon dolgozzák fel a szenzoradatokat, és autonóm módon cselekszenek, következtetnek. Ez lényegében a térlátás megvalósulása a robotokban. A mögöttes robot ágens működése persze nagyban befolyásolja a végeredményt, de a saját környezetét feltérképezni képes robot nagy előrelépés. Például egy takarító robot, mely képes a teret leképezni egy 3D-s objektummá (esetleg eltárolni), majd ez alapján tájékozódni és a későbbiekben pozícionálni magát. További példa projektek:
Quadrotoros helikopter: http://kinecthacks.net/autonomous-flying-quadrotor-kinect/
Ebbe a kategóriába tartozhat még az olyan robot, mely emberi utasításokat képes végrehajtani gesztusok, mozgások értelmezésével. Egy robot mely képes értelmezni az előre kinyújtott tenyeret 8
megáll, vagy egy adott irányba való mutatás jelentheti a következő haladási irányt. Bonyolultabb értelmezővel akár konkrét feladatokat is át lehet adni. Ez helyettesítheti a sokszor kényes hangfelismerő és értelmező, és az erre épülő szöveg értelmező komponenseket, hiszen gesztikulációval lehetne kommunikálni.
3.2 Augmented realty A kifejezés jelentése: kiterjesztett valóság. Ezt olyan alkalmazásokra használják, melyek a való világ egy képrészletéhez kontextus-függő, virtuális elemeket rendelnek hozzá. Ilyen, például amikor egy mobiltelefon és GPS segítségével a mobiltelefon kamerája által felvett képre rávetül a közelben lévő üzletek nyitva tartása, távolsága, vagy egy nevezetesség információi. Elsősorban a szórakoztató iparban használják a kiterjesztett valóságot, de a KINECT segítségével sokkal precízebb, ember központibb alkalmazások is készíthetők. Például egy interaktív online ruházati cikkeket áruló bolt támogathatja a KINECT-et. A KINECT által felismert emberalakra az online webshopban kiválasztott ruhát méret-helyesen ráilleszti, és a monitoron megjeleníti a teljes RGB képet, a valós emberrel, de a virtuálisan ráillesztett ruhával. További érdekes projektek:
Orvosi alkalmazás (inkább demonstrációhoz): http://kinecthacks.net/magic-mirror-formedical-data-visualization-using-kinect/
Physx-es demó: http://kinecthacks.net/interactive-augmented-reality-with-kinect-andnvidia-physx/
Ebbe a kategóriába tartozhat még a művészeti töltetű alkalmazások, mint például a 3D ecset, vagy a virtuális szobrászat. Ezek olyan programok, melyekkel a való világba lehet „rajzolni”. Példa projekt: http://vimeo.com/16818988
3.3 Assisted Ambient Living, Activities of Daily Living AAL: Assisted Ambient Living: élhetést segítő technológiák, főleg idősebb embereknek ADL: Activities of Daily Living: hétköznapi, sokszor ismételt cselekvések Elsősorban az idősebb emberek, vagy valamilyen módon korlátozott (mozgás, látás, hallás) emberek élhetését segítő technológiákról van szó. A betegellátás, betegfigyelés, idősek gondozása egyre fontosabbá válik, főleg az öregedő országokban, mint pl. Németország. Alapfunkciókat ellátó, automatizált rendszerekre lehet szükség, melyek nem az emberek szociális igényeit kell, hogy kielégítsék, hanem a sürgős, kritikus esetekben kell, hogy gyors segítséget nyújtsanak. Tehát a cél nem egy beszélgető robot létrehozása kéne, hogy legyen, hanem egy olyan megfigyelő rendszer alkalmazása, amely például elesésnél, mozdulatlanságnál, rossz testtartásnál, mozgáshiánynál… stb. 9
jelez a betegnek, vagy értesíti a megfelelő gondozókat. Ez összekapcsolható, vagy kiegészíthető más elemekkel is.
3.3.1 Rossz szokások megfigyelése, elesés detektálás Hétköznapi rossz szokások, mozgásszekvenciák, állapotok megfigyelése és felismerése. Ide tartozhat például a körömrágás, támaszkodás, helytelen testtartás (akár ülő pozícióban). Az hirtelen pozícióváltások, mint az elesés, vagy asztal melletti (akár ülő pozícióban) a fej hirtelen lebillenése könnyen detektálható, és fontos tényező lehet az idősebbek gondozásában.
3.3.2 Rehabilitáció és torna program A mozgások precíz követése lehetővé teszi tornaprogramok készítését, melyek személyi edzőként működhetnek akár egyszerű testedzéshez, vagy beteg rehabilitációhoz. A rehabilitációnál fontos a beteg figyelése a mozgás közben, a szokatlan mozgások detektálása, illetve a mozgásszekvenciák teljesülésének figyelése. Egy beteg, ha a rehabilitációs programot, vagy annak egyes részfeladatait egyáltalán, vagy nem kellően pontosan teljesíti, akkor jelez a rendszer. Tornaprogramok, vagy akár meditációs (tai chi) programok már léteznek az eszközhöz. Ezek lényege, hogy saját edzésprogramot állítanak össze a testünk (alakunk) és korunk alapján, majd egy „virtuális világba” helyezve minket végeztetik el velünk a gyakorlatokat, és figyelik a mozdulatok teljesülését: http://yourshapegame.us.ubi.com/ Ilyen elven egy munkahelyi, vagy otthoni „személyi edző” is készíthető, mely például adott időközönként (pl. 2 óránként) utasít minket, hogy tornázzunk egy kicsit.
3.3.3 AAL, ADL A napközben sokszor elvégzett (időben és térben rendszeresen ismételődő) cselekvésekre az intelligens szoba rá tud tanulni, és sok cselekvés automatizálható. Ezt az intelligens szoba alpontban fejtem ki bővebben.
3.4 Intelligens szoba (intelligens ház) Az intelligens szoba (intelligens ház) egy olyan koncepciót jelent, melyben az ember a környezetével nem közvetlenül kommunikál, nem avatkozik be közvetlenül, hanem a környezet érzékeli és figyeli meg az embert, és az ember tevékenységeire reagál aszerint, hogy maximalizálja a kényelmet és biztonságot, minimalizálja az energiafogyasztást, vagy valamilyen más paramétert. Sokszor multi-szenzoros rendszereket használnak egy ilyen környezet kiépítésére, hiszen a megfigyelésnek sok dimenziója lehet, például hang, páratartalom, hőméréskelt vagy pozíció. Ezek a paraméterek ráadásul a térben is elosztva jelenhetnek meg, ezért adott szenzorokból akár több is kapcsolódhat az intelligens szoba hálózatához, a szoba különböző pontjairól. 10
Legegyszerűbb példa erre, hogy ha egy szobában szeretnénk egy ott sokat tevékenykedő ember kényelmét maximalizálni. Ekkor jó hőmérséklet, páratartalom kell. Sötétedés után, ha belép a szobába, akkor automatikusan kapcsolódjon fel a villany, ha előtte több alkalommal manuálisan felkapcsolta (rátanul). Lefekvés érzékelésekor (ágyban fekvő pozíció) kapcsolja le a fő villanyt, és húzza le a redőnyt. A beavatkozás mikéntje is fontos tényező, és itt kapcsolható be a KINECT a rendszerbe. Az NI (Natural Interaction) korábban bemutatott koncepcióját az intelligens szobában úgy alkalmazhatjuk, ha a teljes szoba beavatkozó szerve maga a KINECT, mely értelmezi az emberi gesztusokat, mozdulatokat. Ez alapján a beavatkozás KINECT-et használva automatikus és manuális módon valósulhat meg:
Manuális: gesztusok felismerése.
Automatikus: pozíciók, testtartás, helyek, (akaratlan) mozdulatok felismerése
Manuális vezérlés alatt minden olyan beavatkozást értek, amikor egy még nem megfigyelt, vagy még nem kellően nagy bizonyossággal automatizálható funkciót akar aktiválni a szobában tartózkodó. Automatikus vezérlés alatt minden olyan autonóm módon a szoba által végrehajtandó funkciót értek, melyet a szoba korábban sokszor megfigyelt, és az aktuálisan megfigyelt mozgás alapján újra el kell végezni.
3.4.1 A rendszer egy példa működése A szobában tartózkodó esténként 10 körül lehúzza a redőnyt. Ezt ismétli párszor, de volt olyan eset, mikor nem húzta le, ezért ebből még nem lehet következtetni (azaz nem kellő bizonyossággal) az ADL-re. Az illető természetesen nem kézzel engedi le, és húzza fel a redőnyt, hanem az ablak irányába mutatva felemeli, vagy leengedi a kezét. Ha az ablak irányába mutatva balra, vagy jobbra mozdítja a kezét, akkor kinyílik, vagy becsukódik az ablak. Egy idő után, ha már kellő pozitív példa áll rendelkezésre, akkor az intelligens szoba este 10-kor automatikusan leengedi a redőnyt. Ez minden könnyen megvalósítható a KINECT-tel, hiszen azonosítható a kar, annak irányítottsága. A mögöttes rendszer pedig valamilyen tanuló algoritmus, akár szakértőegyüttesekből álló rendszer is lehet.
3.4.2 Kommunikáció A kommunikáció kétirányú kell, hogy legyen. Tehát az ember NI alapú (KINECT) beavatkozása az ember-szoba kommunikációt valósítja meg, és kell egy szoba-ember kommunikációs csatorna is. Az NI alapelvek alapján ez audió és videó alapú kéne, hogy legyen, tehát például egy hangszórórendszer, vagy egy kivetítő mely az ember aktuális helyéhez és orientációjához viszonyítva kivetít egy képet, vagy egy kérdést. A kérdésre pedig hasonlóan a beavatkozáshoz: gesztusokkal lehet válaszolni. 11
3.4.3 Intelligens ház elemei 1. Hőmérséklet (fűtés, légkondicionáló; HVAC) 2. Páratartalom (levegő frissesség; HVAC) 3. Nyílászárók működése (ajtó, ablak) 4. Világítás (fényerő) 5. Időzített automatika (pl. viráglocsolás) 6. Biztonság (mozgásérzékelés, arc- és alakfelismerés, gesztuskód) 7. Szórakoztatóelektronika vezérlés
3.5 Biztonságtechnika Biztonságtechnikához a mozgásérzékelőkön kívül kamerák is tartoznak, melyek közül a KINECT speciális funkciót láthat el: alak- és arcfelismerés, illetve gesztuskód („organikus kód”, ami a testtel végzet gesztuskombinációt jelenti).
3.5.1 Gesztuskód Tekintve, hogy a KINECT kb. 20 joint pontot (hajlítható csuklópontot és végpontot) tud követni, amik mozgási tartománya az ember méreteitől függ, de értékei folytonosak (!), így a gesztuskód (a lekövetési hibát nem számítva) végtelen sok kombinációt tartalmazhat. Természetesen nem lehet például az alkar elforgatottságát végtelen precizitással érzékelni, ezért kvantálni kell az értékeket, és valamilyen hibaszázalékot használni. A gesztuskód a különböző joint pontok pozíciójától, és az azokat összekötő szakaszok (tagok, végtagok) elforgatottságától függ a 3D térben, illetve nagyban függ a pozíciók közötti váltástól. (tehát nem mindegy, hogy egy felfelé kinyújtott kart úgy érünk el, hogy oldalra hozzuk föl a kezünket, vagy magunk előtt). Egy szobába, házba való belépéskor a kamera azonosítja a belépőjét (arcfelismerés) és/vagy gesztuskódot kér. Ekkor az illető egy rögzített gesztussal jelzi a kód kezdetét, majd elvégzi a gesztussorozatot. Példa:
Kód eleje: jobb alkar fej fölé kinyújtva.
Kód: Bal kéz 45%-ban magunk mellé; Jobb kéz vízszintesbe; Jobb alkar behajlít; Bal kar vissza test mellé.
A kód természetesen lehet sokkal „organikusabb” is: kézfejjel magunk előtt két 8-ast leírunk, majd lehozzuk a kezünket 45%-ban magunk mellé. A kód lehet rövid is, hiszen a joint pontok száma, és a lehetséges felvehető értékek száma igen nagy. 12
Az se jelentene problémát, ha a házba belépő személy nem végzi el rögtön a gesztuskódot, hiszen az érzékelőnek van egy érzékelési zónája (türelmi zóna). Ha ebbe belép a személy, akkor elkezdődik az érzékelés, ezen belül mozoghat, de (riasztás nélkül) kilépni már csak a kód megadása után lehet.
3.6 Biometria A biometria olyan alkalmazások összessége, amik segítségével egy ember a rá jellemző fizikai tulajdonságok, vagy egyedi mozgás, viselkedésjegyek alapján azonosítható. A biometria nagyon fontos részét képezi mindenféle azonosítási eljárásnak, mint például az ujjlenyomat azonosítás vagy az arcfelismerés. Két csoportja van:
fizikai
viselkedési
Az első csoportba tartoznak az emberekre teljesen egyedi, fizikai jellemzők: ujjlenyomat, írisz, arc, tenyéralak, fülalak, retina, arc hőtérkép, DNS, hangelemzés. A második csoportba tartoznak: írás ritmus, testmozgás követés, hangelemzés. Alapvető követelmények a biometriai leírókkal szemben:
mindenkire (az emberek nagy részére) értelmezhető, használható legyen
egyediség (ne legyen két azonos ember, akire igaz)
időben állandó (hosszú ideig statikus jellemző)
mérhető (lehetőleg nagy teljesítménnyel, gyorsan)
nehezen hamisítható (lemásolható)
3.1 ábra: Biometria általános blokkvázlata (forrás: wikipedia)
13
Az általános blokkvázlaton követhetjük a biometria működését. A szenzor adatokat először elő feldolgozásnak vetjük alá (pl. zajszűrés), majd a számunkra kívánatos adatokat szűrjük le az adathalmazból (feature extraction). A szenzorból nyert adatok alapján előállítunk egy mintát, amit az adatbázisban eltárolt, korábbi mintákkal vethetünk össze, majd az eredményeket továbbítjuk az alkalmazásnak további feldolgozásra (riasztás, értesítés… stb.).
3.6.1 Írás ritmus, kurzor mozgáskövetés A technika lényege, hogy a felhasználót írásmód alapján azonosítják. Ez független a leírt szótól, az azonosított paraméterek között az írásirány, az írási sebesség (karakteren belül is lebontva), és a kurzor közbülső mozgásának követése van. A rögzített mozgás (gesztus) többszöri megismétlésével tanulja meg a rendszer a paramétereket. A „kód” elvileg legalább olyan egyedi, mint az íráskép (grafológiai elemzés), illetve tudatosan egyedi ismertetőjelekkel is lehet bonyolítani (pl. adott karakter elnyújtása). A probléma ezzel a biometriai mértékkel, hogy az íráskép és- ritmus nagyban függ a lelki állapottól.
3.6.2 Gait Magyarul azt jelenti: testtartás, járásmód. A szakmában a járás közbeni testtartás, súlymegoszlás elemzését értik ez alatt. Elsősorban mozgásszervi betegségek (ízület, izomzat) elemzésére, felismerésére használják. Próbálták alkalmazni már emberek azonosításra is (http://www.youtube.com/watch?v=Voygv1uTF7c), ezzel arra próbáltak kísérletet tenni, hogy létrehoznak egy központi adatbázist, amelyben az ismert bűnözők mozgásmintáit tárolják el, majd vetik össze más videókon rögzített mozgásokkal. A projekt (források hiánya alapján), innen nem is jutott tovább.
14
4 KINECT, mint „biometriai szenzor” A KINECT által szolgáltatott adatok (RGB kamerakép, és szkeleton) rögtön adják a lehetőséget, hogy az eszközt vizsgáljuk meg, mint lehetséges biometria alkalmazást. Itt a biometria nem csak személyazonosításra, vagy biztonságtechnikában használható alkalmazásaira kell gondolni. A biometriát, mint olyan alkalmazások összességét tekinthetjük, amik az emberi test valamilyen tulajdonságát próbálja meg azonosítani, követni, és a 3.1 ábra architektúrája alapján működik. Ez alapján a KINECT-et biometriai szenzorként is használhatjuk:
pre-processing: mélységképből érkező adatok feldolgozása
feature extarction: emberi alakok, joint pontok, kezek azonosítása
mozgás lekövetése (minta készítése)
eltárolt mozgásmintákkal való összevetés
eredmények feldolgozása
Az eredményeket többféle alkalmazási területen (nem feltétlenül személyazonosításban, biztonságtechnikába) is használhatjuk:
gesztus szekvencia követése (pl. ivás mozdulatsor)
gesztuskövetés rehabilitáció követésére
szokatlan gesztusok azonosítása
gesztus kód (gesztus alapján való azonosítás)
testpozíció követés
4.1 Általános alkalmazhatóság Az eddigi kutatások alapján a biometria elsősorban fizikai sajátosságokon alapuló változatait használják, ritka a viselkedési minták felismerése. Ez elsősorban annak tudható be, hogy nehéz olyan hardvert készíteni, ami kompakt módon, ugyanakkor robosztusan működne. A legtöbb viselkedést (mozgást) azonosító rendszer infra-kamerákat és markereket használ, ami egy egész stúdió berendezését és kalibrálását igényli (motion capture). Az egykamerás képfeldolgozás fejlődésének köszönhetően, és a KINECT szenzorban megvalósított színes kép és infra-kamerából származó mélységkép hibrid megoldásának köszönhetően, egyszerűen lehetne emberi alakok végtagjainak mozgását követni, és az adatokat valós időben feldolgozni. A KINECT precizitását tekintve nem ér fel a markeres megoldásokig (pl. lábfej, térd csavarodást, de még a csukló finom mozgását is nehéz lenne lekövetni), de jó megközelítéssel lehet rá robosztus alkalmazást készíteni.
15
A KINECT alkalmazása mellet szól a fényviszonyoktól való függetlenség is, hiszen a szenzor egy aktív infravörös érzékelővel rendelkezik (infravörös hálót projektál ki, amit egy infra érzékelővel figyel meg, és ez alapján határozza meg a szenzortól való távolságot).
4.1.1 Testpozíció követés Részfeladatai:
éber figyelés
éber nem figyelés
alvás
szokatlan aktivitás
szokatlan aktivitáshiány (mozdulatlanság) Ezt önmagában a KINECT-tel nehéz lenne megoldani, hiszen az alvás és nem alvás közötti
különbséget pl. TV nézés közben a testtartásból nehéz megállapítani. Szükséges lenne komolyabb arcfelismerésre, és azon belül pl. csukott/nyitott szem felismerésre is. A probléma az, hogy az alvó (nem aktív) ember testtartása alig különbözik egy éber, de mozdulatlan emberétől, és kis mozdulatlanságot nem lehet precízen mérni. A szokatlan aktivitást, vagy hirtelen pozícióváltást már lehetne követni, felismerni. Tehát például elesés detektálás, vagy hirtelen rángás felismerésére használható lenne.
4.1.2 Gesztus szekvencia követés A szekvenciák követése KINECT-tel megoldható feladat, mivel a szekvenciák nem csak önmagukban felismerendő, statikus pozíciók, hanem pozíciók sokasága, átmenetekkel, amik valamilyen hibafaktort számításba véve jobban felismerhetők. Konkrét alkalmazásai már léteznek, elsősorban játékfejlesztésben találkoztam ennek komolyabb felhasználásával, ahol aerobic és tánckoreográfiai programok hasonlították össze az ember tényleges mozgását az elvvárttól. Itt igen összetett mozgásokra kell gondolni, tehát összehangolt végtag, törzs, és fejmozgásra.
4.2 Tapasztalatok a szenzorral A szenzor tesztelését általam is felülvizsgált (forráskódból fordított, kis mértékben módosított) demó programok (OpenNI SDK-hoz mellékelt; lásd 3. fejezet) segítségével végeztem el. Ezek a programok mindig valamilyen speciális feladatra vannak kiélezve, így például van program, ami az emberi alakokat azonosítja és megpróbálja a szkeletont ráilleszteni, és van, amelyik csak és kizárólag a kézfejet próbálja követni (automatikus azonosítás és követés).
16
4.2.1 Pontosság és az érzékelés robosztussága Az érzékelő a legkisebb érzékelési távolságban (kb. 0.8m) vízszintesen kb. 87cm-t lát, függőlegesen 63cm-t, és így a felbontása 1.3mm/pixel. [8] Az érzékelő legnagyobb hátránya a viszonylag kis látószög. A problémát (felismerés bizonytalanságát, vagy teljes hiányát) sokszor a rossz távolság okozza, mivel a szkeleton felismeréshez legalább csípőig benne kell, hogy legyen a felsőtest. A szoknyát viselő emberek lábait rendszeresen helytelenül illeszti a NITE. A teljes alak felismerés kétféle módon történhet:
előre eltárolt szekeleton használata (előzőleg valaki el lett „mentve” a rendszerben)
instant felismerés (valamilyen fókusz pozíciót kell felvenni, hogy a rendszer felismerje az emberalakot, és ráillessze a szkeletont)
A KINECT-et használó fejlesztők között sokan állítják, hogy egy tetszőleges, de nagyjából átlagos emberről vett szkeletont a rendszer később igen nagy pontossággal rá tud illeszteni más alakokra, mindenféle fókusz pozíció nélkül.(Ezt még tesztelni kell.)
4.2.2 OpenNI és NITE funkciók Az OpenNI funkciói elsősorban a hardver (KINECT) és a middleware összekapcsolását, menedzselését végzi. A NITE API-ba (és dokumentációba) mélyebben beleásva sok olyan előre definiált funkciót találtam, melyek nagyban könnyítik, és egyszerűen variálhatóvá teszik a különböző mozdulatok detektálását, felhasználását. A NITE middleware alapvetően egy eseményvezérelt struktúrát valósít meg, ahol a szenzorból érkező adatokat feldolgozva (tehát az ember mozgását érzékelve), különböző események generálódnak. Ezek az események általában kézmozdulatok, de minden esemény „generálódása” paraméterezhető. Például rendelkezésre áll egy olyan funkció, mely az integetés jellegű mozdulatokat detektálja. Az integetés egy rögzítet síkban történik, de paraméterezhető, hogy hány oda-vissza mozdulat, milyen sebességű mozgás után ismerje fel integetésnek. Másik példa: rendelkezésre áll olyan funkció, mely a kézfej olyan jellegű mozgását érzékeli (detektálja), mely egy tetszőleges (de rögzített) X-Y síkban figyeli a kéz mozgását, és egy 2D térképet készít a mozgásról minden képkockában. A másik hasznos megoldás a NITE-ban az adatfolyam kezelés. Ez alatt a különböző forrásból érkező adatok (akár különböző szenzorból, vagy az adott színtérből érkező különböző eseményforrások pl. kézfej, test) alkalmazásállapottól függő felhasználását, irányítását kell érteni. Például, ha az alkalmazás egy pillanatában csak egy adott kézmozdulatot szeretnénk megtalálni (a többi mozdulatot átmenetileg nem akarjuk figyelni), akkor erre beépített szolgáltatások állnak rendelkezésre.
17
Továbbá rendelkezésre állnak szűrő funkciók is, melyek például a kis mozgásokat szűrik le, illetve olyan funkciók, melyekkel a teret lehet „partícionálni” és a térben mozgó (és követett pontokat) figyelni a partíciók közötti váltáskor.
4.1 ábra Szkeleton felbontás a NITE alapján (forrás: NITE algorithms, [6]) A NITE API leírás viszonylag részletesen ismerteti az egész rendszer képességeit. Arra is kitér, hogy a teljes alak felismerését végző komponens milyen pontossággal képes a végtagcsavarodást meghatározni. A probléma, hogy ezeket (pl. a felkar csavarodását) nem lehet közvetlenül a mélységképből meghatározni, ezért következtető módszereket használ a NITE (pl. ha előrefele hajlik a könyökünk, akkor nyilvánvalóan a bicepszünk előrefele néz). A gyors mozgások, és extrém pozíciók is zavarhatják a felismerést. Hasznos, hogy a legtöbb funkcióhoz szolgáltat egy bizonytalansági faktort, mellyel meghatározható, hogy egy adat (pozíció, irány) mennyire „biztos”.
4.2.3 Egyéb tapasztalati adatok A szenzor válaszideje nagyon kicsi (ms nagyságrendű), persze ez függ az alkalmazástól is. Az érzékelési tartománya főleg a „közelség” terén korlátozott, hiszen a látószög miatt a túl közeli alakokat nem látja egészben (ez még nem probléma), de az alak-felismerési algoritmusok nem mindig működnek 100%-osan csak a felsőtestet látva. A felbontás a gesztusérzékeléshez kielégítő (nagy pontossággal), de ujjfelismerés, ujjmozgás követéshez már nem, ahhoz közeli felvételre és speciális alkalmazásra lenne szükség.
18
5 Létező megoldások, megközelítések A teljes alak felismerés és követés nem új elgondolás, más rendszerekben is foglalkoznak ezzel, sok létező megoldás található. Csak azokaz a megoldásokat citálom, melyek nem csak a test általános felismerését és követését teszik lehetővé, hanem teljes test alak felismerést, tehát végtagok, csuklópontok követését is. Mint korábban már említettem, a legtöbb felismerési módszer vagy csak magát az emberi mozgás tényét ismerik fel (magát az alakot, vagy annak részleteit már nem), vagy többkamerás, kalibrált, markeres megoldásra van szükség, ami viszont igen költséges, és nehezen alakítható ki bármilyen környezetben. A többkamerás megoldások között is léteznek olyanok, melyek markerek nélkül használhatók [11,12]. Tehát olyan egykamerás megoldásokat kerestem, amik komplexitásukat tekintve a KINECT szintjén vannak.
5.1 OpenCV [9] Az OpenCV (Open Computer Vision Library) az egyik leggyakrabban használt, nyílt forráskódú és szabadon felhasználható programcsomag, mely rengeteg funkciót biztosít a képfeldolgozás és gépi látás témakörében. Alapvetően csak RGB képeken dolgozik, tehát akármilyen forrásból származó kameraképeken. A beépített alapfunkciókkal könnyen lehet magasabb szintű felismerést lehetővé tevő alkalmazásokat készíteni, megkerülve ezzel olyan nehéz problémák implementálását, mint az arcfelismerés, vagy kézfelismerés. A probléma a legtöbb funkcióval az, hogy alapvetően 2D-s képekről származó információból nehezen lehet 3D-s információt leszűrni. Az objektum felismerő algoritmusok akkor működnek csak helyesen, ha például az arc, vagy az emberi alak szemben van a kamerával. Az elfordult, elcsavarodott pozíciókat alig, vagy egyáltalán nem képes követni. Az arc és alakfelismerő funkciók többnyire a Haar-féle jellemzők segítségével keresi meg a szem, vagy testrészek pozícióit. Él és textúra alapú (régió felismerés) objektum-azonosítás is gyakori, de ezek is szinte minden esetben nagyon érzékenyek a megvilágítási körülményekre (intenzitás), az ember öltözködésére, és kamerához viszonyított pozíciójára. Továbbá csak „bounding box” jellegű információt szolgáltatnak a felismert alakról.
19
5.2 Bayesi becslés az emberi test 3D-s mozgásrekonstrukciójához [10] A megoldás két részből épül fel: előzetes mozgási modell felépítése markerek segítségével rögzített, mozgásszekvenciákról készített adatokból. Ezzel egy olyan valószínűségi modellt építenek fel, ami megadja pár képkockán keresztül a végtagok elhelyezkedésének valószínűségét. Második lépésben a tényleges kameraképeket analizálják, de itt egy egyszerűsített megoldást használnak: a kamera által könnyen felismerhető markereket a testen. A bonyolultabb, valós helyzetekhez már létező alak-felismerési megoldásokat használnak. A munka legnagyobb felfedezése az volt, hogy az előzetes tudásbázis felépítése nagyban hozzájárul a megoldás jó alak-felismerési teljesítményéhez. Egy friss, 2010-es tanulmány azt vizsgálja, hogy az így rögzített mozgás adatokat milyen módszerekkel lehetne finomítani. Különböző technikákat ismertet a már létező adatok „simítására” az új adatok segítségével (Gibbs mintavételezés, Markov láncoknál használkt simítási technika) [16,17]
5.3 OrganicMotion [13] Ez egy ipari alkalmazás, mely markerek nélküli alakfelismerést és követést tesz lehetővé. Alapja hasonló a KINECT-ben használthoz: kalibrált IR kamerák segítségével határozza meg az ember pozícióját a térben. A megoldás hátránya, hogy egy rögzített stúdióban használható csak, szigorúan korlátozott fényviszonyok mellett.
5.4 Más egyetemeken A Stanford egyetemen egy külön kutatócsoport (BioMotion Lab [14]) foglalkozik ezzel a témakörrel. Ők is markeres megoldásokkal dolgoznak, külön felépített stúdióban. Elsődleges céljuk nem a kiterjesztett virtuális valóság, vagy az intelligens szobában való alkalmazása a technológiának, hanem orvosi megoldások. Coventry University (UK) , Bournemouth University (UK) intézményeiben markeres, elsősorban játékfejlesztésre és animáció készítésre szánt megoldásokkal foglalkoznak. Carnegie Mellon egyetemen is foglalkoznak motion capture-rel (mocap), sőt, egy nyíltan hozzáférhető adatbázist is biztosítanak, melyben a saját laborjuk (Carnegie Mellon Graphics Lab) által rögzített adatok érhetők el. [15]
20
6 KINCET technikai specifikáció, működés 6.1 Szenzorral kiadott hivatalos paraméterek [8] 6.1.1 Fő tulajdonságok
RGB kamera (640x480; 30FPS)
Mélységérzékelő (IR; 640x480; 30FPS)
Hangérzékelő
Mozgató motor a dőlésszög változtatáshoz
6.1.2 Látószög
Vízszintes FOV: 57°
Függőleges FOV: 43°
Motor függőleges szögváltoztatása: 27°
Mélységérzékelő érzékelési tartománya (ajánlott): 1.2m–3.5m
Mélységérzékelő érzékelési tartománya: 0.8–6 m
6.1.3 Adatfolyam
640x480 16-bit depth @ 30 frames/sec (mélység-térkép)
640x480 32-bit colour@ 30 frames/sec (színes kamerakép)
16-bit audio @ 16 kHz
6.1.4 Szkeleton (csontváz; ember) érzékelés
mozgó alakok érzékelése
aktív alakok érzékelése (szkeletonnal)
aktív alakonként 20 joint pont (hajlítható vagy végpontok) érzékelése
6.1.5 Audio érzékelő (PC-n jelenleg nem működik)
Hangfelvétel
Visszhang kiszűrés
Beszédfelismerés több nyelven
21
6.2 A szenzor működése A KINECT szenzor alapja az IR kamera együttes, mely egy infravörös fényt kibocsájtó fényforrásból, és egy infravörös fényt érzékelő kamerából áll. Más IR fényt használó mélységérzékelők általában azon az egyszerűsített fizikai modellen alapszanak, mely a kisugárzott fény által megtett utat (távolság a szenzortól) a kibocsátás és érzékelés között eltelt idő és a fénysebesség által határozzák meg. A KINECT –ben használt PrimeSense chip más megoldást használ. [18,19]. Ennek lényege a következő: az IR kibocsátó egy pszeudorandom mintázatot (sűrű ponthalmazt) vetít ki a megfigyelendő objektumra. A kivetített mintázatokat először ismert, de különböző távolságban lévő referencia felületekre vetítik ki (egymás után, egyenként), majd ezeket az képeket, és a mintázatokban lévő pontok távolságát elmentik referencia adatokként.
A 6.1 ábra: KINECT által kibocsátott infravörös fény (pont háló) [20] Az ismeretlen távolságban lévő objektumra ezután ugyan azt a pszeudorandom mintázatot vetítik ki. Az előzőleg referencia felületekre kivetített mintázatok közül, különböző korrelációs technikákat alkalmazva, kiválasztják a legvalószínűbb referencia felületet (felületeket), és az ahhoz eltárolt referenciapontok távolságát. Ezután az ismeretlen objektumra (objektumokra) kivetített mintázat pontjait keresztkorrelációs technikákkal megfeleltetik a referencia felület pontjainak, és a pontok távolságából meghatározható a referencia felület és az ismeretlen objektum felületének pontjainak z-tengely (3. dimenzió) menti különbsége. Az így meghatározott mélységkülönbségek képezik tehát a mélységkép (mélység térkép) alapját.
22
7 Konklúzió A KINECT szenzor egy kompakt eszköz, mely köré egy olyan framework épül(t), ami a jövőben a gépi látásban, azon belül is az alak és arcfelismerésben nagy szerepet fog játszani. A szenzor által szolgáltatott 3D adatok, és az ezeket felhasználó OpenNI és NITE framework komponensek segítségével robosztus módon lehet teljes alak felismerést és követést, kézfej követést és gesztus felismerést alkalmazni. Az eszköz alapvetően beltéri felhasználásra lett kialakítva, és a paraméterei alapján egy átlagos nappali (kisebb terem) megfigyelésére alkalmas. Ezen belül tetszőlegesen képes mozgó alakok felismerésére, azonosítására és szkeleton adatok 3D térben történő illesztésére (relatív pozícióval a szenzorhoz viszonyítva), függetlenül a megvilágítástól és az emberek öltözködésétől (egykét extrém kivételtől eltekintve). A felhasználási lehetőségek között minden olyan területet megpróbáltam feltérképezni, ahol a teljes alakfelismerés és követés hasznos lehet. Több izgalmas megoldással találkoztam (kiterjesztett valóság, robot vezérlés), és egy saját ötleten alapuló (és további végiggondolásra, kidolgozásra váró) alkalmazását is bemutattam: gesztuskód, és a KINECT mint biometriai szenzor. A kutatómunka során talált meglévő alkalmazások többsége az emberi alak követésére markeres megoldást használ, általában a célra speciálisan kiépített stúdióval. Az egykamerás megoldások körében robosztus megoldás a teljes alak felismerésre és követésre nem igazán létezik, a meglévő megoldások többnyire olyan megszorításokkal működnek csak, amik a megoldás felhasználhatóságát erősen csökkentik (szín alapú markerek használata; egy adott irányba nézve működő megoldások). A létező megoldások többsége azért van nagy hátrányban a KINECT-tel szemben (a KINECT-tel megvalósítható funkciók terén), mivel a 2D képekből 3D információ leszűrése alapvetően egy nehéz képfeldolgozási probléma.
23
8 Forrásjegyzék [1] http://en.wikipedia.org/wiki/Biometrics [2] http://techbiometric.com/ [3] http://en.wikipedia.org/wiki/Assisted_living [4] http://en.wikipedia.org/wiki/Activities_of_daily_living [5] OpenNI User Guide ( http://www.openni.org/documentation ) [6] NITE Algorithms notes 1.3 (PrimeSense Inc.) [7] PrimeSense NITE Controls 1.3.1 User Guide (PrimeSense Inc.) [8] http://en.wikipedia.org/wiki/Kinect [9] http://opencv.willowgarage.com [10] Bayesian Estimation of 3-D Human Motion (Michael E. Leventon, William T. Freeman; TR98-06, 1998) [11] D. M. Gavrila and L. S. Davis. 3-d model-based tracking of humans in action: a multi-view approach. In Proc. IEEE CVPR, pages 73{80, 1996. [12] I. A. Kakadiaris and D. Metaxas. 3d human body model acquisition from multiple views. In Procp. 5th Intl. Conf. on Computer Vision, pages 618{623. IEEE, 1995. [13] http://www.organicmotion.com [14] http://www.stanford.edu/group/biomotion/ [15] http://mocap.cs.cmu.edu/ [16 ] http://en.wikipedia.org/wiki/Markov_chain [17] A Study on Smoothing for Particle-Filtered 3D Human Body Tracking (International Journal of Computer Vision, Volume 87, 2010 március) [18] http://www.faqs.org/patents/asn/62087 [19] Range mapping using speckle decorrelation (United States Patent 7433024, PrimeSense Ltd.) [20] http://graphics.stanford.edu/~mdfisher/Kinect.html
24