Valós idejű gesztusfelismerő szoftver tervezése és fejlesztése GPU-n Microsoft Kinect szenzor segítségével. Mérnök Informatikus BSc Szakdolgozat



Hasonló dokumentumok
OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Neurális hálózatok bemutató

OpenCL - The open standard for parallel programming of heterogeneous systems

Iman 3.0 szoftverdokumentáció

Intelligens Rendszerek Gyakorlata. Neurális hálózatok I.

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Keresés képi jellemzők alapján. Dr. Balázs Péter SZTE, Képfeldolgozás és Számítógépes Grafika Tanszék

Teszt: Az nvidia GeForce kártyák Crysis 2-ben mért teljesítménye

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

Számítógépes képelemzés 7. előadás. Dr. Balázs Péter SZTE, Képfeldolgozás és Számítógépes Grafika Tanszék

Teszt Az nvidia GeForce VGA kártyák gyakorlati teljesítménye a Dirt3-ban

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Regresszió. Csorba János. Nagyméretű adathalmazok kezelése március 31.

Hibadetektáló rendszer légtechnikai berendezések számára

GPU-Accelerated Collocation Pattern Discovery

Rubin SPIRIT TEST. Rubin firmware-ek és hardverek tesztelése esettanulmány V1.0. Készítette: Hajnali Krisztián Jóváhagyta: Varga József

ASUS X455LD-WX045D (X455LD-WX045D)

3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás

Számítógép felépítése

Szoftver újrafelhasználás

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Mit látnak a robotok? Bányai Mihály Matemorfózis, 2017.

3D számítógépes geometria és alakzatrekonstrukció

I. LABOR -Mesterséges neuron

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

Bruttó ár: 0 Ft. Háttértár mérete: Háttértár típusa: Lemez meghajtó: Kijelző méret: LED háttérvilágítás, 16:9 képarány

Kiterjesztett valóság (Augmented Reality) alkalmazási lehetősége a villamosenergia iparban

RIEL Elektronikai Kft v1.0

Szakdolgozati, TDK témajavaslatok

A számítógépek felépítése. A számítógép felépítése

Grafikus csővezeték 1 / 44

Programozó- készülék Kezelőkozol RT óra (pl. PC) Digitális bemenetek ROM memória Digitális kimenetek RAM memória Analóg bemenet Analóg kimenet

Toshiba Satellite L50-C-15E (PSKWTE-00N008HU)

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.

Utolsó módosítás:

Bodó / Csató / Gaskó / Sulyok / Simon október 9. Matematika és Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár

ARM Cortex magú mikrovezérlők. mbed

Informatika Rendszerek Alapjai

Máté: Számítógépes grafika alapjai

Hogyan kell 3D tartalmat megtekinteni egy BenQ kivetítőn? Minimális rendszerkövetelmények 3D tartalom lejátszásához BenQ kivetítőn:

Új kompakt X20 vezérlő integrált I/O pontokkal

Dell Inspiron 3567 i3 notebook

VIRTUALIZÁCIÓ KÉSZÍTETTE: NAGY ZOLTÁN MÁRK EHA: NAZKABF.SZE I. ÉVES PROGRAMTERVEZŐ-INFORMATIKUS, BSC

Fuzzy rendszerek és neurális hálózatok alkalmazása a diagnosztikában

Magas szintű optimalizálás

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Orvosi készülékekben használható modern fejlesztési technológiák lehetőségeinek vizsgálata

AliROOT szimulációk GPU alapokon

Tanulás az idegrendszerben. Structure Dynamics Implementation Algorithm Computation - Function

Bepillantás a gépházba

Android Commander Felhasználói kézikönyv

PolyVision illesztőprogram Kibocsátási megjegyzések 2.2. változat

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program

Mérés, Vezérlés. mérésadat rögzítés CMC - 99 CMC kis és nagytestvér

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

Lenovo Ideapad YOGA M1001BHV (80M1001BHV)

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

Példák jellemzőkre: - minden pixelérték egy jellemző pl. neurális hálózat esetében csak kis képekre, nem invariáns sem a megvilágításra, sem a geom.

DELL Vostro MONET14SKL1605_011_UBU-11

elektronikus adattárolást memóriacím

Utolsó módosítás:

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

Még gazdagabb játékélményt ígér a SIE új csúcskonzolja, a PlayStation 4 PRO

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

Norway Grants. Az akkumulátor mikromenedzsment szabályozás - BMMR - fejlesztés technológiai és műszaki újdonságai. Kakuk Zoltán, Vision 95 Kft.

Új módszerek és eszközök infokommunikációs hálózatok forgalmának vizsgálatához

GPU alkalmazása az ALICE eseménygenerátorában

A tervfeladat sorszáma: 1 A tervfeladat címe: ALU egység 8 regiszterrel és 8 utasítással

Párhuzamos és Grid rendszerek

Bánhelyi Balázs, Csendes Tibor, Palatinus Endre és Lévai. Szeptember 28-30, 2011, Balatonöszöd, Hungary

Mobil operációs rendszerek. Készítette: Kisantal Tibor

WAGO PLC-vel vezérelt hő- és füstelvezetés

HAWK-3. Az OMSZ saját fejlesztésű időjárási megjelenítő rendszere

DebitTray program Leírás

Kameleon Light Bootloader használati útmutató

A szerzõrõl... xi Bevezetés... xiii

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

TERC V.I.P. hardverkulcs regisztráció

Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs rendszerek Tanszék. Neurális hálók. Pataki Béla

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

6.2. TMS320C64x és TMS320C67xx DSP használata

AUGMENTED REALITY KITERJESZTETT VALÓSÁG TARTALOMJEGYZÉK. Czéhner Tamás

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

ROBOT IRÁNYÍTÁS INFRAVÖRÖS LED TÖMBBEL

Operációs rendszerek. Az X Window rendszer

Szimulációs technikák

Játékfejlesztés a Windows Phone 7 erejével

Beltéri autonóm négyrotoros helikopter szabályozó rendszerének kifejlesztése és hardware-in-the-loop tesztelése

2000 Szentendre, Bükköspart 74 MeviMR 3XC magnetorezisztív járműérzékelő szenzor

Számítógépes Grafika SZIE YMÉK

Win 8 változatok. 2. sz. melléklet felnottkepzes@gmail.com. Töltse ki az előzetes tudásszint felmérő dolgozatot!

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

Megoldás. Feladat 1. Statikus teszt Specifikáció felülvizsgálat

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Rendszámfelismerő rendszerek

Informatika A versenyzők a feladatlapot mindkét kategóriában a II. kategória első fordulójának kivételével csak elektronikus formában kapják meg

Lenovo Ideapad G Q5000VHV

Átírás:

Valós idejű gesztusfelismerő szoftver tervezése és fejlesztése GPU-n Microsoft Kinect szenzor segítségével Mérnök Informatikus BSc Szakdolgozat Készítette: Cserháti Sebestyén Konzulens neve: Cserey György, Rák Ádám Pázmány Péter Katolikus Egyetem Információs Technológiai Kar 2013

Nyilatkozat Alulírott Cserháti Sebestyén, a Pázmány Péter Katolikus Egyetem Információs Technológiai Karának hallgatója kijelentem, hogy ezt a szakdolgozatot meg nem engedett segítség nélkül, saját magam készítettem, és a szakdolgozatban csak a megadott forrásokat használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen a forrás megadásával megjelöltem. Ezt a Szakdolgozatot más szakon még nem nyújtottam be. Cserháti Sebestyén 2

