Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Kézmozdulat felismerő rendszer
„Hands Up!” Kézmozdulat felismerő rendszer
2
Bemutatkozás Jelenlegi iskola:
Budapesti Műszaki Főiskola – Neumann János Informatika Kar - Szoftvertechnológia Intézet – Informatikai Automatizált Rendszerek Szakirány Érdeklődési kör: zene, képfeldolgozás
3
Célkitűzés Valós idejű gitár szimuláció
Szórakoztató, interaktív formában A projekt célja, hogy szórakoztató formába öntve, valós idejű kézdetektálást hajtson végre egy egyszerű webkamera segítségével. A felhasználó kézmozdulataival vezérelhet egy virtuális léggitárt.
4
Rendszer áttekintés Előfeldolgozás Értelmezés Hang előállítás
Kamera kép Előfeldolgozott kép Pengetés esemény Előállt hang Hang előállítás A rendszer megvalósításának az alappillére a webkamera, melytől a bemeneti adatokat, jelen esetben a képfolyamot kapjuk. A kamera képeinek feldolgozásánál elsődleges fontosságú a sebesség gyorsítása, hogy a felhasználóinak minél realisztikusabb élményben lehessen része. Ez okból kifolyólag a cél egy valós idejű rendszer tervezése. Ezen megfontolások alapján a rendszer vázát három fő modul képzi, amelyek a kamerából nyert kép alapján képesek a kezek felismerésére, azok pozícióinak meghatározására, majd ezen információk alapján kiválasztani az ahhoz legmegfelelőbb hangot. A legtöbb hasonló alkalmazás legnagyobb hátrány, hogy csak speciális körülmények között használható, például valamilyen kontrasztos háttér, vagy speciális eszköz, ezért nálunk elsődleges szerepe van a gyors és hatékony képfeldolgozásnak, hogy bármilyen háttér előtt működjön a rendszer.
5
Ablakok pozícionálása
Előfeldolgozás Simítás HSV konverzió Szegmentálás Előfeldolgozás Ablakok pozícionálása Értelmezés Kamera kép Előfeldolgozott kép Pengetés esemény Előállt hang Hang előállítás Az előfeldolgozó modul első feladata, hogy a kezdeti paramétereket beállítja. A teljes folyamat során a kezeket egy-egy ablakban figyeli a rendszer, így kevesebb pixel kevesebb műveleti időt igényel. A rendszer indításakor meg kell keresni a kezeket, aminek következtében a teljes képmérettel megegyeznek a kereső ablakok méretei. A következő fázisok után az alkalmazás még vissza fog térni ehhez a ponthoz, hogy az ablakméretet átállítsa akkorára, mely a megtalált kéz méreténél nem sokkal nagyobb. Miután a színkonverziót elvégeztük megkapjuk a szegmentáláshoz szükséges küszöbértéket. A binarizálást a rendszer fix küszöbbel fogja elvégezni. A folyamat végrehajtása után a kezek jól elkülönülnek a háttértől.
6
Képinformáció értelmezése
Simítás HSV konverzió Szegmentálás Előfeldolgozás Ablakok pozícionálása Értelmezés Lefogott hang kiszámítása Pengetés esemény felismerése Kamera kép Szegmentált, konvertált kép Kéztávolság és pengetés esemény Előállt hang Hang előállítás A következő modul fő feladata az előfeldolgozott képen követni a kezek mozgását, és mozgás esetén kiadni a megfelelő utasítást az azt követő modulnak. Legelső lépésben a bejövő képen meg kell találnia a kezeket, hogy aztán azoknak a mozgásukat kövesse. Az elő-feldolgozás eredményeként egy leszűkített ponttér áll rendelkezésünkre, amely, még mindig tartalmazhat zavaró tárgyakat. Ahhoz hogy a képen szereplő objektumok összehasonlíthatóvá váljanak, a rendelkezésre álló pixelek halmazokba való sorolása segítségével, struktúrákat kell létrehozni, amelyek már jellemző paraméterekkel rendelkeznek és így egymással összevethetők. Erre a célra optimális megoldás a kontúr-, vagy élvonalkeresés, amellyel az eredeti információt valamely tömör formába képezünk le. Az alkalmazott éldetektálóval szembeni elvárások, hogy szakadásmentes éleket biztosítson többek között képhibák esetén, és sebessége is megfelelő legyen. Ezek alapján a legmegfelelőbb választás a Laplace élkereső, amelyhez egyetlen maszk végigfuttatása elegendő. Egyetlen feltétele, hogy a képhibák eltüntetésére előzetes simítást kell végrehajtani, amely, a kamerakép hibáinak kiszűrése érdekében, már megvalósult. Az eljárás eredménye, a képen található objektumok, tömör leírását eredményezik. Ilyen formában a testekről eldönthető, hogy bírnak-e a kézre jellemző tulajdonságokkal. Legvégül pedig a fentebb kiválasztott objektumokról mozgásérzékeléssel eldönthető, hogy melyeket vegyünk ténylegesen figyelembe. Az előző lépésben meghatároztuk a kezeket, így az ablakok méreteit és pozícióit már megfelelően beállíthatjuk, és a továbbiakban áttérünk a kezek követésére. Az előző művelet eredményeként meghatároztuk a kezek pozícióját, így most már csak azok mozgását figyeljük, és a kézdetektálás funkciót elhagyjuk. A kezek pozícióinak függvényében meghatározható az ablakok helye. Ablakokon belül a kezeket figyeljük. Ezzel a módszerrel, csak egy kisebb területén a képnek végezzük a műveleteket, ami jelentős időmegtakarítással jár. Az objektumok elhelyezkedésének új koordinátáiból számolva, az esetleges változásokat figyeljük, ha volt elmozdulás, akkor az ablakpozíciókat változtatjuk és a kézpozíciókat is rögzítjük. Elmozdulások sorozatát tekintve egy pengetésnek megfelelő mozdulatsorozatból egy eseményt generál a rendszer, aminek paraméterül átadott értéke a kezek távolsága.
7
Hang előállítása Előfeldolgozás Értelmezés Hang előállítás
Simítás HSV konverzió Szegmentálás Előfeldolgozás Ablakok pozícionálása Értelmezés Lefogott hang kiszámítása Pengetés felismerése Kamera kép Szegmentált, konvertált kép Kéz távolság és pengetés esemény ((())) Hang előállítás Gitárnyak szimulálás (érintőkre számolás) Kiválasztott gitárnyak, skála, elrendezés Hangmagasság, megfelelő fájl kiválasztása Hangbank A következő modulnak a feladata, az előző lépésben meghatározott kéz pozíciója alapján a megfelelő hangfájl kiválasztása és lejátszása, ezáltal megszólaltatva a számítógépet, és a gitár szimulációját végrehajtva. A két kéz pozíciójából képes a program meghatározni, hogy egy virtuális gitárnyakon a játékos játszó keze hol helyezkedne el. Minél közelebb van a két kéz egymáshoz, annál magasabb hangot tud megszólaltatni. Majd meghatározzuk, hogy a kéz hányadik érintőt is fogja le. Végül kiszámolja, hogy ez milyen hangnak is felel meg, ezután a dolgunk az, hogy az így meghatározott hangot, egy hangbankból előhívjuk és lejátsszuk. A hangbank tulajdonképpen tömörített formátumban felvett gitárhangokból álló adatbázis. Ezek közül egyszerűen a megfelelő fájlt betöltjük és megszólaltatjuk.
8
Irodalomkutatás Szűrés Színterek Szegmentálás Objektum keresés
Átlag, Gauss, Medián Színterek Szegmentálás Objektum keresés A projekt során elsődleges célunk a kéz mozgásának futás idejű figyelése, és a minél gyorsabb reakció. A kézdetektáló rendszerekre jellemző, hogy egy kamera segítségével kommunikálni tudunk a számítógépünkkel. A legtöbb ilyen rendszer hasonló séma alapján épül fel. Az első fázis az előfeldolgozás, melynek során a célunk a bejövő információ szűrése, azaz a kép tisztítása, esetleg simítása, vagy egyes esetekben kezdetleges felismerés, rendszer előkalibrálása, melynél beállítjuk a kezdő értékeket. A következő fázis a keresés. Itt a feladatunk, hogy megkeressük a figyelni kívánt objektumot, és azt elkülönítsük a környezetében lévő egyéb dolgoktól, majd a már megtalált és elkülönített objektumunkat figyelni kell és annak mozgását esetlegesen rögzíteni. Szükséges az állapotok meghatározása és rögzítése, hogy tisztában legyünk az egyes pillanatokban végbemenő műveletekről, folyamatokról.
9
Színterek RGB színtér HSV színtér Konverzió: V = MAX(R, G, B);
delta = MAX(R, G, B) - MIN(R, G, B); S = delta / V; IF (R == MAX(R, G, B)) THEN H = (G - B) / S IF (G == MAX(R, G, B)) THEN H = 2 + (B – R) / S IF (B == MAX(R, G, B)) THEN H = 4 + (R – G) / S H = H / 6 A színterekre a bőrszín detektálása miatt van szükségünk. RBG színtérben végezzük az előszűrést, mivel a bejövő képünk ebben a színtérben van megadva. Önmagában ez az előszűrés nem ad megfelelő eredményt, mivel a bőrszínt nem lehet benne elég pontosan meghatározni, ezt kijavítandóan van szükség a HSV színtérre, melyet az RGB konverziójának eredményéből kapunk. A konverzió időigényes művelet, de szükséges, mivel a bemeneti képünk RBG kép, nekünk viszont szükségünk lesz a HSV színtérre a bőrszín detektálás megkönnyítése érdekében. Gyorsíthatjuk a feldolgozásunkat, ha nem az egész képet konvertálnunk a helyes eredmény érdekében.
10
Szegmentálás Hisztogram alapú szegmentálás Lokális szegmentálás
Fix küszöb Szegmentálás során meg kell határoznunk, hogy mi az, ami szükséges lesz számunkra a továbbiakban. Ezzel csökkentjük a feldolgozandó adatok mennyiségét és elérjük, hogy gyorsítjuk az összfeldolgozást. Valamint meg kell találnunk a zavaró részeket, melyek hasonlíthatnak a keresendő objektumunkra, hogy el tudjuk őket távolítani. Természetesen ez a szerencsés eset, miszerint könnyedén elválaszthatók az objektumok a háttértől, valójában viszont ez igencsak ritka. Az objektumokat a képen közel azonos intenzivitású pixelekkel lehet azonosítani. Mivel esetünkben ezek az objektumok nem homogén háttér előtt szerepelnek a szegmentálás még nehezebb lesz.
11
Objektum keresés Éldetektálók Laplace Sobel Canny
Az objektum kereséssel a célunk, hogy az előfeldolgozott képen megtaláljuk a kívánt objektumot, jelen esetben a két kezet. Ehhez éldetektálást és egy saját algoritmust fogunk használni. Éldetektálásra rengeteg módszer és sablon létezik. Az éldetektálásnak több hátránya is van, de legjelentősebb talán az, hogy sok paraméter igen pontos beállítása szükséges az elvárt eredményhez, ha ez nem elég jó, akkor sok olyan élt detektál, ami valójában nincs is. Talán legjobb eredményt a Canny éldetektáló eredményezi, viszont a rendszer sebességét jelentősen csökkenti.
12
Objektum keresés Bőrszín statisztikája
Hisztogramban tároljuk a bőrszínről vett adatokat Összevetjük a kép pixeleit a hisztogrammal Statisztikai adatokszürkeárnyalatos kép Az objektum kereséssel a célunk, hogy az előfeldolgozott képen megtaláljuk a kívánt objektumot, jelen esetben a két kezet. Ehhez éldetektálást és egy saját algoritmust fogunk használni. BackProject = bőrszínstatisztika CamShift=Súlypont
13
Kéz meghatározása Súlypont számolása CamShift algoritmussal
Így meg lesz egy pontunk, amiből tudunk következtetni a kéz helyzetére Gradiens hisztogramok használata kutatás alatt
14
Objektum követés Képkockánként szegmentálás
Egymást követő képkockák különbsége Objektum követés konstans háttérrel Objektum követés megadott régióban Az objektumkövetés az a folyamat, amelynek során egy a háttértől jól elkülöníthető objektum mozgását követi a rendszer. Ennek az eljárásnak nagy szerepe van a projektben, mert ez alapján generálja rendszerünk a kibocsátandó hangokat. Több lehetőség is adott arra, hogy egy objektumot kövessünk a mozgóképen: Alapesetben megtehetnénk azt, hogy minden egyes képkockára külön-külön szegmentáló algoritmussal vizsgálatot indítunk, és ezáltal írjuk le egy megadott objektum mozgását. Ez viszont elég lassúvá válhat folyamatos kép esetén, úgyhogy más módszerhez folyamodunk. Megoldást jelenthetne, hogy kettő vagy több, egymást követő képkocka különbségét tekintenénk, és a változásokból következtetnénk egy adott objektum elmozdulására. Ezzel a legfőbb gond a zaj megjelenése lehet, mivel az sosem állandó, így képről-képre azt is objektumként érzékelnénk, ami helytelen következtetésekre adna alapot. Lehet továbbá egy konstans hátteret elkülönítve az azon bekövetkező változásokat figyelni, és ezáltal leírni a mozgásokat. A gond magának a konstans háttérnek az előállításánál jelentkezik, mivel nem tudjuk, hogy a kamera képén jelentkező első képkockát tekinthetjük-e háttérnek, vagy sem. Ha egy képkockán megtaláltuk a követendő objektumot, avagy jelen esetben a játékos kezét, onnantól fogva nagyban gyorsíthatja a program működését, ha nem az egész képet nézzük át a kéz megkereséséért, hanem csak azt a régiót, ahol az előző képkockán a kezeket megtaláltuk. Ezáltal a program futását optimalizálhatjuk, mivel csak két kisebb régiót figyelünk az eredeti képen belül. Természetesen, mivel ezekből a régiókból a kéz kimozdulhat, így ezt a figyelendő területet is képről-képre, a megfelelő új pozícióra kell vinni, ami pár lépésnyi plusz számítást jelent majd a programon belül, de biztosan elhanyagolható a teljes kép átvizsgálásához képest. Természetesen egy objektum konkrét detektálására több algoritmus is létezik, ám kritikus szempont mindegyiknél a zajszűrés. A fentiekben tehát felsoroltuk az összes technikát, algoritmust, amit a programunk megvalósítása közben felhasználunk, vagy felhasználhatónak vélünk a jelenlegi fázisban. Ezekből építkezve alkotjuk meg az alkalmazásunkat, aminek segítségével, egy hagyományos web kamera képéből gitárszimulálásig jutunk.
15
Kéz pozicionálás A bal kéz pozíciója alapján ki tudjuk számolni, hogy hanyadik érintőnek megfelelő helyen lenne egy gitár nyakán A jobb kéz mozgása alapján tudunk következtetni a pengetés eseményére
16
Hangstruktúra „Hangbank” alkalmazásával
Tömörített wav fájlok, felvéve gitárról Könnyen bővíthető, kevésbé terheli a CPU-t 24-36 fájl kell a megfelelő terjedelemhez/hangzás Ebből beállítások után „keletkezik” az aktuális gitár hangbázisa Skálák, alaphang
17
DirectSound Maga a hang kezelése DirectSoundon keresztül történik
Jobban kihasználja a számítógép erőforrásait Egyéb funkciókkal további testre szabási lehetőségek (pl. hangerő, panning, effektek...) Legtöbb gépen megtalálható, mivel a DirectX része
18
Hangformátum A hangok tiszta csatornás gitárhangok
Tömörítési eljárások közül többet próbáltunk MS ADPCM lett a legoptimálisabb 44 Khz, mono, 180 kbps mintavételezéssel 200 kByte-os file-ok
19
Összegzés Irodalomkutatás Rendszerterv Alkalmazás Weblap
Tervezett nyári munkálatok Irodalomkutatás jelenleg kész Rendszerterv alapjai és vázlata megvan Alkalmazás elkezdve DirectCV használatával Weblap folyamatos fejlesztés alatt
20
Tartalomjegyzék Célkitűzés Bemutatkozás Rendszerterv Irodalomkutatás
Rendszer áttekintés Előfeldolgozás Képinformáció értelmezése Hang előállítás Irodalomkutatás Szűrés Színterek Szegmentálás Objektum keresés Objektum követés Kéz pozicionálás Hangstruktúra Direct Sound Összegzés Tartalomjegyzék Köszönetnyilvánítás Készítők
21
A team nevében köszönöm a figyelmet!
22
A projektet készítették:
Bónis Balázs Gyöngyi Lajos Szabó Attila
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.