SZAKDOLGOZAT IDEGENHELYZET TESZT SZIMULÁCIÓ EMBER POZÍCIÓ SZÍNFELISMERÉS
Készítette: Korcsok Erika Gazdaságinformatikus BSc
Témavezető: Dr. habil. Kovács Szilveszter egyetemi docens Konzulens: Piller Imre tanársegéd, Tompa Tamás doktorandusz
Miskolci Egyetem 2016
Tartalomjegyzék 1. Bevezetés .....................................................................................................................4 2. Az „idegenhelyzet teszt” bemutatása ..........................................................................6 2.1 Az „idegenhelyzet teszt” fuzzy modellje ...............................................................7 2.2. Az „idegenhelyzet teszt” laborja ...........................................................................9 2.2.1 A tesztszoba .....................................................................................................9 2.2.2 A kutya szerepét megvalósító robot ..............................................................10 2.2.3 A robot „kutya” játékát megvalósító elektronikus „labda” ...........................12 3. A feladat megoldásának lehetőségei .........................................................................13 3.1. A feladat ..............................................................................................................13 3.2. Facebook arcfelismerés .......................................................................................13 3.3. IBM Watson Visual Recognition ........................................................................14 4. A feladat megoldásához felhasznált eszközök ..........................................................15 4.1. Megoldási lehetőség kiválasztása .......................................................................15 4.2. Programozási nyelv kiválasztása ........................................................................15 4.3. Fejlesztő környezet kiválasztása .........................................................................16 4.4. Képfeldolgozó keretrendszer kiválasztása ..........................................................16 4.5. UML modellező kiválasztása ..............................................................................17 4.6. Marker megválasztása .........................................................................................18 5. A fejlesztés előkészületei .........................................................................................20 5.1. A fejlesztői környezet beállításai ........................................................................20 5.2. A Kinect megismerése ........................................................................................21 6. A komponens tervezése .............................................................................................24 6.1. A komponens kezdeti terve .................................................................................25
-2-
6.2. A komponens részletes felépítése .......................................................................26 6.2.1. ColorRangeChecker ......................................................................................26 6.2.2. ColorDetection ..............................................................................................27 7. Az elkészült alkalmazás tesztelése ............................................................................32 7.1. Az alkalmazás működés közben .........................................................................32 7.1.1. ColorRangeChecker ......................................................................................32 7.1.2. ColorDetection ..............................................................................................36 8. Összefoglalás .............................................................................................................40 9. Summary....................................................................................................................42
-3-
1. Bevezetés A mai, korszerű technikának köszönhetően a tudományok robbanásszerű fejlődésen mentek keresztül. A fejlesztések iránt egyre nagyobb az igény, és már a lehetőségek is adottak hozzá. Egyre elterjedtebb cél a folyamatok, tevékenységek automatizálása. A robotok nem csupán a gyártósor mellett jelennek meg egy-egy feladat elvégzésére, hanem a kutatások egyik fő célpontjává váltak. A robotok terjedése által azonban egyre inkább felmerül a kérdés: hogyan viszonyulnak hozzá az emberek? Ez azt jelenti, hogy a különböző kutatások során meg kell vizsgálni az emberek és a robotok közti kapcsolatot. Mi az, amit az emberek még képesek elfogadni, és mi az, amely már félelmet kelt bennük. A robotok megalkotásánál ezt is figyelembe kell venni. Mi ébreszti fel az emberek érdeklődését és mitől próbálnak inkább minél távolabb kerülni. A robotok mellett a mesterséges intelligencia is nagyon népszerű terület van, és egyre jobban a mindennapjaink részét képezi, még ha olyankor ezt észre sem vesszük, mert már annyira természetessé válik. Ha jobban megnézzük azonban, egyszerre érdekes és talán kicsit ijesztő a működésük, és az a tény, hogy a gépek már emberhez hasonló gondolkodással képesek rendelkezni. A gép már nem csupán arra alkalmas, hogy elvégezzen egy előre meghatározott feladatot egy előre meghatározott módon, ugyanis már képes tanulni, és újabb és újabb, egyre jobb megoldást találni a feladatra. Ahhoz azonban, hogy ezek a rendszerek működőképesek és hasznosak legyenek, több komponens megalkotása szükséges, és majd ezek egyesítése vezet a kész rendszer elkészültéhez. Az egyik ilyen komponens a gépi látás, képfeldolgozás. A kutatások megfigyelése gyakran kamerákkal történik, illetve a szenzorok, kamerák szolgálnak a robotok „szemeként”. Szerepük van például az akadályok felismerésében és kikerülésében, az emberek felismerésében és beazonosításában és még sok területen. Egy kép elemzésének automatizálásának megvalósításához több feldolgozási módszert is kell alkalmazni függően attól, hogy milyen eredményt várunk. A képek elemzésének két legelterjedtebb módja a színek szerinti és az alakzatok szerinti feldolgozás, de léteznek más lehetőségek is, mint például a mélységkép elemzésre. -4-
Gazdaságinformatikusként a szakmai gyakorlatomat a Miskolci Egyetemen Általános Informatikai Tanszékén töltöttem, ahol így lehetőségem nyílt betekinteni a robotozás világába, amely felkeltette az érdeklődésemet, így a szakdolgozatomat ezzel kapcsolatban szerettem volna írni. Így esett a választás az idegenhelyzet teszt rendszer egy
alrendszerének,
az
ember
pozíciót
meghatározó
színfelismerőnek
a
megtervezésére és megalkotására. A feladat első része a rendszerrel, felépítésével és megvalósításához szükséges eszközökkel történő megismerkedés, majd ez után egy alrendszer megalkotása. Az alrendszerrel szembeni legfőbb elvárás az, hogy az ember pozícióit meghatározó komponens segítse, és a feladat az emberek, pontosabban a gazda és az idegen megkülönböztetése. Dolgozatom
során
elsőként
bemutatom
az
idegen
helyzet
tesztet,
annak
megvalósítását, illetve, hogy sorra veszek néhány képfeldolgozó rendszert. Bemutatom továbbá, hogy milyen előzetes tevékenységek szükségesek a fejlesztés megkezdése előtt. Megtervezek és megvalósítok egy alrendszert, amely segíti a szín alapján történő ember megkülönböztetést, illetve végül tesztelem az elkészült komponenst.
-5-
2. Az „idegenhelyzet teszt” bemutatása Az „idegen helyzet teszt” [1] egy olyan, etológusok által kifejlesztett teszt, melynek célja az ember-kutya, pontosabban a kutya gazdája és maga a kutya közötti kapcsolat vizsgálatára. Ennek következtében a teszt résztvevője elsősorban a kutya, mint tesztalany, további szereplők pedig a kutya gazdája, és egy kívülálló idegen, a kutya számára ismeretlen személy. Az etológusok célja a teszt által, hogy a kutya viselkedését vizsgálják, a gazda illetve idegen személyek segítségével. A megfigyelések (illetve tesztek) azt mutatták, hogy a kutya akkor érzi jól magát, akkor van játékos kedvében, ha az általa jól ismert gazdával tartózkodik a teszt elvégzésére szolgáló szobában. Ez a szoba egy zárt, kis alapterületű helyiség kamerákkal és egyéb, a teszt elvégzéséhez szükséges eszközökkel felszerelve. Mikor a gazdi kilép a szobából, majd az idegen személy lép be, a kutya ingerültté, idegessé válik, nincs már játékos kedvében, és ismerkedni sem nagyon akar (az esetek többségében) a számára ismeretlen személlyel. A teszt során egymástól eltérő helyzetekben vizsgálják a kutya viselkedést, pontosan hét epizódon keresztül, melyek a következőek: 1. a kutya és a gazdája vannak egy szobában, és a gazda játszik a kutyával, 2. az idegen bejön a szobába és játszani próbál a kutyával, 3. a gazda elhagyja a szobát, így a kutya együtt marad az idegennel, aki játszani próbál vele, 4. a gazda visszajön, és az idegen távozik, 5. a gazda ismét kimegy, a kutya így egyedül marad, 6. az idegen jön be, és játszani próbál a kutyával, 7. a gazda bejön, majd távozik az idegen.
-6-
A reakciókból mérőszámokat határoznak meg, mely magában hordozza a kutya reakcióját mind a saját gazdájával, mind pedig az idegennel szemben. Ennek segítségével lehetőség nyílik az egyes kutyafajták osztályozására. Ezen teszt nemcsak az ember-kutya kapcsolat megfigyelésére lehet alkalmas, hanem ezek alapján akár az ember-robot kapcsolat megfigyelésére is, a valós kutyát egy robottal helyettesítve. Ezen feltevések alapján született meg az úgynevezett eto-robotika, mely célja az ember-robot kapcsolat etológiai indíttatású megfigyelése, tehát, hogy emberek, hogy reagálnak a környezetükben esetlegesen elhelyezkedő, valamilyen szociális feladatot megvalósító robotokra.
2.1 Az „idegenhelyzet teszt” fuzzy modellje Az előző (fentebb részletezett) elgondolások alapján született meg egy olyan fuzzy állapotgép automata [1], mely segítségével a fentebb bemutatott idegen helyzet teszt megvalósítható ember-robot tesztalanyok segítségével is. Az állapotgép automata fuzzy szabály-interpoláción alapszik, ahol az egyes viselkedési formák vagy halmazok, fuzzy szabálybázisokkal reprezentáltak. Ilyen, fuzzy szabálybázisokkal leírt viselkedések
például
a
’DogExploresTheRoom’,
’DogGoesToOwner’
és
a
’DogGoesToDoor’. Azaz a „kutya menj a gazdihoz”, „kutya sétálgatása a szobában”, illetve a „kutya menj az ajtóhoz” viselkedés.
A következő 1. ábrán a Matlab szimulációs alkalmazás pillanatképe látható:
-7-
1. ábra Az idegen-helyzet tesztet megvalósító Matlab szimulációs alkalmazás felülete [1]
Az ábrán a teszt helyszínéül szolgáló szobát a fekete téglalap alakú terület jelképezi. Az embereket a színes négyzetet jelölik, melyből a kék a gazda, a rózsaszín pedig a kutya számára idegen személy. A citromsárga, két egymáson elhelyezkedő kör alakzat a kutyát szimbolizálja. A kutya aktuális irányának megállapítása érdekében ábrázolásra került a kisebb sárga körrel a feje, illetve a zöld vonallal pedig a farka. A kék körvonal a labdát szimbolizálja. A kutya színe a szimulációs alkalmazásban attól függően változik, hogy milyen a szorongás szintje, milyen az állapota. Az alkalmazás jobb oldalán lévő csúszkák az aktuális viselkedés mértékét szimbolizálják. Az elérendő cél, ezen szimulációs alkalmazáson alapuló, valós, ember-robot kapcsolat megfigyelésére alkalmas labor felszerelése, beüzemelése. A megvalósítás web kamerák és Kinect-ek segítségével történik, ezek gyűjtenek információt a környezetről: meghatározzák az emberek aktuális pozícióját, felismerik az adott embert (gazdi vagy idegen), illetve magát a kutyát szimbolizáló robotot is. A szereplők (gazdi, idegen, robot) megkülönbözetésére különböző színű markerek (jelölők) -8-
szolgálhatnak. Az adott jelölő lehet akár egy adott színű mellény vagy sapka az emberen, vagy valamilyen színben világító (vagy akár infra) LED a roboton és a játék labdán. A Matlab szimulációs alkalmazás kommunikál a valós rendszerrel. A kamerák által felismeri az emberek, a robot és a játék (labda) pozícióját, majd ezen adatok alapján valósítja meg a robot vezérlését, mozgatását úgy, mintha az a valós idegen-helyzet tesztbeli kutya lenne. Az alábbi, 2. ábrán a rendszer blokkvázlata látható:
2. ábra A rendszer felépítésének sematikus ábrája [1]
2.2. Az „idegenhelyzet teszt” laborja 2.2.1 A tesztszoba Az idegenhelyzet teszt megvalósításához rendelkezésre álló tesztszoba helyszínéül a Miskolci Egyetem, az Informatikai Intézeti Tanszékének I. emeletén található 105. számú, „Intelligens és elosztott rendszerek” nevű labor szolgál. A mennyezetre
-9-
erősítve található 5 darab webkamera, valamint a padlóra rögzítve, derékmagasságban egymással szemben elhelyezve egy-egy darab Kinect kamera. A felszerelt kamerák a képfeldolgozási feladatok fő elemeiként szolgálnak. Az 5 darab webkamera feladata a robotkutya illetve a kutyalabda beazonosítása és ezek aktuális pozíciójának meghatározása. Az 5 webkamera közül az egyik lencséje köré infra LED-ek kerültek felhelyezésre, az esetleges további beazonosítási, felismerési lehetőség kipróbálására, tesztelésére (például a kutyalabda felismerése, pozíciójának meghatározása). A 2 darab, egymással szemben, derék magasságban elhelyezett Kinect kamerák feladata az emberek (gazda illetve idegen) felismerése és megkülönböztetése. Az alábbi képen a teszt helyszíne látható.
3. ábra A teszt helyszínéül szolgáló szoba
2.2.2 A kutya szerepét megvalósító robot Az idegenhelyzet tesztben a robot célja, hogy a valós, etológusok által kifejlesztett tesztbeli kutyát helyettesítse, szimbolizálja. A robot az Automatizálási és Infokommunikációs Intézet által fejlesztett háromkerekű, holonómikus hajtású, a „Magyarok a Marson” versenyen is használt robot. Felépítését tekintve két fő részre - 10 -
bontható, az alsórészre, illetve az erre épülő felépítményre. A felső szinten található a kamera, amelyet szervó motor segítségével képes mozgatni balra és jobbra, a robot vezérlését megvalósító Raspberry Pi mini számítógép, illetve itt helyezkedik majd el a robot azonosítását, felismerését segítő marker, amely lehet valamilyen LED-es fényforrás, vagy egy egyszerű fényvisszaverő. Az alsó részen helyezkedik el a a robot mozgatását megvalósító 3 darab holonómikus kerék, illetve ezen kerekek meghajtását biztosító kefés DC motorok, enkóderekkel felszerelve. A holonomikus kerekek következtében (ami azt jelenti, hogy a kerekek kerületén újabb kisebb görgők találhatóak), a robot bármilyen irányban történő elmozdulásra képes. Ez nem teljesen felel meg egy valós kutya mozgásának, hiszen az állatok nem képesek oldalazó mozgásra, de jelen feladatban nem az a fő célja a kutatóknak, hogy egy kutyát minden tulajdonságával együtt lemásoljanak. A robot fedélzeti Raspberry típusú számítógépén, ROS (Robot Operating System) rendszer
fut
(Ubuntu
operációs
rendszeren),
melyet
programozására fejlesztettek ki.
A következő ábrán a kutya szerepét megvalósító robot látható.
- 11 -
kifejezetten
robotok
4. ábra A kutyát megvalósító robot
2.2.3 A robot „kutya” játékát megvalósító elektronikus „labda” A tesztben fontos szerepe van a kutya játékának, azaz a labdának, amelyet jelen esetben egy elektronikus „labda” szimbolizál. Ezt a feladatot egy kis edényben elhelyezett elektronika valósítja meg. Az előzőekhez hasonlóan itt is fontos, hogy valamiképpen azonosítani lehessen a labdát, ezért 3 darab infra LED helyezkedik el rajta háromszög alakzatot alkotva. A kamerák ezt az infra LED-ekből kialakított háromszög alakzatok azonosítják be, majd ez alapján határozzák meg az aktuális pozícióját, valamint orientációját (aktuális irányát).
- 12 -
3. A feladat megoldásának lehetőségei Ebben a fejezetben a feladat megoldásához rendelkezésre álló technikákat, technológiákat, fejlesztőeszközöket ismertetem.
3.1. A feladat Ahhoz, hogy a feladat megoldását el tudjam kezdeni, illetve ezzel kapcsolatban információkat gyűjtsek, lehetőségeket mérlegeljek, el kell gondolkodni magán a feladaton, feltétlenül szükséges annak megértése. Az idegen-helyzet teszt megvalósítása során felmerülő probléma, hogy meg lehessen különböztetni a kutya gazdáját és az idegen személyt. A megfigyelés csak úgy mondható eredményesnek, ha tudjuk, hogy milyen volt a kutya reakciója az idegennel illetve a saját gazdájával szemben. Ezt a problémát úgy lehet orvosolni, hogy ha mind a két személy visel valamilyen, a megkülönböztetést segítő jegyet, például eltérő színű mellényt vagy sapkát, vagy más jelölőt. A megoldás során egy olyan komponens elkészítése szükséges, amely a marker színével egyező objektumnak megfelelő terület nagyságát
az
egész
képhez
viszonyítva
százalékos
formában
szolgáltatja
eredményként. Ezen megoldás az ember felismerő komponens egy darabja, mely segíti a személyek azonosítását azáltal, hogy azon a képrészleten, amelyen ember található, mekkora területet tesz ki egy vagy több megadott szín. A feladat elsődleges célja tehát, hogy az emberek megkülönböztetésének problémáját egy színeket feldolgozó komponens segítségével megoldja.
3.2. Facebook arcfelismerés Manapság széles körben elterjedt a közösségi oldalak használata. Sok egyéb funkció mellett a legtöbben fotómegosztásra is használják, hiszen profilképet szinte mindenki tölt fel magáról. A képeken lehetőségünk van megjelölni a rajtuk látható személyeket, azonban a Facebook egy fotó feltöltése utána már meg is jelöli az embereket, nekünk csak a nevüket kell beírni. Ezt a módszert nem csak a Facebook használja, már mobiltelefonokba, fényképezőgépekbe is be van építve ez az algoritmus.
- 13 -
Az arcfelismerő algoritmus részben jó megoldás lenne számomra, hiszen az emberek megkülönböztetése nem feltétlenül szín alapú marker alapján történhet. Ennek az algoritmusnak azonban van néhány hátránya, amely miatt nem felhasználható. Az egyik, hogy az idegenhelyzet teszt már foglal magába egy olyan alrendszert, amely emberfelismerést valósít meg, és a megkülönböztető komponens feladat pont az, hogy ezt segítse. A másik hátránya, hogy nem nyílt forráskódú, így magát az algoritmus nem elérhető és nem felhasználható. 3.3. IBM Watson Visual Recognition [7] [8] Az IBM Watson egy gondolkodáson alapuló technika, amely az emberhez hasonlóan képes gondolkodni. Segítségével lehet elemezni és értelmezni többféle adatot, még strukturálatlant is, mint például képek, audió fájlok, valamint a gépi tanulás hasznosításával lehetőség van a rendszer szaktudásának növelésére, és olyan chat robotok megalkotására, mely beszélgetésekben képesek részt venni. A Visual Recognition az IBM Watson egy olyan része, ami lehetőség teremt a felhasználó számára, hogy megértse egy kép vagy videófolyam tartalmát, azáltal, hogy a program válaszol arra a kérdésre, hogy „Mi található a képen?”. Segítségével a felhasználók képesek automatikusan beazonosítani a képen látható objektumokat, amelyeket a kép tartalmaz, és így logikai kategóriák szerint osztályozni. Ha speciális objektumok tartalmaz egy kép, példákon keresztül meg lehet tanítani az újfajta osztályozásra. Az IBM Watson előnye, hogy tartalmaz letölthető fejlesztői mintapéldákat. Az http://visual-recognition-demo.mybluemix.net/ weboldalon ingyenes kipróbálható és használható, azonban csak 250 kép erejéig. A további, bővített lehetőségek használata azonban már nem ingyenes. A másik hátránya, amely miatt az idegen helyzet teszt ember felismerést segítő alrendszerhez nem használható, ugyanis inkább tárgyak felismerésére alkalmas, így ebben az esetben az embert ugyan jól képes felismerni, azonban megkülönböztetni már nem, hogy az idegenről vagy a gazdáról van-e szó.
- 14 -
4. A feladat megoldásához felhasznált eszközök Ebben a fejezetben a megoldás kiválasztásának szempontjait, a feladat megoldásához ténylegesen
felhasznált
eszközöket,
az
eszközök
használatához
szükséges
információkat, telepítéseket, beállításokat fogom ismertetni.
4.1. Megoldási lehetőség kiválasztása A probléma megoldásához saját alkalmazás készítését választottam. Ennek oka, hogy így egy olyan komponenst hozhatok létre, amely az elvárt feladatnak felel meg. Bár hasonló, objektumkereső modul létezik, amelyeket eltérő nyelven implementáltak, azonban ezek adaptálása az általunk használt rendszerbe sokszor körülményesebb, mint egy újat elkészíteni. Valamint egy már elkészített komponens felépítésének tanulmányozása és megértése sok időt igényel. Számomra sokkal egyszerűbb volt egy saját komponens elkészítése, amely megvalósítja a feladatot, többek között ezért választottam ezt a lehetőséget.
4.2. Programozási nyelv kiválasztása Az alkalmazás elkészítését a C# nyelvet választom, mely az objektum orientáltság miatt közelebb áll hozzám, illetve vannak előzetes ismereteim e programozási nyelvvel kapcsolatban, továbbá a komponens implementálása kapcsán mélyebb ismereteket szerezhettem a C# programozási nyelvről. A C#-hoz létezik egy olyan SDK, mely a Kinect-el való kommunikációt (operációs rendszer szinten) illetve annak programozását teszi lehetővé, számos lehetőséget biztosítva az adott képfeldolgozási műveletekhez.
- 15 -
4.3. Fejlesztő környezet kiválasztása [2] A komponens fejlesztéséhez több fejlesztő környezet is rendelkezésre áll, melyek segítségével a felhasznált programozási nyelven létrehozott forráskódot futtatni, tesztelni, debug-olni (hibát keresni/javítani) lehet. A fejlesztői környezet csak a fejlesztést végző személy vagy személyek számítógépén kell, hogy rendelkezésre álljon, a lefordított kész alkalmazás futtatásához nincs rá szükség. A legelterjedtebb és leggyakrabban használt szoftver a Visual Studio, emellett még az ismertebbek közé tartozik a SharpDevelop. Mindkét szoftver Microsoft Windows platformon használható, és céljuk is azonos, azonban a használhatóságban némi különbségek mutatkoznak. A SharpDevelop egy ingyenes, nyílt forráskódú szoftver. Az alkalmazások készítéséhez grafikus felületet biztosít, melynek segítségével könnyebben lehet fejleszteni a saját programunkat. Előnye, hogy rendelkezik beépített funkciókkal. A Visual Studio hátránya, hogy nem ingyenesen elérhető szoftver. A SharpDevelophoz hasonlóan a fejlesztéshez grafikus felületet biztosít, emellett pedig folyamatosan felbukkanó segítséggel teszi könnyebbé az alkalmazások készítését. Előnye, hogy az eszközkészlete tágabb, tulajdonképpen a fejlesztői eszközök és szolgáltatások átfogó gyűjteménye, ezért a fejlesztéshez a Microsoft Visual Studio-t választottam.
4.4. Képfeldolgozó keretrendszer kiválasztása [3] [4] A két legelterjedtebb képfeldolgozó keretrendszer a .NET-hez az AForget.NET, és az EmguCV. Mindkettő közel hasonló funkciókkal bír, azonban a használatukban némi különbségek mutatkoznak. Az AForge.NET egy nyílt forráskódú keretrendszer C# programozási nyelvhez, amely a számítógépes látás és a mesterséges intelligencia területén is egyaránt hasznos eszközkészletet biztosít a fejlesztő számára. A keresztrendszer számos beépített függvénykönyvtárat illetve a könnyebb megértést segítendő mintaprogramokat és ezek - 16 -
dokumentációját is tartalmazza. Például az AForge.Imaging a képfeldolgozási rutinokat,
algoritmusokat
AForge.MachineLearning
és pedig
képfeldolgozási
szűrőket
tartalmazza,
a
eszközeit
magába
gépi
tanulás
az
foglaló
függvénykönyvtár. A mintapéldákon keresztül könnyen elsajátítható az egyes könyvtárak, metódusok használata. Az EmguCV az OpenCV képfeldolgozó könyvtár elérését teszi lehetővé (wrapper) többek között C# programozási nyelven, de használható Visual Basic vagy akár IronPython nyelveken is. Előnye, hogy sok platformot támogat, használható ilyenek a Mono, Windows, Linux, iOS illetve Android környezetben is. A feladat elkészítése során mindkét keretrendszert tanulmányoztam és kipróbáltam, a későbbiek során pedig az EmguCV használata mellett döntöttem, mivel az OpenCV használata közelebb áll hozzám.
4.5. UML modellező kiválasztása [5] [6] A feladat része nemcsak az alkalmazás implementálása, hanem annak a megtervezése is, pontosabban előbb meg kell tervezni ahhoz, hogy implementálni lehessen. Egy jól elkészített alkalmazás terv segítségével az implementáció gyorsabban megvalósulhat meg. A tervezéshez többféle modellező eszközt is lehet alkalmazni melyek segítségével elkészíthetőek az alkalmazás felépítését szemléltető diagramok. Erre a legmegfelelőbb modellező nyelv az UML, amely egy általános célú modellező nyelv és segítségével szöveges illetve grafikus modellek is készíthetőek. Az UML több diagramtípust is definiál ilyen az osztálydiagram, a csomagdiagram, az aktivitásdiagram stb. Az egyik legelterjedtebb UML modellező eszköz a StarUML, amely egy nyílt forráskódú szoftver, támogatja az UML 2.0 diagramtípusait és egy könnyen kezelhető vizuális szerkesztő felületet biztosít a diagramok elkészítéséhez. Segítségével az
- 17 -
elkészült diagramok JPEG formátumban ki is exportálhatóak illetve biztosít kódgenerálási funkciót. A választásom azért erre az UML modellező szoftverre esik, mert ingyenes, könnyű a használata, tartalmaz kódgenerálási funkciót, és a kész diagramok JPEG formátumban elmenthetőek, amely nagy segítség az adott diagram képként való dokumentumba illesztéséhez.
4.6. Marker megválasztása Az emberfelismerés egyik alappillére, hogy megfelelő marker álljon rendelkezésre, amely segítségével
beazonosíthatjuk,
valamint követhetjük a
mozgását, és
megkaphatjuk az aktuális pozícióját. Több résztvevő esetén különbséget tudunk tenni a különböző személyek között, ha tudjuk, hogy milyen markert visel. Az idegenhelyzet teszt során az elkészítendő komponensnek nincs tudomása arról, hogy milyen megkülönböztető jelet használ a gazda és az idegen személy, csupán azt határozza meg, hogy az egyes színek mekkora hányadát teszi ki annak a területnek, amely embereket tartalmaz. Az emberfelismerés feladata, hogy a színfelismerő komponens által eredményként kijelölt területek nagysága alapján és az emberfelismerő modul által a két különböző személy pozíciójának segítségével együttesen képes legyen az azonosításra. A markereknek két fő csoportja létezik. Az egyik nagyobb csoportot természetes markereknek nevezzük. Ilyen lehet például az ajtó vagy az ablak sarka, árnyékok, táblák. Hátránya, hogy felismerése nehezebb, mint a másik csoportba tartozóké, illetve az elhelyezkedésük rögzített, előre meghatározott, amely a feladat szempontjából nem megfelelő. A másik csoport az úgynevezett mesterséges markerek, melynek elkészítési, kitalálása már kissé több feladatot igényel, azonban az idegenhelyzet teszt során ezt a módszert kell választani. A jelölő megválasztása során azonban még további lehetőségeink vannak. Vannak az ún. glyph-ek, amelyek esetében a felismerőnek alakzatok mintákat kell keresnie. Ennek egyik legelterjedtebb változata a vonalkód, illetve manapság a mobiltelefonoknál az QR-kód. A másik lehetőség, amikor alakzatok helyett színeket kell felismerni. - 18 -
A színfelismerés során a szín alapú markert választottam. Ennek több oka van. Az egyik, hogy mivel a jelölőt személyeknek kell viselnie, amely azonban nem sima felület, így az alakzatok torzulhatnak, vagy nem jól láthatóvá válhatnak. Egy színes jelzés esetében pedig ügyelni kellett a tárgyak láthatóságára is. Az, hogy valami jól látható legyen, rengeteg tényezőtől függ. Ilyen az objektum mérete, elhelyezkedése, nézőtávolsága, stb., valamint fontos szerepet játszik a megvilágítás és árnyékolás. Ha színes markerekkel dolgozunk mindenképpen szűrést kell alkalmaznunk a fényességre. A túl sötét vagy túl világos az adott objektum, akkor már a színt nem lehet egyértelműen meghatározni. Mivel az személyek folyamatos mozgásban vannak, a pozíció változtatás mellett el is fordulnak, olyan megoldást kell választanom, amely minden irányból, és szögből jól látható. Egy fényvisszaverő csík, vagy egy sapka nem megfelelő megoldás, mivel könnyen adódhat olyan helyzet, ahol ez nem látható, így két, különböző színű mellény viselése mellett döntöttem, ugyanis az nagy felület, melynek felismerése könnyebb, illetve pozíció változás esetén is látható marad, nem kerül takarásba.
- 19 -
5. A fejlesztés előkészületei Ebben a fejezetben a fejlesztéshez szükséges előkészületeket, és a hozzá kapcsolódó előzetes feladatokat mutatom be.
5.1. A fejlesztői környezet beállításai A komponens implementálására a C# nyelvet választottam, mivel ez a programozási nyelv közelebb áll hozzám, rendelkezem belőle előzetes ismeretekkel, és szeretnék több tapasztalatot szerezni belőle, valamint az objektum orientáltsága jobb, könnyebb használhatóságot biztosít. A programnyelvhez a Microsoft Visual Studio 2015-t telepítettem fel a számítógépemre, mely számos beépített lehetőségekkel, funkciókkal könnyítik meg a fejlesztést. A fejlesztő környezetet elég csak a fejlesztést végző személy/személyek számítógépére telepíteni, az elkészült program használata során ugyanis erre nincs szükség. A feladat elvégzése során képfeldolgozási könyvtárra is szükség van. Az EmguCV használatára esett a lehetőségem, mivel ezt a széles körben ismert és használt OpenCV kimondottan .Net keretrendszerhez készült változata, tartalmaz minden olyan metódust és funkciót C# programozási nyelvre szabva, amit az OpenCV kínál. A megfelelő könyvtárak importálása attól függ, hogy melyik verziót használjuk. A választásom az EmguCV 3.1.0.228-s verzióra esett. Ehhez a következő fájlok importálására volt szükség: - cvextern.dll - msvcp120.dll - mscvr120.dll - opencv_ffmpeg310.dll Ezenkívül a projekt referenciái közé kell beimportálni két másik a könyvtárat, az Emgu.CV.UI.dll, illetve az Emgu.CV.World.dll fájlokat.
- 20 -
Az EmguCV egyik előnye, hogy biztosít példaprogramokat, illetve leírást ad egy új program létrehozására, amelyeken keresztül ellenőrizhető, hogy helyes beállításokat alkalmaztunk-e, illetve útmutatást arról, hogy különböző fordítása hibákat milyen helytelen beállítások válthattak ki.
5.2. A Kinect megismerése A feladatom során közvetlenül nincs szükségem a Kinect használatára, azonban az általa látott képet kell feldolgozni, így meg kellett ismerkednem vele. Az idegen helyzet teszt megvalósításában két Kinect for Windows v1 vesz részt, melyek feladata az emberek (a gazda illetve az idegen) felismerése és megkülönböztetése.
A
Windows
változat
előnye,
hogy
közvetlenül,
USB
csatlakozások keresztül kapcsolódik a számítógéphez, és képes kommunikálni vele.
5. ábra A Kinect
A Kinectek megismerését különböző példakódok teszik könnyebbé és segítik a fejlesztést is. Az ingyenesen elérhető Kinect for Windows SDK különböző verziói állnak rendelkezésre, és tartalmaznak már kész programokat több nyelven (C++, C#, illetve Visual Basic). Ilyen program többet közt a mélységkép, a csontváz, vagy az arcfelismerés.
- 21 -
A Kinect megismerése során elsőként arra fektettek hangsúlyt, hogyan lehet a videófolyamot képpé konvertálni, hiszen az emberfelismerést segítő komponens megvalósítása során a Kinect-től függetlenül képeket használok bemenetként. A komponens megvalósítása során bemenetként használt tesztképeket szintén a Kinect-tel készítettem el, majd ezeken végzem el a képfeldolgozási műveleteket, hogy a megoldás minél jobban kielégítse az éles rendszerben elvárt követelményeket.
6. ábra A tesztképek egyike
Az elkészített képek egyik problémája, hogy túl sok teret foglal el a háttér, amely a vizsgálat szempontjából lényegtelen, haszontalan. Egyrészt, félrevezethető eredményt adhat azáltal, hogy a háttér színét jelöli meg domináns színként, másrészt a komponens bemenete az embert felismerő komponens eredményeképpen kijelölt terület lesz, vagyis a kép azon része, amelyen az ember található. Az eredmény hatékonyságának - 22 -
növelésének érdekében a képeket meg kell vágni oly módon, hogy csak az embert és közvetlen környezetét tartalmazza.
- 23 -
6. A komponens tervezése Ebben a fejezetben a komponens tervezésének menetét és a tervezés során készült diagramokat dokumentálom. Az alrendszer célja, hogy segítse az ember pozíciójának felismerését a színek meghatározásával,
és
ezáltal
alkalmas
legyen
az
idegen
és
a
gazda
megkülönböztetésére. Mivel a komponenst C# nyelven készítem ezért több osztályból, könyvtárból fog állni, melyeket
az
átláthatóság
érdekében
célszerű
alrendszerekbe
foglalni.
Az
alrendszerekbe foglalást osztályok és könyvtárak segítésével fogom megvalósítani. Elvárások a komponenssel szemben: -
segítse az ember pozíció meghatározást
-
alkalmas legyen szín alapján történő megkülönböztetésre
-
hatékony működést eredményezzen
-
bemenetként egy képet várjon
-
kimenetként egy színt adjon vissza
Ahhoz, hogy az elvárásokat teljesíteni tudja, a programot néhány osztályra kell bontani. Erre egyrészt azért van szükség, hogy az egyes részek elkülönüljenek egymástól, és az egybetartozó részek logikailag egy csoportba tartozzanak, másrészt azért, hogy az eredményt ellenőrizni lehessen és finomítani, még hatékonyabbá tenni a működést.
- 24 -
6.1. A komponens kezdeti terve Az implementálás során a HSV színteret használtam, és hat fő színt határoztam meg, melyekből ki lehet majd választani, hogy melyek a keresendő színek. A hat fő szín a következő: piros, sárga, zöld, cián, kék, magenta. Első lépésként a tesztképeken kellett megvizsgálnom, hogy melyek a megfelelő tartományok az egyes színeknek. Ezért elkészítettem egy osztályt, amely arra szolgál, hogy a képen ellenőrizni lehessen, mely pixelek esnek a megadott tartományba. Szükség van továbbá egy olyan osztályra, amely a valódi feladatot oldja meg. Ez az osztály az egyes pixeleken végigiterálva meghatározza, hogy mely színárnyalathoz tartozik. Ennek eredménye egy tömb, amely tartalmazza az összes színárnyalatot és azt, hogy hány darab található belőle. Ezt egy diagramon célszerű megjeleníteni. Végül szükséges meghatározni azt, hogy a bemenetként kapott színnek megfelelő tartományba hány darab pixel esik, és ezt elosztva az összes pixelszámmal megkapjuk az eredményt. A következő ábrán a kezdeti blokkvázlat látható:
7. ábra A komponens kezdeti terve
- 25 -
Az én feladatom a színtartomány meghatározó, a hisztogram megjelenítő és a színmeghatározó algoritmus elkészítése, míg az ember felismerő az a komponens, amelyhez az általam készített emberfelismerést segítő komponens csatlakozik.
6.2. A komponens részletes felépítése A komponens két különböző összetevőből áll, az egyik a színtartomány ellenőrzésére szolgál, a másik pedig a tényleges eredményt szolgáltató színfelismerő.
6.2.1. ColorRangeChecker A ColorRangeChecker feladata, hogy a színtartományokat meghatározása során ellenőrizni lehessen a megfelelőségét. Egyetlen osztályból áll, a Checker osztályból
A Checker osztály A Checker osztályra a színtartományok meghatározása végett van szükség. A paraméterként kapott képet átalakítja a szintén paraméterként adott hue tartományra, és így segítségével lehet azt ellenőrizni, hogy a tartomány szélessége megfelelő-e, illetve van-e szükség annak bővítésére, szűkítésére. Bár közvetlenül nem kapcsolódik a komponenshez,
az implementálás során
ez
volt segítségemre,
színárnyalatokhoz tartozó tartományt meg tudjam határozni.
8. ábra A Checker osztálydiagramja
- 26 -
hogy a
Elsőként a kapott képet RGB színtérről HSV színtérre konvertálja. Erre azért van szükség, mert a HSV színtér esetén nem csupán a színt nézi, hanem az árnyékolást is. Ezt azt jelenti, hogy a fényviszonytól függően változik, hogy az objektum világosabb vagy sötétebb árnyalatú. Ha egy képrészlet túl sötét, vagy túl világos, nem lehet egyértelműen megállapítani róla, hogy valójában milyen szín. Az osztálynak két adattagja van, az a kép (Image
image), amelyen a képfeldolgozási műveleteket végrehajtjuk, és egy másik kép, amely a feldolgozott kép (Image resultImage) Az osztály metódusai: -
public Checker(Image image): az osztály konstruktora
-
public void ProcessImage(int minHue, int maxHue): a képet dolgozza fel úgy, hogy
a paraméterben kapott minimum és maximum érték közé eső színtartománynak megfelelően átalakítja egy fekete-fehér képpé -
public Image GetProcessedImage(): a feldolgozott képet adja vissza
6.2.2. ColorDetection A ColorDetection a feladatot ténylegesen megvalósító összetevő. Két osztályt foglal magába, az ImageProcessing és a Histogram osztályokat.
9. ábra A ColorDetection osztályai és kapcsolatai
- 27 -
Az ImageProcessing osztály Az ImageProcessing osztály már közvetlenül kapcsolódik a feladathoz. Az osztály feladata, hogy a paraméterben kapott képeket feldolgozza, majd eredményként a szintén paraméterben kapott színnek megfelelő értéket adja vissza százalékosan. Tulajdonképpen ez az osztály végzi a feladat megoldásának legnagyobb részét. Az első lépés itt is szintén a kép alakítása, vagyis a RGB színtérből a HSV színtérbe történő konvertálása. Ez utána megvizsgálja, hogy a paraméterben kapott színeknek megfelelő tartományokba mennyi pixel esik. Ezen belül színárnyalatonként is megszámolja a pixelek számát, amelyből elkészíthető egy hisztogram.
Az utolsó
lépésben a kapott pixelszámot elosztja az összes pixelek számával.
10. ábra Az ImageProcessing osztálydiagramja
Az osztály három adattagot tartalmaz. Az egyik a feldolgozandó kép (Image image), a másik a keresendő szín (Color color), a harmadik pedig a HSV színtérrel
alakított kép színárnyalat csatornája (Image imageHue) Az osztály metódusai: -
public ImageProcessing(Image image, Color color) : az osztály
konstruktora -
private void ConvertToHue(): a kapott képet átalakítja RGB színtérről HSV
színtérre
- 28 -
-
private int[] CreateHueArray(): megszámolja, hogy az egyes színárnyalathoz
mennyi pixel tartozik és ezt egy tömbben tárolja. -
public int GetAllPixel(): megszámolja a képen található összes pixelt
-
public int GetColorPixel(int minIndex, int maxIndex): megszámolja a színnek
megfelelő (vagyis a színtartományban eső) pixeleket.
A Histogram és Histogram.Designer osztály [9] [10] A Histogram osztály hívja meg az előzőekben bemutatott ImageProcessing osztályt. Emellett a fő feladata, hogy a színárnyalatoknak megfelelő pixelszámokat tartalmazó tömböt megjelenítse egy diagramon, ez lesz maga a hisztogram. Az y tengelyen a pixelszámok láthatók, az x tengelyen pedig az egyes színárnyalatok. Az EmguCV tartalmaz beépített hisztogramot is. Azért választottam egy saját hisztogram kirajzolását, mert így egy olyan diagramot tudtam elkészíteni, ami hatékonyabban ábrázolja az eredményeket, és nem tartalmaz olyat, amire nincs szükségünk. A Histogram osztály egy Windows Form, amelyen található egy diagram objektum. A hisztogram megjelenítésére oszlopdiagramot alkalmaztam, amely mögé elhelyeztem egy színskálát, hogy az eredményt könnyebben lehessen ellenőrizni. Tulajdonképpen két osztályból áll, a Histogram és a Histogram.Designer osztályokból. Valójában egyetlen osztály, amely két részre van bontva és különválasztva, amelyek fordítás során egyetlen osztállyá válnak. A Histogram.Designer kódját a Visual Studio generálja, amikor a Windows Formhoz egy objektumot adunk. A Histogram ezzel szemben azokat a kódrészleteket tartalmazza, amelyet a felhasználó készít el. Ide kerülnek többek közt az eseménykezelők.
- 29 -
11. ábra A Histogram és Histogram.Designer osztálydiagramja
A Histogram.Designer osztály egyetlen adattagot tartalmaz, amely maga a diagram terület (Chart chart1). Az osztály metóduai: -
private void InitializeComponent(): létrehozza és konfigurálja az objektumokat,
amelyeket megjelenítünk -
private void Dispose(bool disposing): a használat után elengedi a futás során
használt erőforrásokat.
A Histogram osztály, az előzőekhez hasonlóan tartalmaz egy adattagot, amely a képet tárolja (Image image), és a keresendő színt (Color color). Ezen felül az ImageProcessing osztály egy példányát (ImageProcessing ip), és egy, a színárnyalatok
pixelszámát tároló tömböt (int[] hue).
- 30 -
Az osztály metódusai: -
public Histogram(Image image, Color color): az osztály konstruktora
-
public void Histogram_Load(object sender, EventArgs e): az osztály betöltéséért
felelős eseménykezelő -
public double GetResult(int minIndex, int maxIndex): a keresendő színnek
megfelelő pixelszámot elosztja a kép összes pixelével, és ezt az arány szolgáltatja eredményként.
A hisztogramra bonyolultabb esetekben van szükség, amikor a gyakoriságot kell közelebbről megvizsgálni. Ilyen lehet, a továbbfejlesztés során, amikor a környezet színeit választjuk külön a személy által viselt marker színeitől.
- 31 -
7. Az elkészült alkalmazás tesztelése Ebben a fejezetben az elkészült alkalmazás használata kerül bemutatásra, illetve az alkalmazás működése közben készült képek segítségével szemléltetem funkcióit. A komponens használatának az idegen helyzet teszt rendszerbe bekapcsolva van értelme. Az emberpozíció felismerő alrendszer a képnek azt a részét adja át paraméterként a színfelismerést végző komponensnek, amelyen az ember vagy emberek találhatók, valamint meghatározza a keresendő színeket ezen a részen. A színfelismerő komponens visszaadja eredményként az emberfelismerő alrendszernek azt az értéket, hogy az egyes keresendő színek aránya mennyi az egészhez képest, és majd az alapján fogja eldönteni, hogy melyik a gazda és melyik az idegen. A komponens önállóan nem működőképes, ugyanis szükséges valamilyen bemeneti paramétereket megadni, és az eredmény sem látható szemmel. Ezért, hogy az egyes funkciókat ki lehessen próbálni, felhasználói felületet hoztam létre. A következőkben ezen keresztül fogom bemutatni a komponens működését.
7.1. Az alkalmazás működés közben Ebben a fejezetben képekkel illusztrálva bemutatom az elkészült komponens, illetve az összetevők működését. 7.1.1. ColorRangeChecker A komponens használatának első lépése a színtartományok meghatározása, ellenőrzése. Ehhez a ColorRangeChecker.exe fájlt szükséges futtatni. Indításkor a következő ábrán található képernyőt láthatjuk. A tesztképek közül lehet kiválasztani, hogy melyre szeretnénk lefuttatni a vizsgálatot, valamint megadni egy minimum és egy maximum értéket. Ez jelenti azt a tartományt, amelybe eső pixelekre szükségünk van. A felhasználói felületen található még egy nyomógomb is, amellyel a képfeldolgozás elindítható.
- 32 -
12. ábra A színtartomány ellenőrző az elindítás után
A képfeldolgozás során a beállított minimum és maximum közötti tartományra megvizsgálja, hogy mely pixelek esnek bele, majd ezt megjeleníti, összehasonlítva az eredeti képpel. A minimum és maximum értékek változtatásával lehet növelni vagy csökkenteni a tartományt. Változtatás során nem kell újból és újból elindítani a programot, elég csak megváltoztatni az értékeket és ismét megnyomni a nyomógombot.
A következő ábrán látható egy példa egy tartományra.
- 33 -
13. ábra Szűk tartomány
A feldolgozott képen jól látható, hogy a tartomány szűk, ugyanis nem vesz figyelembe olyan pixeleket, amelyre még szükségünk van. Ez azt jelenti, hogy ha egy megadott tartományt használjuk a színfelismerés során, nem pontos eredményt kapunk. A 14. ábrán látható, hogy tágabb tartomány megadása esetén az előzőhöz képest jobb eredményt szolgáltat és már ténylegesen figyelembe veszi azokat a pixeleket, amelyekre szükségünk van. Látható továbbá az is, hogy megjelennek a zajok. Tehát ha ettől is nagyobb tartományt ad meg a felhasználó, akkor szintén torzítja az eredményt a környezeti zajokat jelentő, vagy már másik színhez tartozó pixeleket is beleszámolva.
- 34 -
14. ábra Szélesebb tartomány
A színtartomány meghatározása után a tesztképekre az egyes színekhez tartozó tartományokat a következő táblázat tartalmazza. Szín
Minimum
Maximum
Piros
170
24
Sárga
25
35
Zöld
35
75
Cián
76
99
Kék
100
130
Lila
131
169
1. táblázat A színek és a hozzá tartozó tartományok
A színeket egy körként értelmezzük, és a minimum és maximum értékek fokban értendők, vagyis a 180 megfelel a 0-nak. Ezért a piros szín megadására másképpen van szükség, ahogy az a táblázatból is látszik.
- 35 -
Erre az összetevőre azért van szükség, mert a képek minőségétől függően változhatnak a színtartományok, így hatékonyabb működést, illetve jobb eredményt érhetünk el. 7.1.2. ColorDetection A színfelismerést a ColorDetection összetevő végzi. Ennek a futtatása a ColorDetection.exe indításával történik. Ekkor szintén egy, az előzőhöz hasonló felhasználói felületet látunk a képernyőn.
15. ábra A színfelismerő az elindítás után
A színtartomány ellenőrzőhöz hasonlóan itt is ki kell választani egyet a tesztképek közül. Utána a keresendő színekből kell egyet kiválasztani. Eredményként ennek a kiválasztott színnek az arányát kapjuk meg az egészhez viszonyítva. A nyomógomb megnyomásával elindítható a képfeldolgozás. Ennek eredménye a következő ábrán látható.
- 36 -
16. ábra A felhasználói felületen megjelenő mérték a keresett színre
A felhasználó felületen megjelenik egy százalékos érték, amely egy mértéket definiál arra, hogy a keresett szín mekkora valószínűséggel lesz az emberen (gazdán) lévő marker színe, tehát, hogy mekkora eséllyel olyan színű a gazda jelölője. Ez azt jelenti, hogy a keresendő szín (ez esetben a cián) az összes pixelhez képest (a kép teljes méretéhez képest) ~8%. Ez az mérték a színfelismerő komponens kimenete, mely bemeneti paramétere lesz majd emberfelismerő alrendszernek. A következő táblázat az egyes keresendő színek arányát mutatja az egyik tesztképen. Szín
Arány
Piros Sárga Zöld Cián Kék Lila
48,04% 1,28% 12,33% 8, 02% 28,36% 1,96%
2. táblázat Az egyes színek aránya egy tesztképen
- 37 -
A táblázat szerint a piros a legnagyobb arányú szín, közel a kép felét ez a szín teszi ki. Ebből az a következtetés vonható le, hogy az embernek nem ajánlatos pirosas vagy narancssárgás mellényt viselnie, ugyanis a környezet miatt rossz, nem pontos eredményt adhat. Ha ketten tartózkodnak a szobában, és ha az egyik ilyen színű markert visel, hiába van hátrébb, kisebb aránynak kellene lennie a kisebb terület miatt, de a környezet színeit beleszámolni azt fogja eredményezni, hogy ő van közelebb a Kinecthez. A későbbiekben ezt a hibát úgy lehet kijavítani, hogy meg kell vizsgálni, hogy a környezet milyen színeket tartalmaz, és összehasonlítani az emberek által viselt markerrel. Ahhoz, hogy az arányt szemléltetni lehessen, valamint ellenőrizni, hogy körülbelül valóban jó-e, a képfeldolgozás során megjelenít egy hisztogramot. Ezen a hisztogramon minden egyes színárnyalathoz kirajzol egy-egy oszlopot, amelynek magassága a színárnyalatnak megfelelő pixelek száma. Egyszerűbb esetekben a hisztogramra nem feltétlenül van szükség, de bonyolultabb esetekben már igen. A továbbfejlesztés során a komponenst úgy tervezem bővíteni, hogy képes legyen a környezet színeit figyelembe venni és összehasonlítani az marker színével. Ekkor a gyakoriságot közelebbről is meg kell vizsgálni. Erre szolgál a hisztogram, amelyet a program megjelenít.
A következő ábrán a hisztogram látható egy tesztképre.
- 38 -
17. ábra A hisztogram egy tesztképre
- 39 -
8. Összefoglalás Dolgozatom készítése során a képfeldolgozás alapjaiba nyertem betekintést. Megismerkedtem többféle képfeldolgozási módszerrel, valamint képfeldolgozó keretrendszerrel, amelyek közül az EmguCV-re esett a választásom, és ez került bemutatásra. Részletes ismereteket szereztem az idegenhelyzet tesztről és annak megvalósításából, melynek egyik komponensének, az embert felismerést segítő komponensének megtervezése és elkészítése volt a feladatom. A dolgozat témájával kapcsolatos információkról főként az interneten tájékozódtam, jórészt magyar nyelvű szakirodalom felhasználásával. A felhasznált irodalmak között szerepelnek különböző rövidebb ismertetők, leírások, és a feladat megoldásához felhasznált programozási nyelvvel foglalkozó Internetes tartalmak. Megismerkedtem továbbá hasonló, már létező megoldásokkal, és mivel a feladatot nem úgy teljesítik, ahogyan azt szükséges, egy saját komponens elkészítését választottam. A feladat elkészítése során lehetőségem nyílt a C# programozási nyelvből eddig megszerzett tudásomat bővíteni új ismeretekkel. A komponens megtervezése és elkészítése mellett ki kellett választanom egy megfelelő markert, amely az idegenhelyzet teszt során megkülönbözteti az embereket (a gazdát és az idegent). Elsőként a markerekről gyűjtöttem információt. A választásom a láthatósági mellény viselésére jutott, amely több színben is elérhető, valamint nagy felületet biztosít, így könnyebben felismerhető és a mozgás során nem lehet véletlenül kitakarni. A későbbi tapasztalatok azonban azt mutatták, hogy a láthatósági mellény átlátszósága nehezíti a szín meghatározását, ugyanis az árnyalata az alatta viselt ruhadarabtól függően változhat. A
komponens
implementálása
több
módszert
is
kipróbáltam.
Kezdetben
foltdetektálással próbáltam felismerni a mellényt, amely nem minden esetben adott jó eredményt. Később a színárnyalatokat hat fő színre bontottam és meghatároztam a hozzájuk tartozó színtartományokat. A végleges megoldás során a keresendő színeknek megfelelő tartományba eső pixeleket összeszámoltam és elosztottam az összessel, így megkaptam egy százalékos arányt. Lehetnek olyan tényezők, amelyek - 40 -
befolyásolják az eredményt. Ilyen lehet, mint a tesztképek esetében is, hogy a kék színű ruhám nagyobb terület, mint a mellény, ezért paraméterként szükség van a keresendő szín megadására. Az implementálás során a HSV (hue, saturation, value) színteret használtam. A választásom azért esett erre, mert az RGB-vel ellentétben nem csak a színeket, hanem az árnyalatokat is figyelembe veszik. Ez azért fontos, mert természetes környezetről van szó, a megvilágítás, árnyékolás változik és ez befolyásolja a színt is. Egy nagyon világos, vagy egy nagyon sötét részről ugyanis nem lehet megállapítani, hogy az milyen szín volt eredetileg. További fejlesztési folyamatként javaslom a komponens finomítását, illetve egy olyan módosítását, hogy megvizsgálja a környezet színeit és azt összehasonlítsa az emberek által viselt markerrel. A dolgozat írása közben nehézségekbe is ütköztem, ilyen nehézségek voltak a feladat megoldására való technikák, lehetőségek felkutatása illetve a megoldási lehetőségként szánt alkalmazás elkészítése C# nyelven, amely komplexitása miatt okozott bonyodalmakat. A dolgozat készítése alatt sok hasznos új információt szereztem az idegen helyzet tesztről, a képfeldolgozás működéséről, és a C# programozási nyelvről.
- 41 -
9. Summary While making my thesis, I got an insight into the basics of image processing. I met some methods of image processing and framework, and I chose and introduced the EmguCV. I got detailed knowledge of the Strange Situation Test (SST), and its implementation. My task was to plan and implement a component for SST, which helps to realise and distinguish the people (the owner and the stranger). The information related to the topic of the thesis was collected mainly from the Internet, I used Hungarian short descriptions and other contents. Furthermore I met other, existing solutions, but the problem was not solved well by them, therefore I decided to create my own solution. While making this, my knowledge of C# programming language was expanded with new knowledge. Beside planning and implementing the component, another task was to choose an appropriate marker, which distinguishes the people in the SST. First, I collected information about markers. My choice is wearing a visibility vest, which is available in different colors, and it ensures a big surface, so it cannot be in coverage when the people are moving. My further studies and research showed that transparency makes the color detection more difficult, because the hue depends on the colour of the clothes under the vest. I have tried several methods to implement the component. Initially I tried to recognise the vest by blob detection, but it gave a bad result in some cases. Later, I divided the hues to six main colors and I defined their range. The final solution was to count the pixels in the range of the color to be searched. If it is divided by the all pixels, it gives the result. There can be factors, which affect the result. For example, in the test pictures, my blue dress is bigger area than the vest. It means that creating an input parameter of the color is needed. During the implementation, I used the HSV (hue, saturation, value) colorspace. Against the RGB, the HSV pays attention to the hues and not only to the colors. It is
- 42 -
important, because in natural environment the lighting can change the hue. If an area is very light or dark, the original color is unknown. For further developing I suggest the refinement of the component. It may also be expanded so that it can recognise the colors of the environment, and compare them to the markers worn by the people. In the process of making my thesis, I met some obstacles, for example exploring the existing methods which solve the problem or implement my own component in C# programming language, because of its complexity. I collected some new knowledge about the Strange Situation Test, the image processing methods and the C# programming language.
- 43 -
Felhasznált irodalom [1] Dávid Vincze, Fuzzy Rule Interpolation-based Q-learning, PhD dissertation [2] https://en.wikipedia.org/wiki/SharpDevelop [3] http://www.aforgenet.com/framework/ [4] http://www.emgu.com/wiki/index.php/Main_Page [5] https://hu.wikipedia.org/wiki/Unified_Modeling_Language [6] https://en.wikipedia.org/wiki/StarUML [7] http://www.ibm.com/watson/ [8] http://www.ibm.com/watson/developercloud/visual-recognition.html [9] http://www.devcomponents.com/kb2/?p=1327 [10]
https://msdn.microsoft.com/en-us/library/aw58wzka(v=vs.110).aspx
Hivatkozások ellenőrzésének dátuma:2016. 11. 15.
- 44 -
Köszönetnyilvánítás Köszönöm Dr. Kovács Szilveszter témavezetőmnek és Piller Imre konzulensemnek, hogy lehetőséget biztosítottak dolgozatom elkészítéséhez, köszönöm segítőkész támogatásukat, hasznos tanácsaikat, illetve, hogy tanácsaikkal és iránymutatásaikkal hozzájárultak szakmai fejlődésemhez. Köszönöm Bartók Rolandnak és Tompa Tamásnak hogy hasznos tanácsaikkal segítették munkámat. Köszönöm a páromnak, Tamásnak és a családomnak, hogy bátorításaikkal, tanácsaikkal végig segítségül voltak utamon. Köszönöm!
- 45 -