Absztrakt Az utóbbi pár évben bekövetkezett számítástechnikai fejlődésnek köszönhetően új, természetes viselkedésből eredő felhasználói felület alakult ki. A felhasználó a számítógéppel fizikai érintkezés nélkül testmozgásával és hangjával képes kommunikálni a közelében elhelyezkedő szenzorok segítségével. A szenzorok a számítógéphez csatlakoznak, ami a kapott adatok feldogozásával állapítja meg az elvégzendő feladatot. A gesztusfelismerés az informatika egy ágazata, mely az emberi mozdulatsorokból nyert adatok felismerésével, feldolgozásával foglalkozik. A videokártyák evolúciójának révén napjainkra általános célú feladatok elvégzésére is használhatók, így alkalmazásuk immár nem csak grafikai számításokra korlátozódik, ezzel új lehetőségeket teremtve a fejlesztőknek. Ilyen általános feladat lehet egy klasszifikációs eljárás futtatása, mely gesztusfelismerésre is használható. Ennek a projektnek a célja egy olyan szoftver megvalósítása, amely a Microsoft Kinect szenzor adatait felhasználva előre megadott kézgesztusok felismerésére képes GPU-n, illetve CPU-n futtatott algoritmusokkal. Az elkészítendő szoftvernek legalább tíz előredefiniált gesztust fel kell ismernie valós időben, és be kell tudnia mutatni azt, hogy a felismerő algoritmus futtatása GPU-n adott inputok esetén milyen előnyöket nyújt a CPU-n való futtatással szemben. 3

Abstract Recent developments in information technology led to the emergence of a new type of humancomputer interface, the Natural User Interface. This enables the user to communicate with the computer using gestures, motions and voice, through nearby sensors, without a need for physical contact. Sensors are connected to the computer, which processes the received data to infer the task to perform. Gesture recognition is a branch of computer engineering, which is concerned with recognizing and processing human gesture and motion data. In the last few years, advanced graphics hardware has been able to perform general-purpose tasks. Thus, their usage is not limited to graphics-related computations, opening up new possibilities for developers. A suitable general-purpose task is the execution of a classification algorithm for gesture recognition. The objective of this thesis project is implementing an application for recognizing predefined gestures throguh algorithms ran on the CPU and the GPU, based on the data of a Microsoft Kinect sensor. The final software should be able to distinguish at least ten different gestures in real time, and demonstrate, that the GPU-based implementation has advantages over the CPUbased one in the case of certain inputs. 4

Tartalomjegyzék 1. Bevezetés és motiváció...6 2. Gesztusfelismerés...8 2.1. A gesztusok bevitelére szolgáló eszközök...8 3. Microsoft Kinect szenzor...11 3.1. Kinect for Windows SDK...12 3.2. Openkinect Libfreenect...12 3.3. Az OpenNI (Open Natural Interaction) keretrendszer...13 4. Az OpenNI keretrendszer csontvázkövetéssel kapcsolatos szolgáltatásai...14 4.1. NITE Middleware...14 4.2. TipTep Skeletonizer Middleware...15 4.3. 3D Hand Tracking Middleware...15 4.4. GST API Middleware...15 5. Általános célú GPU programozás...16 5.1. Összehasonlítása CPU-val...16 5.2. CUDA...17 5.3. OpenCL...18 5.4. Működés...18 6. Szoftverterv...19 6.1. A felhasznált adatok...19 6.2. Momentumok...19 6.3. Perceptron alapú gesztusfelismerés...21 6.4. Neurális hálózat használata...22 7. Az alkalmazás megvalósítása...26 7.1. Komponensek...26 7.2. Grafikus program...30 7.3. Funkciók...32 7.4. Felhasznált programkönyvtárak...32 7.5. A felhasznált programok és CASE eszközök...33 7.6. Az algoritmusok értékelése...33 8. Mérések különböző GPU architektúrákon...34 8.1. Tesztelt hardverek...34 8.2. Eredmények...35 9. Összefoglalás...36 9.1. Példa gyakorlati alkalmazásra...36 5

1. Bevezetés és motiváció Az utóbbi évek számítógépes technológiai fejlődésének köszönhetően egyre nagyobb teret kap az gesztus alapú vezérlés. Növekszik elterjedése az érintőképes telefonok, és a különböző szenzorokat használó játék konzolok térhódításával párhuzamosan. Ezek mellett számos ma kapható személyi számítógép rendelkezik ezzel a megoldással touchpad-ja révén. A legújabb játékkonzolok között megtalálható olyan, melynek szenzorai az utasításokat mindenféle fizikális érintkezés nélkül, csak a felhasználó mozgásából, illetve hangjából nyeri. Ezek a megoldások a játékkedvelőknek újdonságot, szórakozást, a fejlesztőknek pedig újabb kihívásokat jelentenek, hiszen USB port segítségével nem csak a konzolokhoz, hanem bármely személyi számítógéphez csatlakoztathatók. A szenzor által szolgáltatott adatok algoritmikusan feldolgozhatók a számítógép, és a benne található videokártya processzorával is. A grafikus processzorok fejlődésének eredményeképp felhasználásuk ma már nem csak három dimenziós számításokra és megjelenítésre korlátozódik, általános számítási feladatok is végezhetők velük. Ezek a számítások sokszor jóval rövidebb futási időt tesznek lehetővé, mintha a központi processzoron lettek volna elvégezve. A dolgozat ezen területek lehetőségeinek feltárásával foglalkozik. Az előzetes irodalom kutatást követően a tervezésen, és megvalósításon keresztül mutat be egy olyan gesztus detektáló GPU-n működő megoldást, mely adatait a Microsoft Kinect szenzorától nyeri. Az elkészült programot felhasználva vizsgálja a feldolgozási sebességeket különböző videokártyákon. A fő motiváció megállapítani, hogy a gesztusfelismerő feladat GPU-n való megvalósítás esetén milyen hatékonyan végezhető. A dolgozat felépítése: Bevezetés A 2. fejezet a gesztusfelismerés feladatát és beviteli eszközeit ismerteti a létező megvalósítási módokkal együtt. A 3. fejezetben bemutatásra kerül a Microsoft által gyártott Kinect szenzor, annak működése és felépítése, ezen kívül felsorolásra kerülnek lehetséges szoftveres interfészei. A 4. fejezet az egyik legnépszerűbb szoftveres interfész, az OpenNI csontvázkövetéssel kapcsolatos szolgáltatásait mutatja be. A 5. fejezet az általános célú GPU programozás alkalmazásában rejlő lehetőségeket írja le. 6

Feltárásra kerülnek az alapfogalmak, kitérve a CPU-tól való architekturális, és fejlesztésbeli különbségekre, illetve bemutatásra kerülnek a legelterjedtebb keretrendszerek. Tervezés Az 6. fejezet a felhasznált matematikai megoldásokkal foglalkozik. Megállapítja az adott feladathoz leginkább illeszkedő modellt, és az ennek megfelelő adatreprezentálást. Tárgyalásra kerül néhány, a szakmában használt detekciós megoldás, először általánosan elmagyarázva működésüket, végül rámutat az egyes megoldások alkalmazhatóságára a készülő programban. A 7. fejezet témája az elkészített alkalmazás tervezésének, illetve működésének bemutatása. Bemutatja a szoftver felépítését és a szoftver fejlesztése során használt CASE eszközöket. Mérések A 8. fejezet az elkészített szoftver segítségével készített detekciós algoritmus futási eredményeit hasonlítja össze a néhány, jelenleg is kapható, különböző szegmensből érkező videokártya segítségével. A 9. fejezet egy példát mutat be lehetséges gyakorlati alkalmazásra, és összefoglalja a dolgozatban elért eredményeket. 7

