Bellon Balázs Önálló laboratórium beszámoló Témakiírás: Szövegbevitel agy-számítógép interfész segítségével Konzulens: Mészáros Tamás
Tartalomjegyzék 1. Feladatleírás........................................................................................................... 3 2. A felhasznált eszköz............................................................................................... 4 2.1 Az eszköz leírása.......................................................................................... 4 2.2 Az eszköz üzembe helyezése, szoftveres környezet.................................... 4 2.3 Tesztelés....................................................................................................... 6 3. Szövegbeviteli módszerek..................................................................................... 7 3.1 Más emberek munkája................................................................................. 7 3.2 Saját megoldás............................................................................................. 8 3.3 Kezdeti szótár, profilok................................................................................ 8 3.4 Tanuló algoritmus........................................................................................ 9 3.5 Menürendszer............................................................................................... 9 4. Cross platform, hálózat, mobil eszközök............................................................... 10 5. Implementáció, teszt program................................................................................ 11 5.1 Szerver alkalmazás....................................................................................... 11 5.2 Kliens alkalmazás........................................................................................ 11 6. Irodalomjegyzék.................................................................................................... 14
1. – Feladatleírás
A feladat egy olyan szövegbeviteli rendszer megvalósítása, amely kommunikációs lehetőséget teremt különböző motorikus funkciókat korlátozó betegségekben (ALS) szenvedő emberek számára. A feladat célja így az EEG neuroheadset felhasználásával megvalósított karakteres szövegbevitel. A félév során elvégzett feladatok: •
Ismerkedés a készülékkel (Emotiv Epoc)
•
Ismerkedés az Emotiv szoftveres környezetével
•
Szövegbeviteli módszerek utáni kutatás
•
Szövegbevitelt segítő algoritmusok
•
Alkalmazások irányítása a headset segítségével
•
Alternatív kommunikációs lehetőségek (nem betűnként, pl természetes nyelvű menürendszer)
•
Megjelenítés elválasztása a headset kezelésétől, külön eszköz felhasználása
•
Mobil platformok támogatása
2 – A felhasznált eszköz 2.1 – Az eszköz leírása [1] A rendelkezésre álló eszköz egy Emotiv EPOC neuroheadset. Főbb jellemzői: •
14 szenzor
•
Beépített gyroscope, fej mozgatását képes érzékelni
•
Vezeték nélküli megvalósítás
•
Kognitív érzékelés (Affective suite)
•
Arcmimika érzékelése (Expressive suite)
•
Hangulat érzékelése (Affectiv suite)
A headset mellé tartozik az Emotiv által készített szoftveres felület, amely önmagában számos funkciót valósít meg, illetve a programozáshoz felhasználható SDK. 2.2 – Az eszköz üzembe helyezése, szoftveres környezet Az eszköz tárolás során szét van szerelve, ami alatt azt értjük, hogy az érzékelők eltávolíthatóak, kicsavarhatóak a készülékből. Tárolásukra külön tok van, amely a rajtuk lévő szivacsok kiszáradását próbálja elkerülni. Ezért használat előtt az érzékelők szivacsos részét folyadékkal be kell nedvesíteni, majd bele kell csavarni az eszközbe. Összesen 16 darab érzékelő elektróda van (ebből 2 referencia elektróda) Az érzékelők elhelyezése után meg lehet próbálni elhelyezni a fejre, azonban ez sem triviális feladat, így a hosszú haj vagy a rossz elhelyezés az eszköz pontosságát befolyásolhatja. Erre segít a vezérlő program felülete, amely fekete, piros, narancssárga, sárga, zöld színű színskálán jelzi az egyes elektródák jelének erősségét.
A megfelelő elhelyezés nem feltétlenül eredményezi az összes érzékelő zöld színű jelzését. Ettől függetlenül az eszközt használatba lehet venni. A control panelen ezen túl található 3 különböző panel [2]. Expressiv Suite: ez a része használható a programnak arcmimika érzékelésére. Bár a feladatunk a kognitív részt használja, arcmimika érzékelése is hasznos lehet egyes felhasználóknak, ezért érdemes lehet a későbbiekben a headset ilyen képességeinek a felhasználása. Affectiv Suite: hangulatváltozás detektálása, mint unalom, izgalom, frusztráció. A mi esetünkben nem feltétlenül hasznos, esetleg érdekes lehet a hangulatok monitorozása későbbi felhasználásra. Cognitive Suite: a szoftver ennek a része valósítja meg a kognitív érzékelést. Működése során megpróbáljuk a programot különböző gondolatokra betanítani, majd később ugyanezen gondolatokra való koncentráció alkalmazásával lehet eseményt kiváltani. A tesztprogram részeként egy 3 dimenziós kocka mozgatása a cél, de a program részeként a betanított érzeteket meg lehet feleltetni egy billentyű lenyomásának is.
A gondolatok, érzetek betanítása és kezelése nem egyszerű feladat. Egy érzet kezelése sem triviális feladat, több esetén pedig nehéz a különböző érzeteket elkülöníteni. Emellett az elmentett érzetek közel sem biztos, hogy legközelebbi használatkor működni fognak. Így a készülék használata jelentősen befolyásolta a felhasználói felület tervezésének lépéseit. Nem lehet elvárni minden embertől 2-3 különálló érzet betanulását.
2.3 Tesztelés Problémát jelenthet az eszköz tesztelése, ha éppen nem áll rendelkezésre (otthoni tesztelés), vagy olyasmit szeretnénk rajta tesztelni, amire nem vagyunk képesek (több érzet használata). Erre jelenthet megoldást az Emocomposer program. Segítségével a headset minden funkcióját le lehet szimulálni. Hasznos funkció mindemellett még a scriptelési lehetőséget biztosító része a programnak. Így különböző érzeteket, cselekvéseket sorban le lehet programozni és egy gombnyomással végrehajtani. A program készítői számos test scriptet is létrehoztak nekünk, tovább egyszerűsítve a tesztelést.
3. – Szövegbeviteli módszerek 3.1 – Más emberek munkája Sima billentyűzet kiosztás: Ilyen megoldásokat lehet találni az interneten, melyek egy szabványos billentyűzetet jelenítenek meg és a billentyűk között lehet váltogatni, általában négy irány, valamint egy kijelölő funkció használatával. Lehet tisztán kognitív érzékelővel is vezérelni, ez nehézkes, általában inkább gyroscope-al szokás ezeket használni. Tanuló algoritmust nem valósít meg, vagy esetleg csak szavak befejezését segíti a billentyűzet valamely részén megjelenő kész szavak listájával. Tisztán kognitív érzékelővel ennek a billentyűzetnek a használata bár megoldható, nehézkes lehet. Ilyen alkalmazás található az Emotiv honlapján is [3]. Egy érzetet használó megoldás: Elképzelhető egy olyan megoldás, ahol a kiválasztható betűk egy mátrixban vannak a képernyőn elhelyezve. Az oszlopok között folyamatosan váltogat az alkalmazás egy meghatározott időnként, a felhasználó pedig egy érzettel ki tudja választani az oszlopot, majd ezután a program a sorok között váltogat, így ezzel a megoldás ki lehet választani a mátrix egyes elemeit. Esetleg egy tanuló algoritmus átrendezheti a betűk sorrendjét valamilyen módszer szerint, de ez nem feltétlen szükséges, sőt előfordulhat, hogy egyes felhasználók jobban szeretik ebben az esetben a betűk statikus elhelyezkedését. Ez a megoldás első megközelítésben lassúnak tűnik, azonban nem elhanyagolható az az előnye, hogy a felhasználónak nem kell több érzetet bevinnie a számítógépbe, könnyedén használható. Egy amerikai kutatás során [4] használtak ilyen megoldást, bár ők másmilyen headsettel, más eeg eljárással valósították meg. Hat betű megjelenítése egyszerre: Ebben a megoldásban egy hatszög csúcsainak elrendezésében hat darab betű jelenik meg. A betűk között lehet váltani, illetve ha a hat darab betű között nincsen a keresett, akkor lehet további hat betűre váltani. A megoldás valamilyen tanuló algoritmust is felhasználhat, ahol a legépelt szavak eltárolásával a betűk megjelenésének sorrendjét dinamikusan át lehet rendezni, így gyorsítva a gépelést. A megoldás problémája lehet, hogy sokat kell váltogatni a hat betűk között, mire meglátjuk az általunk keresett betűt, illetve használatához relatív sok érzet szükséges (3-4) [5].
3.2 – Saját megoldás A saját megoldás első elképzelésem alapján egy kör alakban elrendezett billentyűzet. A kör mozgatása balra és jobbra is lehetséges, a kör egy adott pontján pedig az aktív, kiválasztott betű található. Így két érzet forgatja a kört, egy pedig a kiválasztást végzi. A betűk sorrendje dinamikusan, leütött betűnként átrendezhető a szövegkörnyezettől függően. A dinamikusan sorrend meghatározására a program egy szótárat tarthat nyilván a használt szavakról és azok gyakoriságáról. Ez a megoldás első körben ugyan jónak tűnik, a headset-tel való ismerkedés során kiderült, hogy a 2-3 érzet használata korántsem egyszerű dolog. Emellett egyes betegségek korlátozhatják az ember kognitív képességeit [6], így előfordulhat, hogy nehezebben tudnak érzeteket betanulni a headsettel. Ezért fontos, hogy a szövegbevitelnek biztosítsunk olyan beviteli felületet is, melyet egy érzettel is lehet használni. Erre jó megoldás a már korábban említett mátrixos szövegbevitel. A végső változatban érdemes lehet a kettő változat közötti váltás támogatása a felhasználó képességeinek figyelembe vételével. 3.3 – Kezdeti szótár, profilok A tanuló algoritmus implementálása során fellép egy olyan probléma, hogy mi legyen a kiinduló állapot, amikor először kezdi el valaki használni az alkalmazást. Egyszerű megoldás ebben az esetben a sima ABC sorrend, tehát a nulláról való tanítás, de ennek a betanítása sokáig is eltarthat, ezért egy alternatív kezdőállapot felajánlása a program használatba vételekor előnyös lehet. Az interneten első keresésre is több gyakori szavak listát lehet találni szinte minden nyelvről, amelyek általában a leggyakrabban használt N szavat mutatják, gyakoriság szerint sorba rendezve. Ebből elő lehetne állítani egy kiindulási szótárt. Ezek után kérdés lehet még az, hogy a kezdeti szótárt milyen módon használjuk, illetve mi történik akkor, ha egy alkalmazásnak több ember adatait, szokásait kell kezelni egyszerre. Érdemes lehet meghatározni egy profil rendszert, amely az egyes felhasználóik beállításait és ezzel együtt a szokásait külön tárolja el, a program használatakor pedig lehet váltogatni az egyes profilok között, így használata közben a tanító algoritmus mindig csak az adott személyre vonatkozó szótárt használja. Profilonként érdemes lehet bevezetni egy olyan opciót, ahol a szótárakat fel lehet tölteni elmentett szótárakkal, és az aktuális szótárt is el lehet menteni. Nálunk ebben az esetben a szótár feltöltése lesz érdekes. Feltöltésből célszerű több fajta feltöltést használni, ahol az egyik feltöltés egy üres szótárat tölt fel, tehát elveszítjük a szokásainkat, a másik fajta összefűzést valósít meg, tehát a meglévő szótárhoz feltölti az általunk megadottat. Most hogy meghatároztunk egy profil rendszert, illetve a szótárak elmentését, és feltöltését, vissza lehet térni a kezdeti szótár meghatározására. Érdemes lehet előállítani a szavak gyakorisági listájával egy alap, tanító szótárt, mely betöltésével határozunk meg egy alap állapotot. A tanító szótárban meghatározzuk, hogy milyen szavaknak milyen kezdeti gyakoriságot szeretnénk megadni, így például elképzelhető egy olyan megoldás, hogy a leggyakoribb 100 szó N-szer fontosabb, mint a leggyakoribb 200, és így tovább, valamint azt is meg tudjuk adni, hogy mekkora használat után fogja az egyedi szokásaink felülírni a tanító szótárban meghatározottakat. Például ha a leggyakoribb szavak előfordulása a tanuló szótárban alacsony számban van meghatározva, akkor rövid használat után is a saját szokásaink erősebb változásokat idéznek elő a tanításban, míg egy magasabb számú szó gyakoriságot meghatározó tanító szótárban változást előidézni nehezebb, hosszabb feladat lesz. Egy megfelelő tanító szótár kialakítása így nem egyértelmű feladat, viszont ez a megoldás remélhetőleg jól skálázható és módosítható, illetve így az alkalmazásunk nem kötött egyetlen nyelv használatához.
3.4 – Tanuló algoritmus Sima ABC sorrend használata: Ez első körben amíg a dinamikus szótár üres, vagy nem elég nagy, addig használható. Esetleg egyéb csoportosítás, pl. mássalhangzók és magánhangzók egybeszedve. Dinamikus szótár [7]: dinamikusan bővítünk egy szótárat, ahova a beütött szavakat eltároljuk, ez alapján határozzuk meg, hogy milyen betűk milyen sorrendben következnek. Az első betű lehet az első helyen a leggyakrabban előforduló betű, a második helyen a második helyen leggyakrabban előforduló betű. Ez már talán működne, de lehet érdemes lenne figyelmi, hogy a már meglévő betűk szekvenciája milyen szavakat tudna befejezni. Így az első betű továbbra is a leggyakrabban előforduló első betű, a második, illetve n.-dik betűnél pedig figyelembe vesszük, hogy mi van előtte, és mivel tudjuk befejezni, így kigyűjtjük azon szavak listáját, amelyeket be tudunk fejezni a meglévő betűkkel, és ezek közül keressük ki a leggyakrabban előforduló betűket. Ez idáig úgy tűnik, hogy működhet, azonban így csupán azt figyeljük, hogy milyen szavakat ütöttünk le, a szavak használatának gyakoriságáról még nem esett szó, így problémás lehet, ha egy olyan szó, vagy szavak csoportja, melyeket ugyan ritkán használunk, de el van már tárolva a szótárunkban, negatívan befolyásolhatják a kívánthoz képest a billentyűzet működését, ezért ki kell találni a betűk fontosságának egy olyan súlyozását, amely figyelembe veszi a szavak előfordulását is. Ezt legegyszerűbb módon talán úgy lehetne megoldani, hogy minden szónak tároljuk az előfordulását is, tehát ha olyan szavat gépeltünk be, amely már benne van a dinamikus szótárunkban, annak egy előfordulási számát növeljük, a betűk fontosságánál pedig ezt az előfordulási tényezőt használjuk fel a sorrend előállításához, így az adott szekvenciát a leggyakrabban folytató betű fog a lista elejére kerülni. A betűk mellett egy szó befejező opció is lehetne, amely az adott szekvencia által alkotott leggyakoribb n szavat felajánlja automata befejezésként is. 3.5 – Menürendszer A programot ha a billentyűzeten felül szeretnénk egyéb funkcionalitásokkal bővíteni, érdemes lehet egy neuroheadset által használható menü rendszert kialakítani, de korlátozott számú érzettel rendelkezünk, így akár a menürendszer előhívására szolgáló még egy érzet felhasználása nem biztos, hogy lehetséges. Egy megoldás lehet erre, hogy az érzeteket, vagy az érzetek egy csoportját megkülönböztetjük aszerint, hogy mennyi ideig volt aktív, így például a kiválasztó érzet hosszan tartása megvalósíthatna egy menü gombot, ami az éppen aktív részéből a programnak átlép egy menüben. A menü egy egyszerű listából állna, melyben két érzettel lehet navigálni. A program így a billentyűzet mellett tartalmazhat egyéb részeket is. A mi esetünkben megfogalmazódott egy olyan igény, hogy betűk gépelése helyett lehetőség legyen teljes mondatok, kifejezések gyors bevitelére, egyfajta természetes nyelvű menürendszer kialakítása [8]. Erre létrehozhatunk egy olyan felületet, amely ilyen kifejezéseket tartalmaz, a kifejezéseket kiválasztva az azonnal begépelésre történik. Esetleg meg lehet határozni egyéb opciókat is, ahol kifejezés helyett üzenetet küld a program valahova (például előre meghatározott email küldése). A felületen megjelenő kifejezéseket egy külső programrészből lehet bevinni, sorrendet meghatározni. Ez a felület már nem a neuroheadsettel működik.
4. – Cross platform, hálózat, mobil eszközök A tervezési feladatok során felmerült annak a lehetősége, hogy laptop, illetve monitor elhelyezése a fekvő beteg környezetében nem feltétlenül egyszerű feladat. A felhasználói feladat megjelenítésére akár egy táblagép is megfelelő eszköz lenne. Ugyanakkor az Emotiv által adott eszköz szoftvere nem működik mobil operációs rendszereken. Erre megoldás lehet egy kliens-szerver architektúrájú megoldás létrehozása. A program így föl lesz bontva két részre: Szerver alkalmazás: •
Hálózaton várja a kliensek csatlakozását
•
A kliensek elől elrejti a headset kezelését
•
Bővíthetőség, nem kell jelentős változásokat végrehajtani más eszköz támogatása miatt
•
A profilok, beállítások mind a szerver oldalon kerülnek eltárolásra
•
Ezzel együtt a szótárak is
Kliens alkalmazás: •
Egyszerű megjelenítő felület
•
Hálózaton keresztül kapja a parancsokat, beállításokat
•
Hálózaton keresztül bővíti a szerver által tartalmazott szótárat
•
Könnyű portolhatóság, nem használunk SDK specifikus könyvtárat
•
Változás esetén a klienseket nem kell újra írni
5. – Implementáció, teszt program 5.1 – Szerver alkalmazás A szerver alkalmazás C# nyelven íródott program. Futás közben a 7536-os porton várja a kliens csatlakozását, majd csatlakozás után egy listában lévő cselekvéseket küldi át a kliensnek. Jelenleg egy cselekvést kezel, ez a H gomb lenyomása. Használat Emokey program segítségével történik, ez az alkalmazás az Emotiv SDK-t még nem használja. A szerver a start gomb lenyomására indul el.
A hálózati kommunikációt a szerver osztály kezeli. Létrehozása után a start metódus meghívásával készít egy TcpListener objektumot, mellé pedig egy külön szálat ami a kliens csatlakozását várja. Egy kliens csatlakozása esetén a kiszolgálásra indul egy új szál, ahol a kommunikációs történik. A program bár elméletileg képes egyszerre több kliens kezelésére is, ez jelenleg az elküldendő üzenetek tekintetében nincs figyelembe véve, így több kliens esetén nincs garantálva, hogy minden kliens minden üzenetet megkap. Az akciók egy láncolt listában tárolódnak, melyet mind a GUI, mind a Server osztály használatba vesz. Ide kerül be egy új esemény, a kliens szál pedig ebből a listából veszi ki a legrégebbi eseményt, és elküldi a megfelelő üzenetet a kliens felé. FIFO működés. 5.2 Kliens alkalmazás A kliens alkalmazás szintén C# nyelven írodott. A program egyelőre csak az egy érzetes, mátrixos karakterbevitelt valósítja meg. A felületén be lehet állítani a szerver címét, a portot, valamint a mátrixban lévő kiválasztó kurzor léptetési idejét, bizonyos megkötésekkel (1 és 15 másodperc közötti érték). A connect gomb segítségével történik a kiválasztás, a keyboard gomb jeleníti meg a billyentyűzetet, míg a select gomb lokális kiválasztást enged meg, tehát nem muszáj a szerverhez csatlakozni a program használatához. A szerverhez hasonló módon a kliens program is működik az Emokey programmal önállóan is.
A hálózat kezelését a Client osztály valósítja meg. A Start metódusban megadott hostname és port változók segítségével megpróbál csatlakozni a szerverhez, majd egy külön szálban várja a szervertől kapott adatokat. Egy irányú kommunikáció, a kliens nem küld adatokat a szervernek. A ReceiveEvent esemény segítségével jelez a GUI-nak, hogy történt valami. Erre a Client osztály létrehozásakor feliratkozik a kliens. A hálózaton bejövő eseményeken túl hibaüzenetek is ezen az eseményen kerülnek ki a GUI-ra.
A SimpleKey osztály valósítja meg a szövegbeviteli részét az alkalmazásnak. Egy C# Form lényegében, aminek a Paint metódusa lett felülírva, így történik a kirajzolás. Létrehozás után be lehet állítani, hogy milyen időintervallumonként léptesse az alkalmazás a kurzort (TimerTick), ami egy Timer időzítő paramétere lesz. A kiválasztás a DoSelect függvénnyel történik, ami fel van iratkozva a Select gomb kattintás eseményére, de meghívásra kerülhet H gomb lenyomására, és hálózaton történő esemény bejövetele esetén is. Egy állapotváltozó figyeli, hogy éppen a kurzor milyen állapotban van, ahol a különböző állapotok lehetnek oszlop, sor kiválasztása, illetve a kiválasztás megtörtént is. Utóbbi esetben elsütésre kerül a SelectedEvent, amire a fő GUI egy függvénye fel van iratkozva, az eseményen keresztül pedig a saját SelectedEventArgs esemény argumentummal történik a kiválasztott karakter elküldése, aminek következtében az megjelenik a fő ablakban.
6. – Irodalomjegyzék [1] http://www.emotiv.com/apps/epoc/299/ [2] http://en.wikipedia.org/wiki/Emotiv_Systems [3] Neurokey alkalmazás, http://www.emotiv.com/store/apps/applications/130/727 [4] Krusienski DJ, Shih JJ. „Control of a visual keyboard using an electrocorticographic brain computer interface” [5] Benjamin Blankertz1, Guido Dornhege1, Matthias Krauledat1,2, Michael Schr¨oder1, John Williamson3, Roderick Murray-Smith3,4, Klaus-Robert M¨uller1,2, „The Berlin brain computer interface presents the novalmental typewriter hex-o-spell” [6] Femke Nijboer, Ursula Broermann „Brain-Computer Interfaces for Communication and Control in Locked-in Patients” [7] Tiziano D’Albis, „A predictive speller for a brain-computer interface based on motor imagery” [8] Craig W. Thompson, Kenneth M. Ross, Harry R. Tennant and Richard M. Saenz, „Building usable menu-based natural language interfaces to databases”