2. Gesztusfelismerés A Natural User Interface (továbbiakban NUI) egy olyan rendszer, amely az ember és a számítógép közötti kommunikációra szolgál oly módon, hogy bemenete a természetes hétköznapi emberi viselkedésből, a gesztusokból ered. A számítástechnikában régebben a konzolos, mára grafikus interfésszel rendelkező alkalmazások terjedtek el, a NUI a legújabb megoldás, amely máig fejlődés alatt áll. Legnagyobb felhasználási területe jelenleg a konzolos játékipar, de az elkövetkező években olyan területeken is elterjedhet, mint a híradástechnikai vagy számítástechnikai eszközök távirányítása, vagy éppen a gyógyászati és rehabilitációs, illetve sportolással kapcsolatos megfigyelések analizálása. Ezen gesztusok felismerése egy számítógépes tudomány, melynek célja az egyes, a felhasználó által előre definiált mozdulatsorokat matematikai algoritmusokkal felismerni. A gesztusok bármely mozdulatsor állapotváltozásából számíthatók, bármely testrészből megállapíthatók, de általános felhasználásban a fej, illetve kéz mozdulatokat használják. Célja a számítógéppel megismertetni az emberi test mozgását, ezzel egyfajta új felhasználói input felületet teremtve a számítástechnika számára, melyben nincs szükség semmilyen mechanikus berendezésre. A hagyományos parancssoros, illetve grafikus interfészek kényelmes használhatóságát az egér, és a billentyűzetek korlátozzák. Ez az új módszer teret nyit egyéb beviteli eszközök előtt, illetve lehetőséget ad az eddigi eszközök új megvilágításba helyezésére. Típusai: Offline: Azok a gesztusok, melyek az interakció után lesznek feldolgozva. Például egy vezérlési feladatnál a karlendítés, melynek teljes mozdulatsora dinamikája - ismert kell, hogy legyen a feldolgozáshoz. Online: Azok a gesztusok, melyek azonnali manipulációt végeznek. Ilyen például egy touchpad-on, vagy okostelefon kijelzőjén végzett nagyító gesztus. 2.1. A gesztusok bevitelére szolgáló eszközök Adatkesztyű: Egy kesztyű, ami a kéz bizonyos csuklópontjain valamilyen szenzorral van ellátva. Ez a 8

szenzor lehet például giroszkóp, gyorsulásmérő, vagy magnetométer. Ennek segítségével pozíciós, és elfordulási információk nyerhetők ki a csuklópontokról. Egyes készülékek képesek haptikus visszajelzést adni, így keltve az érintés érzetét. Ez a megoldás költséges, és az esetleges adatkábelek miatt kényelmetlen is lehet, ugyanakkor igen precíz adatokkal szolgálhat. Mélység kamera: Olyan speciális kamera, amely a látott térről képes mélységképet előállítani. A kép az egyes pixel pozíciókban levő szín értékek helyett egy mélység értéket tárol, melyet általában szürke skálás szín értékre normálnak. A mélység képből az emberi forma kinyerhető, illetve csuklópontjai meghatározhatók. A mélység adatot strukturált megvilágítással, vagy Time of Flight (továbbiakban ToF) módszerrel nyeri. A ToF módszer lényege, hogy az ismert fénysebesség segítségével a távolság meghatározható egy objektum megvilágításával, és az arról visszaverődött fény visszatérésének időkülönbségével. A két technológia között a legfőbb eltérés a látótávolságban, és a fényérzékenységben mutatkozik meg. Az egyszerűbb infra fényt használó kamerák mára olcsón hozzáférhetők, kültéren a napfény miatt nem, de beltéren kényelmesen használhatók főleg beviteli eszközként. A legismertebb ezek közül a Microsoft által gyártott Kinect szenzor. A ToF kamerák drágábbak, kültéren is használhatók, főleg az iparban alkalmazzák őket különböző feladatok megoldására. Sztereó kamera: Két egyforma kamera használatával - melyeknek az egymáshoz képesti elhelyezkedése ismert - generálható egy mélység kép, ennek arányai nem feltétlenül helyesek, de ahhoz elegendők, hogy az emberi alakzat könnyen kiszűrhető legyen ezáltal előkészítve az adatot a további feldolgozásra. A két kamera közötti reláció kiszámítására ma már több megoldás is fellelhető, legtöbbjük egy egyszerű sakktáblával elvégezhető. (pl. OpenCV keretrendszer StereoCalibrate szolgáltatása). Általános kamera: Bármely két dimenziós kamera használható gesztusfelismerésre oly módon, hogy a felismerő algoritmusok képfeldolgozási feladatokat végeznek. Ennek előnye, hogy nem szükséges speciális berendezés hozzá, ugyanakkor bonyolultabb szoftver alapú felismerési eljárás készítése szükséges. A nagyobb cégek által készített megoldások pontosságban nem maradnak el a mélység kamerás megoldásoktól. 9

Vezérlő alapú gesztusok: Olyan eszközök, melyekkel az interakció során a felhasználónak érintkeznie szükséges. Jó példa egy érintőképernyő, vagy touchpad, ahol a felhasználó a gesztust a felületekhez súrlódva teszi. Ilyen eszköz a Nintendo Wii, vagy a Playstation Move elnevezésű távirányítója, ezeket a felhasználó a kéz meghosszabbításaként használja. Algoritmusok: A beérkező adatoktól függően a felismerés különféle módokon történhet. Megkülönböztetünk három dimenziós modell alapú, és megjelenés alapú algoritmusokat. A három dimenziós modell lehet volumetrikus, illetve csontváz alapú. A volumetrikus megvalósítást főleg a számítógépes animáció iparágban használják. A modellek bonyolult, három dimenziós felületekből épülnek fel, melyek állapot-változásainak felismerése komoly számítási képességet igényel. A csontváz alapú modell csak a csukló pontokat veszi figyelembe, a későbbi számítások csak ezen paraméterek felhasználásával történnek. Ezzel drasztikusan csökken a számítási igény, így gyorsabb algoritmusokat eredményez, illetve a feldolgozás a test bármely csuklópontjára felhasználható. Az egyes csuklópontok három dimenziós pozíciós és orientációs adatai rendelkezésre állnak. A megjelenés alapú modellnél a paramétereket magáról a két dimenziós a képről, illetve a videó esetén kép szekvenciáról számolja egy template-elt adatbázis segítségével. Ennél a módszernél sok képfeldolgozási feladat elvégzése szükséges, ugyanakkor a szegényesebb rendelkezésre álló adatok ellenére igen hatékony megvalósításai léteznek. 1. A gesztuskövetés különböző követési és analizálási módjainak hierarchikus ábrája (forrás: www.wikipedia.org) 10

3. Microsoft Kinect szenzor A Microsoft Kinect egy mozgást észlelő eszköz, amit a Microsoft az általa gyártott XBox 360 játékkonzolhoz készített. A cél egy NUI-t megvalósító eszköz elkészítése volt, amely konkurenciaként szolgál a Nintendo Wii, és a Playstation Move kontrollereinek. Ez az előzőekben említettekkel szemben semmiféle fizikai kontaktust nem igényel, mindössze a felhasználó testi viselkedésének és hangjának megfigyeléséből nyeri bemeneti adatait. Több szenzorból épül fel, elől találhatók a színes, és a mélység kép rögzítésére alkalmas kamerák. Ezek felbontása 640x480, és 30 Hz-es frekvencián működnek. A mélység kamera részei egy megvilágító, amely egy infra hálót vetít maga elé, illetve egy infra tartományt látó lencse, amely képes az előzőleg említett hálót látni. A mélység képet az észlelt infra háló eltorzulásából kreálja. Az eszköz ezen kívül rendelkezik tömb mikrofonokkal, egy baloldalt, három pedig jobboldalt helyezkedik el. Ezek segítségével a kapott hangbemenet térbeli irányát is képes feltérképezni. Az eszköz a sajátos hosszúkás formáját ezen mikrofonok elhelyezkedése miatt kapta. A talp felfüggesztésénél elektromos motorral rendelkezik, ezzel a kamerák dőlésszögét automatikusan is képes állítani, amennyiben látóteréből valamely fontos adat (például az emberi fej) hiányát érzékeli. 2. A Microsoft Kinect szenzor felépítése (az eredeti kép forrása: gamesforkinect.org) 11

3.1. Kinect for Windows SDK 2011 nyarán a Microsoft kiadta a Windows 7 operációs rendszerre szánt hivatalos fejlesztői környezetét, a Kinect for Windows SDK-t, amely magában foglalta a driver-eket, és lehetőséget biztosított számos programozási nyelven való hozzáférésre (C++, C#, Visual Basic) Visual Studio fejlesztői környezetben. Ingyenesen letölthető, hozzáférhető, ugyanakkor kereskedelmi célokra nem használható. Szolgáltatásain keresztül elérhető a mélység, és a színes kép folyam. Bizonyos hangfeldolgozási feladatok megoldására és szövegfelismerésre is alkalmas. Nem utolsó sorban képes volt csontvázkövetésre maximum két fő esetén. 2012 tavaszán újabb verziót adtak ki, amelyben továbbfejlesztették a csontvázkövetést, kibővítették a szövegfelismerési funkció nyelveit, és újabb országokban tették elérhetővé. Ezen kívül újabb funkciókkal is bővült, mint például felvételi, vagy visszajátszási lehetőség. A csontvázkövetés immáron nem csak álló, de ülő helyzetben is képes az emberi felsőtest követésére. 3. A Microsoft Kinect for Windows SDK adatai által megjelenített csontváz modellek (forrás: blogs.msdn.com) 3.2. Openkinect Libfreenect Nyílt forrású keretrendszer Microsoft Kinect szenzor adatainak eléréséhez, amit az OpenKinect Community fejleszt. Több platformon is elérhető, jelenleg elérhető szolgáltatásai közé tartozik a színes, és a mélység kép lekérése, illetve a mozgató motor vezérlése. A hang szolgáltatások éléréséhez szükséges interfészének fejlesztése jelenleg folyamatban van. Szolgáltatásai számos programozási nyelven elérhetők (C/C++, C#, Java, Matlab, Python, Ruby). 12

3.3. Az OpenNI (Open Natural Interaction) keretrendszer Az OpenNI egy ingyenesen használható, a PrimeSense által fejlesztett keretrendszer mely különböző NUI-k, így például mélység kamerák jeleinek eléréséhez és feldolgozásához biztosít szolgáltatásokat. Kezdetben a Microsoft Kinect szenzort támogatta, később kiegészült a hasonló elven működő Asus Xtion és a PrimeSense szenzor támogatásával is. Felépítése réteges, a legmélyebb réteg feladata elfedni a hardvert, és egységes kimenetet biztosítani a következő rétegek számára. A következő rétegben helyezkednek el az úgynevezett Middleware alkalmazások, melyek az alap OpenNI szolgáltatásokat használva állítanak elő különböző kimeneteket, amiket az eggyel feljebb levő rétegbeli célalkalmazás használ. A réteges felépítés előnye, hogy az elkészített szoftver, szenzor cseréje, vagy új szenzor támogatása esetén nem igényel nagy változtatásokat, csupán a legalsó réteg módosítása szükséges. Szolgáltatásai elérhetők, ugyanakkor megvalósításai zártak, ennek ellenére használható kereskedelmi célokra is. 4. Az OpenNI rétegelt architektúrája (forrás: www.primesense.com) 13

4. Az OpenNI keretrendszer csontvázkövetéssel kapcsolatos szolgáltatásai A feladat megvalósításához a Microsoft Kinect szenzora lett felhasználva. Ennek oka, hogy népszerűségének, illetve alacsony árának köszönhetően elterjedt és könnyen hozzáférhető. A rendelkezésre álló szenzor működéséből adódóan a detekció a fentebb említett összes módon történhetne, hiszen rendelkezik mélység képpel, amiből volumetrikus modell és csontváz is építhető, illetve rendelkezik színes kamerával, amivel megjelenés alapú megoldás is elvégezhető. Az előzőekben felsorolt szoftveres interfészek és azok lehetőségeinek ismeretében jelen feladathoz a csontvázkövetéses megvalósítás a leghatékonyabb módszer. A szoftverrel kapcsolatban alapvető elvárás a több platformon való futtathatóság, így a Microsoft saját megoldása ebben az esetben nem a legmegfelelőbb választás. A Libfreenect önmagában nem rendelkezik csontvázkövetés szolgáltatással, de léteznek erre épülő, mások által készített megoldások, mint például az Igalia Skeltrack nevű program könyvtára, mely a felsőtest és a fej követésére képes. A legtöbb lehetőség az OpenNI keretrendszerhez készült, mint Middleware szoftver és programkönyvtár, a felhasznált modul tehát a következőkben felsorolásra kerülők közül lett kiválasztva, mivel egyes esetekben megjelenhet egyszerre a platformfüggetlenség, és a több szenzoros felhasználási lehetőség is, így az alábbiakban ezek kerülnek bemutatásra. 4.1. NITE Middleware Az első, és egyben a legnépszerűbb, az OpenNI szolgáltatásait igénybe vevő middleware, melyet maga a PrimeSense fejleszt. Fő szolgáltatása a mélység képből az ember kiszűrése, illetve az arra való virtuális csontváz illesztés, és ezen való gesztusfelismerési feladatok elvégzése. 5. A szenzor által generált mélység kép, és a NITE csontváz csuklópontjai 14

Algoritmusai optimalizáltak, minimális processzor használat jellemzi. Több platformon (Windows, Linux, Mac OS, Android), illetve architektúrán (x86, ARM) elérhető. Egy időben több felhasználó csontvázának követésére is képes. A virtuális csontváz tizenöt csuklópontból áll, melyek pozíciós koordinátái és orientációi elérhetők. 4.2. TipTep Skeletonizer Middleware Egy nyílt forráskódú middleware, amely a kézfej köré képes virtuális csontvázat építeni, és a továbbiakban azt követni. Szolgáltatásai Windows alatt,.net keretrendszeren keresztül érhetők el. 4.3. 3D Hand Tracking Middleware Egy GPU gyorsítással rendelkező három dimenziós kézfejkövetést, és megjelenítést végző middleware. Nem csak a csontvázat, hanem a teljes kéz három dimenziós rekonstruálását is képes elvégezni. Lehetőséget nyújt külső, színes digitális tükörreflexes kamera képének felhasználására, így felhasználhatósága nem csak a mélység szenzor színes kamera képére korlátozódik. Azonban a GPU-s gyorsítás Nvidia CUDA programkönyvtárral működik, így szolgáltatásai csak Nvidia GPU-val rendelkező videokártyával felszerelt számítógépről elérhetők. Modern GPU-val szerelt videokártya mellett húsz képkockát képes egy másodperc alatt megjeleníteni. Ez az érték egyelőre nem éri el a széles körben használt 25 képkocka/másodperces szabványt, ugyanakkor a GPU-k architekturális fejlődésével a jövőben nőni fog. 4.4. GST API Middleware Egy csontvázkövetést, és testpózt felismerő keretrendszer, melyet a Global Sensing Technologies fejleszt. Csontvázkövetéshez a NITE middleware szolgáltatásait használja, azonban tudása kiegészül a testhelyzetek detektálásával, így képes megállapítani, hogy a felhasználó ülő, vagy álló helyzetben tartózkodik-e, keze felemelve, vagy leengedve helyezkedik-e el. Ezen kívül képes az adatok rögzítésére is. Felhasználása Windows operációs rendszeren lehetséges, Visual Studio IDE-ben C++ nyelven. 15

5. Általános célú GPU programozás Az elmúlt években bekövetkezett grafikus processzor (Graphical Processing Unit, továbbiakban GPU) architektúra fejlődésének köszönhetően kialakult az úgynevezett általános célú GPU programozás (General Purpose GPU Programming, továbbiakban GPGPU). Lényege, hogy az új architektúrát kihasználva a GPU-t nem csak grafikai számolásokra használjuk, hanem bármely más általános számítási feladatra. Így egyrészt tehermentesíteni lehet a CPU-t, hogy erőforrásait ezzel párhuzamosan más feladatokra használhassa fel, vagy teljesen kiváltani, mivel egyes feladatok sokkal gyorsabban elvégezhetők GPU-n. 5.1. Összehasonlítása CPU-val A lényeges különbség a CPU-val szemben, hogy a GPU-k sokkal több számítási egységgel rendelkeznek. Ezek az egységek jóval egyszerűbb felépítésűek, viszont egy adott feladatot párhuzamosan képesek végrehajtani. A jelenleg kapható CPU-k általában 2, vagy 4, illetve 8 magosak (például Intel Xeon E5 széria), ezek az egységek különböző adatokon különböző feladatokat tudnak végezni. Egy modern GPU, mint például jelenleg az Nvidia zászlóshajójának számító GeForce GTX Titan 2688 számoló egységgel rendelkezik, míg az AMD Radeon HD 7970 2048-al, ennek dupla GPU-val szerelt változata a Radeon HD 7990 pedig 4096 maggal. Ezek az egységek különböző adatokon azonos feladatokat tudnak elvégezni. A GPU-s megvalósítások lényege, hogy a számolásokat lassabban, de nagyon sok szálon végezze, így a teljesítmény növekedés lehetősége mindig egy feladat minél hatékonyabban végezhető párhuzamosíthatóságán múlik. 6. A CPU és a GPU Architektúra (forrás: selkie.macalester.edu) 16

5.2. CUDA A Compute Unified Device Architecture (továbbiakban CUDA) egy paralel számítási platform és programozási modell, melyet az Nvidia az általa gyártott videokártyákhoz fejlesztett kifejezetten GPGPU programozás megvalósítására. Hozzáférést biztosít a fejlesztőknek az NVidia kártyán található CUDA GPU-k virtuális utasításkészletéhez, és memóriájához. C,C+ +, és Fortran nyelven programozható, az első kettő az Nvidia LLVM alapú nvcc-vel fordítható, míg a Fortran fordítót a The Portland Group vállalat fejlesztette. Geforce 8-as szériától felfelé programozhatók segítségével Nvidia videokártyák, mivel ebben a szériában jelentek meg először az univerzális shader egységek. Egyszerre biztosít alacsony és magas szintű programozható interfészt a fejlesztők számára, melyek elérhetők Windows, Linux, és Mac OS operációs rendszeren. Nagy limitáció, hogy támogatása csak Nvidia kártyákra vonatkozik, így egy fejlesztési feladatnál komoly megfontolást kíván a felhasználása, mivel az OpenCL platform mind a két nagy gyártó termékeit támogatja, így elkerülhető a felesleges fejlesztés. 7. A CUDA platform programozási nyelvei és támogatott videokártyái (forrás: developer.nvidia.com) 17

5.3. OpenCL Az Open Computing Language (továbbiakban OpenCL) egy keretrendszer, amely arra lett létrehozva, hogy segítségével olyan programkódot lehessen előállítani, mely egyszerre tud futni különböző platformokon (pl. CPU, GPU, vagy jelfeldolgozó (DSP) processzorokon), ezekhez az eszközökhöz paralel megvalósítási lehetőségeket ad. Az OpenCL eszközökön futtatható kernel C99 nyelven írható, a host kód C, illetve C++ nyelven, a két legnagyobb videokártya gyártó termékei programozhatóak vele. Érdekesség, hogy az AMD a saját fejlesztésű GPGPU keretrendszerének, a CTM-nek (Close To Metal) támogatását megszüntette, és az OpenCL platform támogatására állt át. 5.4. Működés Mindkét megvalósítás azonos elven működik, szintaktikájuk is nagyon hasonló. A programok készítése során mindig van egy CPU-n futó rész, ami speciálisan a GPU-n futtatott függvények, a kernelek felparaméterezését és futtatását végzi [1]. A kernelek be-, és kimenő paraméterei általában nagy méretű tömbök. A kernel lefutásakor a GPU számoló egységei nagyon sok szálat elindítanak, amik az átadott tömb egy-egy adott indexén elvégzik a kernelben leírt feladatot. A kernelek futtatása előtt az adatokat fel kell tölteni a videokártya memóriájára, lefuttatás után pedig visszaolvasni a központi memóriába. A szálak munkacsoportokba szerveződnek, egymással csak azonos munkacsoportban levő szálak kommunikálhatnak, így a feladatok kiosztásánál ügyelni kell a megfelelő struktúrára és ütemezésre. A GPU-n három memória terület különböztethető meg: globális, lokális, vagy privát. A globális memória a kártyán helyezkedik el, ezt minden szál képes írni-olvasni, ugyanakkor a többi memóriához képest lassabb, így használata csak igen indokolt estben javasolt. A lokális memória a GPU chip-ben helyezkedik el, ezt az egy munkacsoporton belüli szálak képesek együtt elérni. A privát memória egy adott szálhoz tartozó memória. Ez a leggyorsabb, ugyanakkor mérete a legkisebb. Az optimális működés eléréséhez a megvalósítás előtt meg kell tervezni a munkacsoportok struktúráját, a közöttük levő kommunikációt, illetve azt, hogy mely memória területek kerüljenek felhasználásra. 18

6. Szoftverterv A szoftver implementációja előtt a detekciós algoritmusok, és azok bemeneteinek előfeldolgozása került megtervezésre. 6.1. A felhasznált adatok Jelen esetben a felismerendő gesztus mintákat egymást követő pontok halmazaként értelmezzük, amely a kéz mozgásának útvonalát követi. A gesztusfelismerő algoritmusok ezen ponthalmazt, illetve az ebből számolt néhány specifikus kép momentum értékeket kapják. Az útvonalak tíz pontot fognak tartalmazni, melyeknek a két dimenziós koordinátái lesznek felhasználva. A csontvázkövetés nagy sebessége miatt ez a tíz pont nagyon rövid útvonalat eredményez. Így a rendszer csak egy bizonyos távolság elmozdulása után vesz fel új pontot. Ezzel az eljárással egyben csökken a csontvázkövetés zajból eredő pontatlansága, illetve időfüggetlenné is teszi az egyes formák kreálását. A későbbi felhasználás céljából érdemes a kapott ponthalmazt normalizálni. Az egyes minták összehasonlítása nehézkes, mivel csak az azonos méretarányú, azonos pozícióban levő, azonos elforgású objektumok felismerhetők. Ezen korlátok kiküszöbölésére célszerű az úgynevezett kép momentum értékeket kiszámolni és a halmazhoz adni. 6.2. Momentumok Képfeldolgozás és számítógépes grafika területein használt eljárás a kép momentumok meghatározása. A momentumok adott súlyú átlagai a kép pixelinek. Segítségükkel pozíció, méret, és elforgatás invariáns detektálás végezhető. Jelen feladatnál ezek az értékek nem a teljes képre, hanem az összes detektálásra átadott ponthalmazra lesznek kiszámolva, ezzel próbálva mindegyikhez specifikus adatokat hozzáadni, melyeknek segítségével még inkább megkülönböztethetők lesznek egymástól [2]. Az egyes momentum értékek az előzőekből számolhatók, így kinyerésük kötött sorrendben történik. Legelőször az úgynevezett nyers momentumokat szükséges kiszámolni. M ij = x i y j I (x, y ) x y A képletben az I(x,y)-nal elem a denzitás, ami képfeldolgozás esetén a színt jelölné, jelen 19

feladatnál ez az érték mindig 1-gyel van megadva, mivel az útvonal halmaznál a színek nem számítanak. Ezek a nyers momentumok még nem invariánsak sem az eltolásra, a skálázásra, sem pedig a forgatásra, de segítségükkel megkaphatók az ezekhez megfelelő értékek. Ezután kiszámíthatók a transzláció invariáns momentumok, az úgynevezett centrális momentumok. Az alakzat, vagy kép súlypontja ezután könnyen megkapható. ( Xc,Yc)=( M 10 M 00, M 01 M 00 ) A további centrális momentumok ezen értékek segítségével digitális adatok alapján az alábbi formula alapján számíthatók: i j U ij = (x x c ) ( y y c ) I ( x, y) x y Annak érdekében, hogy az alakzat felismerést méretfüggetlenné tegyük, a skála invariáns momentum értékek kiszámítása szükséges. N ij = U ij 1+ i+ j U 00 2 Végül ezek felhasználásával a rotáció invariáns momentumok adhatók meg, melyek száma Hu halmaz esetén hét, illetve a Flusser-féle megadásban hat. 8. A rotáció invariáns momentumok számítási képletei (forrás: opencv.willowgarage.com) Jelen feladat megvalósításához az egyes útvonalakat vesszük mint képeket, és azok momentumait számoljuk, ehhez a Hu-féle hét momentumot használjuk. A szoftver a pontosabb detektálás érdekében így nem csak a normalizált trajektóriát, de a hozzá tartozó ugyancsak normalizált nyomatékokat is figyelembe fogja venni. 20

6.3. Perceptron alapú gesztusfelismerés A feladat első megközelítésben, perceptronok segítségével próbál meg detektálni. A perceptron egy mesterséges neuron, melynek a kimenetén szignum a nemlineáris függvénye. A mesterséges neuron egy matematikai modell, melyet biológiai modell ihletett. A neurális hálózatok egyik alapvető építő eleme, de bizonyos feladatok elvégzésére önmagában is képes. Bemenetén több elem lehet, melyeket egy darab kimenetre képez le, ennek értékei -1, illetve 1 lehetnek. Ezzel gyakorlatilag egy klasszifikációt végez, a térben egy hipersíkot képez, és eldönti, hogy az egyes bemenetek a hipersík mely oldalára esnek. Minden bemenethez tartozik egy súlyozó tényező. A perceptron összes bemenetét megszorozza a hozzátartozó súlyokkal, ezeket az értékeket összegzi, ezt az összeget egy meghatározott bias értékkel eltolja, végül ennek az értéknek visszaadja a szignumát, amely pozitív eredmény esetén +1-et, negatív eredmény esetén pedig -1 et ad eredményül. 9. A perceptron felépítése Látható, hogy N bemenetű perceptronhoz N+1 szabad paraméter tartozik, melyek a súlyok és a bias érték. Ezek megfelelő megadása határozza meg, hogy a perceptron milyen típusú bemeneteket fog tudni elválasztani. Egy perceptron egy mintáról döntheti el, hogy az általa beállított paraméterek alapján igaz, vagy hamis az értéke. A paraméterek beállítása a túl sok szabad paraméter miatt algoritmikusan történik, a célnak megfelelő választás lehet genetikus algoritmus implementálása, ám ennek futási ideje a mai számítógépes technikával napokig is eltarthat. A gyakorlatban az úgynevezett Rosenblatt tanuló algoritmus alkalmazása az elfogadott, ami egy felügyelt tanuló algoritmus, a tanítást tanulóhalmaz alkalmazásával végzi. A tanulóhalmaz egyes elemei bemenet, és a hozzá kívánt kimenet párosok. Ilyen módon megadható, hogy az egyes bemenetek a képzett hipersík mely oldalára essenek. Ez egy rekurzív algoritmus, mely bemenetét a tanuló halmazból, illetve az előző iterációk kimenetéből kapja. A rekurzió a súlyok halmazára vonatkozik, melyeknek az algoritmus 21

lefuttatása előtt kezdeti értéket kell adni. Az algoritmus ezeket a súlyokat lépésről lépésre finomítja, végül megragad egy optimális állapotban, ezután a súlyok értéke többet nem változik. 10. Perceptron tanító algoritmus folyamatábrája A készülő program lehetőségei között szerepel egy egyszerű perceptron hatékonyságának a kipróbálása. Minden detektálni kívánt, és előre rögzített trajektóriához egy perceptront szükséges alkalmazni, melynek bemenetén a trajektória koordinátái, illetve momentumai szerepelnek. A legfrissebb detektálni kívánt mintát minden változás után az összes perceptronnak átadjuk, és a szerint dől el, hogy melyik mintát választja, hogy melyik adott +1es kimenetet. A súlyok, és a bias beállítása Rosenblatt algoritmussal történik. A tanulóhalmazt úgy választjuk meg, hogy a detektálni kívánt trajektóriához a kívánt kimenetet +1-re állítjuk be, illetve felvesszük a halmazba az összes többi mentett mintát -1-es kimenettel. Ezzel a módszerrel csökkenthető az esetleges átfedés a döntések között. Ez a módszer akkor lehet igazán hatékony, ha relatíve kevés mintát szeretnénk egymástól megkülönböztetni, és a döntési tartományok között nem nagy az átfedés, mert ellenkező esetben többszörös detekció történik. 6.4. Neurális hálózat használata A feladat második második megközelítésben egy bonyolultabb struktúrát, neurális hálózatot használ, melynek erőforrás igénye nagyobb, ugyanakkor komplexitásából kifolyólag pontosabb detektálás végezhető vele. Mesterséges neuronokból hálózat építhető, oly módon, hogy az egyes neuronok kimeneteit következő neuronok bemeneteire kötjük, ezáltal sokkal komplexebb problémákat lehet megoldani. A szakmában a legjellemzőbb a teljesen visszacsatolt és előrecsatolt hálózatok használata [3]. 22

Hopfield hálózatok A teljesen visszacsatolt, vagy más néven Hopfield hálózatok bináris mintákkal betaníthatók és képesek asszociatív memóriaként működni a minták bináris reprezentálása mellett. Hebbi tanítással egy W súlymátrix képezhető. A megfelelő átmeneti szabállyal a hálózat egy bemenet hatására a betanított bemenetek állapotain iterál, majd egy idő után valamelyikben megragad. Ezzel a módszerrel csak optimális, de nem tökéletes megoldást kapunk, hiszen a rendszer a legtöbb esetben a lokális és nem pedig a globális minimumot találja meg. Az optimális megoldás megtalálása sok feladatnál kielégítő megoldás, főleg amellett, hogy O( N 2 ) idő alatt hajtja végre, így valós idejű futást eredményez. Előrecsatolt hálózatok Az előrecsatolt hálózatok olyan többrétegű hálózatok, melyekben az egyes neuronok kimeneteit a következő rétegben levő neuronok bemeneteire kötjük. 11. Előrecsatolt neurális hálózat felépítése A hálózat első rétege a bemeneti réteg, itt nem találhatók neuronok, csak az inputok, melyek a következő rétegben levő összes neuronnak az adott sorszámú bemenetei. Ezután következnek a rejtett rétegek amikből feladattól függően több is lehet. Végül a kimeneti rétegben található neuronok kimenetein jelenek meg az eredmények. 23

A neuronok kimenetein a perceptrontól eltérően nem a szignumot, hanem általában valamelyik gyengén nem lineáris függvényt alkalmazzák, így a végeredmények a kimeneteken tört számok is lehetnek. A szabad paraméterek az éleken levő súlyok, illetve az egyes neuronok eltolási értékei. A perceptronhoz hasonlóan itt is ezek behangolása határozza meg a hálózat működését. Meghatározhatók genetikus, vagy hegymászó algoritmussal, illetve taníthatók Error Back Propagation algoritmussal. Több területen is felhasználható, az egyik fő alkalmazási területe a klasszifikáció, melynél megadott inputokhoz adhatunk meg kívánt kimenetet, és ezek alapján a hálózat betanítható. Egy másik felhasználási terület valamely rendszer működésének a közelítése úgy, hogy csak a bemeneteket és a kimeneteket ismerjük. Ezen kívül elterjedt felhasználása az úgynevezett előrejelzés, melynél egy adott sorozat jövőbeli elemeit próbálják megbecsülni, ez leginkább a tőzsdén, és egyéb pénzügyi területeken játszik szerepet. A készülő program előrecsatolt hálózat felhasználásával detektál [4], a bemeneti rétege 25 elemből áll, ezek a trajektória koordinátái a kezdő, origóban levő pontot elhagyva, illetve a momentumok. A kimeneti rétegben annyi neuron található, ahány különféle gesztusra próbálunk detektálni. Az itt megjelenő kimenetek közül arra dönt, amelyik értéke +1, vagy ahhoz a legközelebb eső. A gesztusfelismerés felfogható úgy, mint egy klasszifikációs feladat, amelynél az egyes gesztusokhoz csoportokat rendelünk, így egy klasszifikációs neurális hálózat tervezése szükséges. A hálózat megtervezése Matlab Neural Networks toolbox-szal készült. A toolbox lehetőséget biztosít minta felismerő hálózat tervezésére és betanítására, így a szoftverben nem szükséges a tanító algoritmust implementálni. Ebben az esetben a tanítás helyett a szoftver, illetve a Matlab közötti adatcserét kellet megoldani. A Matlab-ban a mintafelismerő, és a hálózat tervezése, betanítása varázsló segítségével oldható meg. A varázsló automatikusan egy rejtett rétegű hálózatot tervez a neuronok kimenetein tangens hiperbolikus függvénnyel. A rejtett réteg méretét érdemes a bemeneti rétegnél háromszor nagyobbra választani, így a megvalósítás során ez az érték 80-ra lett beállítva. 12. A Matlab szoftverben tervezett hálózat 24

A betanított hálózat súlymátrixainak és eltolási vektorainak kimentése után az értékeket a szoftver induláskor betölti, és létrehozza a megfelelő hálózatot. Mind a két réteghez egy-egy súlymátrix és eltolási vektor tartozik. A kimeneti rétegben megjelenő értékek kiszámítása mátrix vektoros reprezentáció esetén a következő a következő képletekkel történik: L1=φ (W1 X1+B1) Out=φ(W2 L1+ B2) A képletekből látható, hogy a műveletek nagy része mátrixok vektorral való szorzása. Az eredményvektor egyes pozícióiban található részeredmények képzése párhuzamosan is elvégezhető feladat, ezt használja ki a detekció videokártyán történő megvalósítása. 25

7. Az alkalmazás megvalósítása A megvalósításnál a cél egy csontvázkövető és gesztusdetektáló middleware szoftver megírása volt, melynek szolgáltatásai egy jól definiált interfészen keresztül érhetők el. Megadható, hogy perceptronos, vagy előrecsatolt neurális hálózattal végezzen detektálást, illetve az algoritmust CPU-n, vagy GPU-n futtassa. Legyen képes percepron betanításra és neurális hálózat esetén Matlab szoftverből kapott paraméterek beállítására. Ez a modul egyrészt a NITE midleware-re épül, ennek következtében a rétegelt architektúrában felette helyezkedik el - mivel annak csontváz adataiból képzett mintákon végez detekciót - másrészt mellé is helyezhető, mivel csontváz adatokat képes tovább közvetíteni. A megírt middleware szolgáltatásainak demonstrálására, és a kitűzött mérések elvégzésére egy grafikus alkalmazás készült, mely az OpenNI rétegelt architektúrájának legfelső rétegében helyezkedik el. A grafikus programtól elvárás volt, hogy a képernyő baloldalán megjelenítse a követett csontvázat, legalább annak a csuklópontnak a frissítésével, melyre a detekciót végzi. Ezen kívül elvárás volt az utolsó tíz felvett pont megjelenítése, hogy a detektálásra átadott minta látható legyen. Jobb oldalon kell megjelennie a vezérlő gomboknak, illetve a kiíratásra szánt szövegmezőknek. 13. Az elkészített modulok elhelyezkedése az OpenNI rétegelt architektúrájában 7.1. Komponensek - Virtuális csontváz A implementálás első részében egy olyan modul megírása volt cél, amely a virtuális csontváz adatok feldolgozását, és más modulok számára való szolgáltatását végzi. Ennek a modulnak a 26

feladata a kamera jelének feldolgozása, és az ebből való csontváz modell készítésének a többi komponens elől való elfedése. Ennek következtében tartalmaznia kell az egyik lehetséges Kinect szenzorhoz készített szoftveres interfészt. A program a bemutatottak közül az OpenNI-t és annak a szenzorhoz kiadott driver-ét használja. Az adatok hozzáféréséhez a NITE midleware nyújt segítséget, amelyre a bemutatottak közül azért esett a választás, mert ugyancsak platform független, kis erőforrás igényű, és magát az OpenNI-t is fejlesztő PrimeSense készítette. Az adatok szolgáltatása előtt az egyik fontos feladata a felhasználó csontvázának megtalálása és elvesztésének kezelése. A csontvázkövető algoritmus is limitációkkal rendelkezik, így egyes testpozíciókban a csontváz megépítésére képtelen lehet, emiatt biztosítani kell, hogy ez esetben a program futása ne álljon meg, csak várakozzon amíg a felhasználó nem kerül olyan pozícióba, hogy a csontváz építés újra lehetségessé váljon. Ezzel egy időben az is lehetővé válik, hogy a felhasználó bármikor elhagyhassa a kamera látóterét, visszatérése után folytathassa a felhasználást. Ezek az osztály init() függvényébe kerültek bele. A másik fő feladata az adatok folyamatos szolgáltatása. Ez a szolgáltatás külön szálba került, mivel az őt felhasználó szoftver komponensek sebességét nem befolyásolhatja. A csontváz követett csuklópontjának utolsó állapotait egy körkörös buffer-ben tárolja, melynek az utolsó elemét egy külső hívás hatására tudja visszaadni. A külön szálba történő, buffer adatokkal való feltöltését a dograb() függvény végzi. Az utolsó állapotot a grab() tudja visszaadni. Ez az állapot egy XnVector3D típusú elem, amely a csuklópont háromdimenziós eltolási koordinátáit tartalmazza lebegőpontos ábrázolásban. 14. A SkeletonGrabber objektum UML osztálydiagramja 27

- Perceptron A perceptronnal való detekció megvalósítására egy külön osztály készült. A súly értékek és az eltolási bias érték a setbias(), illetve az addwheights() függvények segítségével állítható be. Ezen kívül implementálva lett a Rosenblatt tanító algoritmus mely a learn() meghívásával futtatható le. Ennek bemenete a tanításhoz használt minták halmaza illetve annak a mintának a sorszáma, amelyre a pozitív döntés az elvárt. A kimeneti értékét az output() adja vissza. 15. A Perceptron objektum UML osztálydiagramja - Neurális hálózat objektum A detekció második megközelítésében használt megoldása az előrecsatolt neurális hálózattal való detektálás. Ennek megvalósítására is külön osztály készült, ez az osztály egy két rétegű hálózatot képes tárolni és a kimeneti rétegben levő neuronok eredményét kiszámolni. A CPU-n történő feldolgozáshoz a processcpu(), a GPU-n történőhöz pedig a processgpu() függvények meghívása szükséges. A Matlab szoftverből kinyert, adott rétegekhez tartozó súlymátrixokat és eltolási vektorokat a loadparameters() szolgáltatás a Matlab által kimentett fájlokból tölti be. 16. A Neural Network objektum UML osztálydiagramja 28

- GPU A számítások GPU-n való futtatásához a rendszer az OpenCL keretrendszert használja, melynek felhasznált szolgáltatásai egy külön osztályba kerültek. Az objektum első feladata a kernel lefuttatásához szükséges környezet inicializálása ami az init() függvény meghívásával történik meg. Itt töltődik be a fájl, ami a mátrix vektor szorzását végző kernelt tartalmazza, és itt kapnak értéket a főbb osztályváltozók, illetve a későbbi számoláshoz szükséges súly és eltolási értékek. A detekciót a run() metódus végzi melynek bemeneti paramétere egy vektor, amely a hálózat bemenetén lévő értékeket tartalmazza, a kimeneti paramétere pedig a hálózat kimeneti rétegén lévő eredményeit tárolja. A számításokhoz egy mátrix vektorral való szorzását megvalósító kernel készült melyet az ffnn.cl fájl tartalmaz. A run() metódus ezt a kernelt hívja meg kétszer egymás után annyiszor, ahány réteget a hálózat tartalmaz, úgy, hogy az egyes rétegek kimenetei a következő rétegek bemenetei legyenek. A futtató lezárásához a close() meghívása szükséges, ez végzi az egyes lefoglalt objektumok felszabadítását. 17. A GpuRunner objektum UML osztálydiagramja - Pattern objektum A Pattern objektum végzi a detektálni kívánt adatok előfeldolgozását. A kapott pontokat normalizálja, majd kiszámítja a hozzájuk tartozó momentumokat és a mintához adja őket. Az objektum a számításokhoz tartozó segédváltozókat, és a momentum kiszámító függvényeket tartalmazza. 29

18. A Pattern objektum UML osztálydiagramja - Grecogn objektum A elkészült modulok összefogására, elfedésére, egységes interfészt megvalósító osztály lett létrehozva. A middleware-t felhasználó programok ennek az objektumnak egy példányán keresztül fogják az egyes modulok szolgáltatásait elérni. Az inicializálás az init() függvény meghívásával történik, amely paramétereiben megkapja, hogy a szoftver milyen módban indult, és elvégzi a szükséges előfeldolgozási feladatokat, mint például a szükséges adatok betöltését fájlból. A detect() meghívása esetén a megfelelő modullal elvégezteti az adatok előfeldolgozását, utána pedig a kiválasztott módon a detektálást, majd visszaadja, hogy a betanított minták közül melyik sorszámú volt az, amire a felismerés megtörtént. Ezen kívül továbbítja az olyan kéréseket a megfelelő modulokhoz, mint például a perceptronok betanítása. 19. A Grecogn objektum UML osztálydiagramja 7.2. Grafikus program Az elkészült middleware szolgáltatásainak kipróbálására egy grafikus program készült. A megjelenítés és az esemény kezelés Qt keretrendszer felhasználásával készült [5]. A csontváz adatokat a mainthreadloop() függvény folyamatosan kérdezi le a SkeletonGrabber 30

objektumtól, és amikor új adatot kap meghívja az paintevent() függvényt. Ez utóbbi a QWidget ősosztály egyik felüldefiniált függvénye ami a csontváz és a felvett pontok tényleges kirajzolását végzi. A felületre kirakott gombok eseménykezelésére a Qt Signal-Slot megoldást alkalmaz. Minden esemény képes kiváltani egy jelet, melyhez megfelelő függvény lefutása rendelhető, ezek az úgynevezett slot-ok. Az egyes nyomógombok által kiváltott clicked() jelre lettek bekötve az olyan on_saveperceptrons_clicked(). slot-okat Ezek megvalósító tartalmazzák függvények, az mint eseményhez várt például az tényleges megvalósítást, és mindig lefutnak, amikor a hozzájuk kapcsolt esemény kiváltódik. A Qt keretrendszer a kiváltott eseményeket kisorosítva hajtja vége úgy, hogy azokat egy sorba helyezi. Jelen programnál az eseménysor általában a rajzolással van tele, és ebbe a sorba jönnek a gombok által kiváltott események is. A kisorosítás ellenére a gyors lefutás miatt a felhasználó a programot mégis folyamatosnak, párhuzamosnak látja. 20. A MainWindow objektum UML osztálydiagramja Az implementált grafikus alkalmazás Model-View-Controller architektúrával készült, melynek lényege, hogy külön válik az alkalmazás logikája és adatkezelése a szoftver vezérlésétől, illetve a megjelenítéstől. 21 A grafikus alkalmazás objektumainak kapcsolatai, és elhelyezkedésük a Modell-ViewController architektúrában 31

A megjelenítés és a modell közötti kommunikációt a vezérlő objektum végzi, mely a modellben kialakult változás hatására a megjelenítésben is változást vált ki, illetve a megjelenítéstől is szállít információt a modellnek. Az architektúra nagy előnye, hogy a grafikus felület a vezérlő és a modell módosítása nélkül cserélhető, illetve továbbfejleszthető. 7.3. Funkciók A szoftver funkciói két különféle futási módban, offline és online érhetők el. Amikor kamera csatlakoztatása nélkül indul, a szoftver offline módba kerül, ekkor lehet az előzőlegesen kimentett mintákat visszatölteni, a perceptronokat betanítani, és kimenteni. Kamera csatlakoztatása esetén a szoftver online módban indul, ekkor a felhasználó megtalálását követően elkezdődik a kéz követése, illetve a detektálás. A követés és a detektálás megszakad, ha a felhasználó kilép a kamera látóteréből, ilyenkor a szoftver vár ameddig nem tud új emberi alakot azonosítani és a detektálást folytatni. 22. Képernyőkép az elkészült szoftverről minta rajzolása közben 7.4. Felhasznált programkönyvtárak A csontváz követéshez a szoftver az OpenNI keretrendszert és egy ahhoz tartozó middleware alkalmazást, a NITE-t használja. A GPU-n történő számolásokhoz az OpenCL keretrendszer nyújtotta a segítséget. A Grafikus megoldás, és a szálkezelés Qt programkönyvtárral készült. Boost programkönyvtár lett felhasználva körkörös buffer megvalósításra és annak szálbiztossá tételére. 32