DIPLOMATERV
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok áttekintése, fejlesztése
Kovács Annamária Témavezető: Tihanyi Attila
Pázmány Péter Katolikus Egyetem Információs Technológia Kar 2012.
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
NYILATKOZAT “Alulírott Kovács Annamária, a Pázmány Péter Katolikus Egyetem Információs Technológiai Karának hallgatója kijelentem, hogy ezt a diplomatervet meg nem engedett segítség nélkül, saját magam készítettem, és a diplomamunkában 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 Diplomamunkát más szakon még nem nyújtottam be.”
………………………………………………
3
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
4
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Tartalomjegyzék 1. Összefoglalás ………………………………………………………………………….…… 8 2. Abstract …..………………………………………………………………………………… 9 3. Bevezetés, célkitűzések ………………………………………………………………...…. 10 4. A tapintás szerepe a kommunikációban, a taktilis kijelző alapelve, működése ……………12 5. Digitális beszédfeldolgozás ………………………………………………………………. 14 5.1. A beszéd-zaj elkülönítés és a beszédfelismerés technológiai alapjai ………...……… 14 5.2. Beszédfelismerési módszerek bemutatása ……………………………………...….... 15 5.2.1. A beszéd energiaszinteken alapuló vizsgálata ………………………………….... 15 5.2.2. Pitch detekció ……………………………………………………………………. 17 5.2.3. Kepsztrum ……………………………………………………………………….. 17 5.2.4. Zero-crossing ………………………………………………………………….… 18 5.2.5. Mel-frequency cepstrum ……………………………………………………...…. 18 5.2.6. PARCOR csőmodell …………………………………………………………….. 22 5.2.7. Az ETSI AMR (Adaptive Multi Rate) Speech Coder ………...…………………. 22 5.2.8. A beszédfelismerés egy lehetséges folyamata, a rejtett Markov modell ……….... 23 5.2.9. Beszédaktivitás felismerése zajos környezetben ………………………………... 24
5
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
5.2.10. Robosztus VAD algoritmusok ………………………………………………….. 25 5.2.11. Fonéma felismerés mesterséges neurális hálóval …………………..................... 26 5.2.12. Előfeldolgozás ………………………………………………………………..… 27 5.2.13. Az entrópia használata …………………………………………………………. 27 6. A megfelelő megoldás kiválasztása …………………………………………………….… 29 6.1. Dinamikus idővetemítés …………………………………………………...……….... 29 6.2. Zárt szótáras rendszer beszélőazonosítással ……………………...…………………. 33 6.3. Rejtett Markov modellel megvalósított megoldás …………...…………………….... 36 7. Első tesztkörnyezet és az azzal elért eredmények ………………………………................ 38 7.1. Eredmények a dinamikus idővetemítés algoritmusával …...……………………….... 39 7.2. Zárt szótáras felismerés beszélőazonosítással – elért eredmények ………………... 41 7.3. Eredmények rejtett Markov modellel ……………………………...………………... 42 8. Továbbtesztelt algoritmus, újabb feladatok ………………………………………………. 43 8.1. Az új tesztkörnyezet …………………………………………...…………………….. 44 8.2. A tesztelt kifejezések ……………………………………...…………………………. 45 8.3. Rejtett Markov modellt alkalmazó algoritmussal elért eredmények …...………….... 46 8.4. Az eredmények táblázatos formában és grafikusan ábrázolva ……...………………. 47 8.5. A Voice Activity Detection-nel elért eredmények ……………...…………………… 51
6
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
9. Következtetések ………………………………………………………………………...… 53 10. Továbbfejlesztési kérdések …………………………………………………………….... 54 11. Összefoglalás ……………………………………………………………………………..54 12. Köszönetnyilvánítás ……………………………………………………………………... 55 Irodalomjegyzék …………………………………………………………………………….. 56 Ábrajegyzék …………………………………………………………………………………. 58 1. sz. Melléklet ………………………………………………………………………………. 61 2.sz. Melléklet ……………………………………………………………………………….. 63
7
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
1. Összefoglalás Jelen diplomaterv a siketek beszédértését segítő taktilis kijelző projekt részeként a beszéddetektálási eljárás során a beszéd és a zaj elkülönítésével, a beszéd felismerésével foglalkozik. A fejlesztés során több tudományág kapcsolódik össze, ilyen a neurobiológia, a beszédfelismerés, jelfeldolgozás és az informatika, ezek képezik alapját munkámnak. A feladat alapgondolata a következő: az emberi beszédet és a vele beérkező többi hangot alakítsuk át digitális jellé, majd szűrjük ki a beszédet tartalmazó szakaszokat a beszédet nem tartalmazó részektől és ezt a taktilis kijelzőn jelezzük a felhasználónak rezgés formájában. A feladat első részeként a szakirodalomban kutatómunkát végeztem, mely során mélyebben megismerkedtem a digitális beszédfeldolgozással és az emberi beszéd sajátosságaival. Alapelveket határoztam meg, amelyeket számításba vettem a legjobban illeszkedő algoritmus kiválasztásában. Ilyenek voltak a minél rosszabb minőségű beérkező hang jó és pontos feldolgozása, a közel valós idejű felismerés és a gyorsaság, hiszen egy taktilis kijelzőnél a beszéd tempója miatt nem marad sok idő a folyamatos feldolgozásra. Ezek áttanulmányozása után kiválasztottam a számításba jöhető algoritmusokat, azokat megvalósítottam, tesztkörnyezetet készítettem hozzá és méréseket végeztem. Az eredmények tudatában kiválasztottam a feladathoz legjobban illeszkedő eljárást és egy új, bővebb tesztkörnyezet létrehozása után újabb méréseket végeztem. A tesztkörnyezet megvalósításánál fontos volt a hasonló mondatok, szavak tesztelése, hiszen ez jó indikátora a megfelelő algoritmusnak. A beszéd - nem beszéd megkülönböztetéséhez előfeldolgozó módszereket vizsgáltam meg, ez összefoglaló nevén a hangaktivitás detektálása. A kiválasztott algoritmusok között van statisztikai alapon működő, ilyen a rejtett Markov modellt használó algoritmus, valamint távolságkeresésen alapuló is, ilyen az idővetemítés algoritmusa. Kipróbáltam a beszédhang alapján történő beszélőazonosítást is, ez más alkalmazásokban (pl. mobiltelefon) helytálló lehet. Kitérek az algoritmusok megvalósításának lépéseire, ilyen a hang digitalizálása, megfelelő paraméterekkel, ezek megválasztásának okai, a hangaktivitás detektálása és a felismerés folyamata. Az implementálás Matlab környezetben történt. Az eredmények megtekintése után következtetéseket vontam le a munkámmal kapcsolatban, valamint felvázoltam a továbbfejlesztési lehetőségeket is.
8
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
2. Abstract
This thesis is about the tactile display project for deaf people to help them understand the human speech. In this project my part was to understand and develop an appropriate speech recognizer algorithm, which can separate the speech and the noise, and recognize the speech. During the development several disciplines are interconnected, such as neurobiology, speech recognition, signal processing and information technology, they form the basis of my work. The basic idea of the following tasks are: we must convert the human speech and other sounds to a digital signal, then get the segments which contain speech and indicate them in the tactile display in the form of vibration.
The first task was to read the literature as a part of a research work, in which I more deeply acquintanted with the digital speech processing and the charactreistics of the human speech. After that I determined principles that I took into account by the selection of the bestfit algorithm. Such were the good, accurate processing of the incoming bad quality sound, the near real-time detection and the speed, because by a tactile display we have only few seconds remaining for continous processing.
After studying the literature I have chosen the best algorithms, implemented them, created a test environment and did measurements. Realizing the best-fit algorithm after the results, I created a new test environment and made recent measurements. By creating the test environment it was important to recognize similar phrases, words, since this is a good indicator of the appropriate algorithm. The speech / non-speech separation pre-processing methods were analysed, known as Voice Activity Detection. Among the chosen algorithms there is a statistical-based one, which uses hidden Markov model, the other one is a distance finding method, known as dynamic time warping. I tried a speaker identifying algorithm as well, in my opinion it can be useful in other applications (such as mobile phone applications).
I mentioned the steps of the implementation of the algorithms, such as the digitalization of sound, choosing the relevant parameters, the reason of this choices, the voice activity detection and the recognition process. During the implementation Matlab environment was used. After summarizing and overvieving the results I drew conclusions and outlined the possibilities for further development.
9
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
3. Bevezetés, célkitűzések Kommunikációs alappillérünk a beszéd, mely azonban nem minden embertársunk számára hallható, érthető. A siketek, halláskárosultak saját hibájukon kívül kimaradnak egy olyan kommunikációs csatornából, amely mindennapi életünk során talán a legfontosabb szerepet tölti be a látáson kívül. Számukra fontos lehet egy olyan eszköz kifejlesztése, mely segíti őket a kommunikációban, amikor a mindennapok során nem tiszta, nem érthető környezetben, a szájról olvasás és a jelnyelv használatának lehetőségét elvetve szeretnénk kommunikálni velük, tehát például olyan esetekben, amikor nem láthatják a hang forrását. Mivel rengeteg információ csak beszéd, hang útján jut el hozzánk, lehetőséget kell teremtenünk számukra is a megértésére. Ehhez ad jó lehetőséget a taktilis kijelző. Ennek elsősorban a veszélyfelismerésnél van főbb szerepe, olyan helyzetekben, mikor siket embertársunkat figyelmeztetni akarjuk valamilyen, az ő biztonságát, életét fenyegető veszélyre, vagy csak egyéb fontos dolog közlését szeretnénk megkönnyíteni a figyelem ilyen módú felhívásával. Az egyetemen futó taktilis kijelző projekt részeként a beszédértést segítő zajos környezetben érzékelhető beszéddetektálási eljárások feltérképezése, ezek közül optimális, feladathoz
illeszkedő
algoritmus
felkutatása
és
fejlesztése
volt
a
feladatom.
Diplomatervemben a zaj és a beszéd elkülönítésének módszereivel, beszéddetektálási eljárásokkal foglalkozom részletesebben, mert a taktilis kijelző működésének életbe lépéséhez ez egy elengedhetetlen algoritmus. Mivel manapság rengeteg kommunikációs csatorna használ beszédet valamilyen formában az információ közlésére, a későbbiekben ez nem csak a beszéd és zaj megkülönböztetésben, veszélyjelzésben, hanem a beszédfeldolgozás során is segítségünkre lehet. Munkám során először megismerkedtem a beszédfelismeréssel, a zaj és beszéd elkülönítésével, valamint az ehhez kapcsolódó algoritmusokkal és módszerekkel. Ezek után kipróbáltam több algoritmust, keresvén azt, amely a legjobban illeszkedik a feladathoz, méréseket végeztem annak meghatározására, hogy melyekkel foglalkozom részletesebben. Tesztkörnyezetet készítettem, majd ismét méréseket végeztem, immár a kiválasztott és megvalósított algoritmusokkal. Végezetül az eredmények elemzése és összehasonlítása után következtetéseket vontam le a feladat szempontjából történő megfelelő helytállásról és kitekintést adtam a továbbfejlesztési lehetőségekre.
10
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Az alapfeladat tehát olyan eszköz fejlesztésének a segítése, mely siketek, halláskárosultak részére nyújt segítséget a mindennapokban. Ez főként olyan helyzetekben lehet kiemelt prioritású, amikor nincs mód jelnyelv használatára, ilyen például a veszély észlelése. De nem csak ilyen szituációkra kell gondolnunk, hanem egészen egyszerű, számunkra mindennapi eseményekre, például járművön történő beszélgetésre. Ilyenkor lehet segítségünkre a taktilis kijelző, melynek lehetőség szerint minél pontosabban, gyorsabban kell felismernie a beszéd jelenlétét, a lehetőségekhez mérten akár a legzajosabb környezetben is. Emellett fontos, hogy minél rosszabb hangminőség esetén is működjön lehetőleg valós időben.
11
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
4. A tapintás szerepe a kommunikációban, a taktilis kijelző alapelve, működése Az egészséges emberek számára az alapvető kommunikáció, azaz a beszéd befogadása a hallás segítségével történik, ez azonban a siketek számára nem áll rendelkezésre, így nekik a látás segít ebben. Bizonyos helyzetekben azonban még az sem biztos, hogy a megfelelő történésre fókuszál az alany, valamint az is előfordulhat, hogy a beszéd forrása nem látható, így ilyenkor lehet egy lehetséges megoldás a tapintás alkalmazása. McGurk [1] fogalmazta meg először, hogy a beszéd észlelése összetett folyamat, nem csak a hallás, hanem a többi érzékszerv is szerepet játszik benne, elég csak arra gondolni, hogy a „baba-gaga” szópárt a száj mozgásának látványa nélkül csak hang alapján nagyon nehéz megkülönböztetni. Ezt multimodális beszédészlelésnek nevezzük. Az érzékszervek tehát nem egymástól elkülönülten dolgoznak, hanem kiegészítik egymás információit, így jön létre a tényleges észlelés. A vakoknál a tapintás és a hallás működése sokkal kifinomultabb, nagyobb szerepet játszik náluk a külvilág megértésében. Ugyanígy van ez a siketeknél is, náluk a látás jut nagyobb szerephez. Azonban a taktilis (azaz tapintás-alapú) információátadás itt is felhasználható és így több információhoz juthatnak ők is. Esetünkben ez a beszéd léte/nemléte. Kihasználva a tapintás érzékenységét, a rezgések paraméterei változtathatók, így akár több jellemzőhöz is hozzárendelhetünk különböző rezgésformákat, ennek köszönhetően egy készülékkel több funkciót is megvalósíthatunk. A tárgyak érzékelésében a látáson kívül a tapintás is nagy szerepet játszik. Bőrünk ingerlése során a mechanoreceptorok azok, melyek a nyomást, alakváltozást érzékelik. Ezek az egész testfelületünkön jelen vannak, azonban észrevették, hogy egyes testrészeken sokkal nagyobb mennyiségben találhatók meg. Ilyen a kéz bőre, az ajkak, ellenben a has érzékelésével, hiszen ott sokkal tompábban érzékelünk, következtetésképpen a kéz alkalmas a legjobban a mechanikus ingerlés finom észlelésére. A taktilis kijelző projekt célja tehát a siket és hallássérült emberek mindennapjainak megkönnyítése egy olyan szerkezettel, amely a tapintással segít pótolni a kieső hallható információkat.
12
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
1. ábra: Példa taktilis kijelzőre
A fenti ábrán egy vibrotaktilis kijelző látható, amely úgy működik, hogyha beszéd hallható, azt a zajtól megkülönbözteti, majd rezgő mozgássá alakítja, így nyerve el a felhasználó figyelmét. Azért fontos a tapintás használata, mert így nem vonja el a többi érzékszerv figyelmét, tehát a látás szabad marad, így jobban segíti a gyors reakciót, valamint a többi kommunikációs csatorna együttműködését. A jó megvalósításhoz szükséges egy megfelelő beszéd-zaj megkülönböztető algoritmus, amelynél több szempontot is fontos figyelembe venni, ilyen a gyorsaság, valós idejűség, megfelelő pontosság, erőforrástakarékosság. A továbbiakban erről esik szó.
13
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
5. Digitális beszédfeldolgozás 5.1. A beszéd-zaj elkülönítés és a beszédfelismerés technológiai alapjai A Voice Activity Detection (továbbiakban: VAD) [2][3], azaz a hangaktivitás felismerése számos területen használt alkalmazásokat tömörít magába. Napjainkban rengeteg ilyen eszközzel találkozhatunk, sokról nem is tudjuk, hogy éppen ezt a technológiát használja egyes lépéseiben a beszédfeldolgozáshoz. Mivel ez egy gyűjtőnév, így nagyon sokféle algoritmust, alkalmazást foglal magába. Ha a világhálón rákeresünk a fogalomra, már itt sokféle alkalmazást, eszközt találhatunk, melynek leírásában a VAD alapvető tulajdonságként szerepel. A hangaktivitás felismerése azért fontos, hogy meg tudjuk különböztetni a beszédet tartalmazó szakaszokat a csendes, vagy éppen zajjal terhelt daraboktól. A zajnak egyébként is nagy szerepe van az alkalmazások során, hiszen a tiszta, zajmentes környezet ritka, szinte sosem találunk ilyet a mindennapokban. Amikor hangot szeretnénk felismerni, feldolgozni, rögzíteni, először digitális formára kell azt hoznunk. Ennek módja egy analóg/digitális átalakító használata, amelyet számunkra a mikrofonba érkezett jel után a számítógép hangkártyája végez el. Ennek folyamata a jól ismert mintavételezés és kvantálás, mely után előáll a feldolgozható jel. Ezen értékek változtatásának majd később lesz szerepe a hallott hang feldolgozásánál, a megfelelő értékek kiválasztásában több szempontot veszek majd figyelembe. Sokszor szükség van a hangaktivitás pontos felismerésére, hiszen nem mindegy, hogy például telefonáláskor mennyi adatot viszünk át, jó, ha csak akkor használunk sávszélességet, amikor beszédet érzékelünk, a beszédben lévő szüneteket nem kell átvinni, felesleges ilyenkor erőforrásokat lefoglalni. Tipikus alkalmazások, amelyek a technológiát használják,
például
a
konferenciahívások,
mobiltelefonálás,
különféle
multimédiás
alkalmazások, valamint a GSM1 és a CDMA2 alapú rendszerek. Ehhez nyújt segítséget a VAD, mely megpróbálja a beszédet érzékelni és azt a szünettől elkülöníteni. Ez stúdiókörnyezetben egyszerűbb, hiszen ekkor nincs semmiféle zaj,
1 2
GSM: Global System for Mobile Communications, a világon a legnépszerűbb szabvány a mobiltelefonos kommunikációhoz CDMA: Code Division Multiple Access, kódosztásos többszörös hozzáférés, digitális cellás telefonrendszerekben és a GPS-ben használatos praktikus, hatékony technológia
14
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
amely megzavarhatja a tiszta beszédet, ám ez a gyakorlatban szinte sosem fordul elő, ezért fontos, hogy a zajból is ki tudjuk szűrni a beszédet. Ez már komplikáltabb probléma, hiszen a zaj lehet olyan erős, hogy elnyomja a beszédet (SNR 3 nagy), ekkor sokkal nehezebb dolgunk van, mint erősebb beszéd – halkabb zaj esetében (SNR kicsi). A továbbiakban a szakirodalomban található alkalmazások közül szeretnék néhányat bemutatni, amelyek segítségemre lehetnek a fentebb vázolt probléma megoldásában.
5.2. Beszédfelismerési módszerek bemutatása A beszédfelismerésben alapvetően a statisztikai alapú és az energia alapú módszerek léteznek. Sok különböző águk van, ezekkel foglalkozom most részletesebben. A statisztikai alapú módszerek a vizsgált jel statisztikai jellemzői alapján különböztetik meg a zajt a beszédtől. Ilyen például az entrópia alapú felismerés, melyet rejtett Markov modellel kombinálva egész jó eredményeket kaphatunk. Erről a későbbiekben részletesen is beszámolok. A másik módszer a jel energiáját vizsgálja, majd ezek alapján tipikus értékek és határok beállításával igyekszik megkülönböztetni a beszédet a zajtól. Van még több lehetséges megoldás is, ezek közül a neurális hálóval történő beszédfelismerést mutatom be, valamint több előfeldolgozó algoritmust is, amelyek segítségével könnyebbé tehetjük a későbbi munkánkat a feldolgozás vagy akár a kiértékelés során. Az alábbiakban az áttanulmányozott módszerek következnek, és az, hogy ezeket mennyiben lehet hasznosítani az adott probléma megoldása érdekében.
5.2.1. A beszéd energiaszinteken alapuló vizsgálata A módszer az energiaszintek vizsgálatán alapul [4]. A beszédfeldolgozás folyamatában fontos szerepe lehet a beszéd energiaszintjének meghatározásának. Mivel az alkalmazás feladata az, hogy az emberi beszédet azonosítsa annak valamilyen jellemzője alapján, lehetőleg minél kevesebb tévedéssel, minél zajosabb környezetben is, lehetőség 3
SNR: Signal to Noise Ratio, jel-zaj arány, azt mutatja, hogy a jelet mennyire terheli zaj
15
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
szerint nagyon gyorsan, így az energia kiszámítása erre adhat alternatívát. Ennek folyamata, hogy megmérjük a folyamatos bejövő jel energiaszintjét és egy treshold, azaz küszöbérték felállításával meghatározzuk, hogy melyik lehetett a beszéd, melyik a zaj. Az aktuális, T mintányi hosszú, t0 kezdetű keretben az energiát a következő módon számoljuk:
2. ábra: A jel energiájának kiszámítása
Ez a módszer nem túl pontos, először is meg kell találnunk azt a megfelelő eredményeket adó válaszvonalat, ahonnan jó bizonyossággal el tudjuk különíteni a beszédet és a zajt, másrészt nagyon zajos környezetben az energia számítása nem jó, mert meg sem lehet különböztetni a jeleket, az erős zaj teljesen elnyomja a beszédet. Ezen kívül az algoritmus valós időben megfelelően gyors lenne, hiszen itt nem kell spektrumot számolni, de a zaj jelenlétének rossz tolerálása miatt inkább csak adott SNR alatt ajánlott a használata. A zaj jelenléte egyébként is sok problémát okozhat, hiszen tiszta, zajmentes környezetben elég csak a hangaktivitást figyelni, azt elkülöníteni a csendtől, de könnyen belátható, hogy ez a mindennapokban ritkán valósul meg, valamilyen háttérzaj mindig hallható a beszéd mellett. A tanulmányozott módszerek, algoritmusok egy részben kitüntetett szerepe van a zajok kiszűrésének, ezekkel is részletesebben foglalkozom a későbbiekben, mivel ez a legelengedhetetlenebb része a feladatnak.
3. ábra: „Nézd, leszedték a zárakat” spektrumképe
16
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
5.2.2. Pitch detekció Egy másik módszer lehet a beszédfelismerésre a pitch detekció, azonban ez inkább a zöngésség meghatározására szolgál. A pitch érzeti mennyiség, a hangmagassághoz köthető, azonban
megállapították,
hogy
nem
mindig
van
egyértelmű
kapcsolatban
az
alapfrekvenciával, amely fizikai mennyiség, zöngés gerjesztés esetén a hangszalagok rezgésszámát jelöli. Ennek ellenére a pitch detekciós algoritmusok (PDA – Pitch Detector Algorithm) az alapfrekvencia becslésére használható módszerek a beszédfeldolgozásban. Előállíthatjuk a beszéd picth kontúrját, amely a tényleges beszéddallamot jól közelíti, ekkor ablakonként az alapfrekvenciára becslést adunk, azonban ez is számításigényes folyamat, valamint nem is a feladathoz a legjobban illeszkedő. Használata inkább zöngés-zöngétlen megkülönböztetésnél lehet célravezető, itt csak felesleges erőforrásokat foglalna le.
5.2.3. Kepsztrum Fontos lehet a beszéd, mint jel periodicitásának megfigyelése, mivel ez nagyon jól jellemzi a beszédet. Ezt a kepsztrum [5] segítségével tudjuk megnézni, ugyanis kepsztrális tartományba transzformálva a jelet a zaj nem mutat periodicitást, csak a beszéd. A kepsztrum (cepstrum) a beszéd spektrum Fourier-transzformáltja, azaz a spektrum spektruma, ahol az x tengelyen az időegység, azaz a kefrencia helyezkedik el, a hozzá tartozó értékek a spektrum változását mutatják. A kepsztrális elemzést nagyon sok eljárás felhasználja, mivel valós időben nagyon jól alkalmazható, azonban kissé számításigényes, de a jó pontossága miatt ez elnézhető.
4. ábra: „Nézd, leszedték a zárakat” kepsztrumának megjelenítése
17
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
5.2.4. Zero-corssing Jó módszer lehet még a nullátmenetek (zero-crossing) [6] megfigyelése, mivel ezek speciálisan szintén a zöngés hangokra jellemzőek, egyediek, viszont ehhez is szükség van a kepsztrumra, hiszen ott tudjuk jól megfigyelni a periódusokban az ablakozásnál, hogy hányszor vált a függvény pozitívból negatívba. Itt tehát a jel adott ablakon belüli nullátmeneteit kell megszámolnunk, ezek a beszédre jellemzőek, viszont ezt leginkább a zöngés-zöngétlen elkülönítésnél hasznosítják, azonban esetünkben a zaj és beszéd elkülönítése szempontjából fontos lehet, mivel a zajban nincsenek meg a beszéd jellemzői. Tehát ha nem tudunk dönteni, hogy zajról, esetleg zajos beszédről van-e szó, akkor a nullátmenetek segítségével megbizonyosodhatunk arról.
5.2.5. Mel frequency cepstrum Sokszor nem a kepsztrumot használják, hanem a log-spektrális tartományba transzformálnak, itt a Mel-frekvencia a hallást, mint érzetet modellezi le, így az eredmény a hallotthoz hasonló lesz. A komolyabb beszédfelismerési feladatoknál, ahol nem csak zajt és beszédet kell megkülönböztetni, hanem fel is kell ismerni a szavakat, mondatokat - lehetőleg minél nagyobb hatásfokkal -, előszeretettel használják az első, azaz lényegkiemelési eljáráshoz a Mel-frekvenciás kepsztrális együtthatók kiszámítását [7], mely segítségével egy burkoló spektrumot állíthatunk elő:
5. ábra: A Mel-frekvenciás kepsztrum előállításának folyamata
A folyamat az alábbiak szerint zajlik: Hogy tömörebb beszédjellemzőket nyerhessünk ki, átlagolni kell az FFT (Fast Fourier Transformation) spektrum komponenseit. A módszer azért is modellezi a fül szempontjából a hallást, mert hallásunk egyik legfontosabb jellemzője, hogy frekvencia felbontása a frekvencia növekedésével exponenciálisan csökken. Éppen ezért a Mel-skálás átlagolásban az együtthatók összegzésére használt ablakok
18
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
szélességét 1 kHz felett megnöveljük, méghozzá exponenciálisan, hogy a hallást lemodellezve a ritkább információsűrűséget
ezzel kiegyenlítsük. Az összegzett komponensekből
teljesítmény spektrumot számítunk, hogy a zajt jobban el tudjuk nyomni, majd a kapott értékeket logaritmizáljuk, így illesztjük az ingert az érzethez. Ezután DCT4 (Discrete Cosine Transform) következik, mellyel a jellemzővektor dimenziószámát csökkentjük. Végső lépésként pedig megadjuk a vektorhoz a statikus elemek lineáris regresszióval becsült időbeli deriváltját. Az utolsó lépés azért nagyon hasznos, mert sokat javít a lényegkiemelés hatásfokán. Így most rendelkezésünkre áll egy diszkrét idejű, optimális jel, amelyet aztán illeszteni tudunk a meghatározott szótári elemre vagy azok sorozatára. Ez a módszer nagyon hasznos, sok alkalmazásban előfordul, bár sok számítást tartalmaz, azok gyorsan, könnyen számíthatók, konkrét beszédfelismerési feladatnál nagyon jó eredményeket lehet elérni vele. Az alábbiakban a Matlab Auditory Toolbox segítségével ábrázolt Mel-frekvenciás kepsztrumról készült ábrák következnek a „Nézd, leszedték a zárakat” mondatról.
6. ábra: A Mel-frekvenciás kepsztrum együtthatóinak ábrázolása
Halványan, de látszik a koefficiensek ábrázolása 1000 Hz-en mintavételezve.
4
DCT: Diszkrét Koszinusz Transzformáció, egy Fourier-transzformáció, hasonló a diszkrét Fouriertranszformációhoz, de valós számokkal dolgozik, különböző adattömörítési eljárásoknál használják, pl. mp3, wma, jpeg, mpeg
19
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Sok köztes eredmény képét is meg tudjuk jeleníteni, ilyen például az FFT spektogramm (magas frekvenciák vannak felül):
7. ábra: FFT spektogramm
A következő képen a szűrők kimenete látható:
8. ábra: A Mel-frekvenciás szűrők kimenete
Ha szeretnénk, visszamehetünk a kepsztrumból a Mel-frekvenciás szűrőkhöz, még a diszkrét koszinusz transzformáció előtt, így megnézhetjük, hogy mennyi információveszteség történt.
20
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
9. ábra: Információveszteség megtekintéséhez a diszkrét koszinusz transzformáció előtti állapot kirajzoltatása
Látható, hogy ez sokkal simább képet ad. Megvizsgálhatjuk azt is, hogy a Mel-frekvenciás kepsztrális koefficiensek kiszámításakor mely pitch értékeket „vesztettük el”, ezeket a vonalak jelölik.
10. ábra: MFCC kiszámításakor információveszteség vizsgálata
Ennek segítségével behatóbban tanulmányozhatjuk az algoritmust, vizuálisan is jól megjelenítve azt.
21
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
5.2.6. PARCOR csőmodell Le lehet modellezni a beszédet képzés szintjén is, ekkor a PARCOR csőmodell [8] lehet segítségünkre az előző hallás-modellezéssel szemben. A PARCOR eljárás olyan beszédfeldolgozási eszköz, mely stabil, 6-10 együtthatóval írja le a beszéd egy szakaszát, ezek rekurzívan meghatározhatók és segítségükkel előállítható a beszédjel, valamint fizikai tartalmat is rendel a modellhez, és ez igaz visszafelé is, tehát a beszédjelből meghatározhatók a csőmodell paraméterei. Számunkra ez most nem a legmegfelelőbb alkalmazás, azért mutattam be, hogy látható legyen, hogy a beszédet nem csak a hallás, hanem a beszédképzés szintjén is le tudjuk modellezni. Sok helyen találkozni jellemzővektorokkal, már feljebb a MFCC meghatározásánál is használtam, ezek általában az alábbi tulajdonságokat tartalmazzák (pl. ITU-G.729 DTX dual mode speech codec): LP (lineáris predikció) spektrum, teljes sávenergia, alacsony sáv, nullátmenet rátája.
5.2.7. Az ETSI AMR (Adaptive Multi Rate) Speech Coder Ez a kódoló található a GSM rendszerben [4]. Tanulmányozása azért fontos, hogy lássuk, hogyan használható a GSM rendszerben a fentebb említett VAD, hogyan takarítanak meg sávszélességet a jelátvitelnél a beszédszakaszok átvitelével és a csendes, zajos, beszédet nem tartalmazó részek felismerésével és ezek ignorálásával. A jel először szűrőkön halad át, mindegyik sávban kiszámolják az aktuális jelszintet. Ezek után az SNR kiszámolása következik, majd a pitch detekció, tone detekció, jelanalízis. A kódoló vázlatos rajza:
11. ábra: Az AMR Speech Coder vázlatos rajza
22
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
A beszédfelismerés pontosságát tudjuk növelni ebben az esetben, ez beláthatóan fontos kérdés, ennek egyik lehetséges eszközét ismertetem. Először a háttérzaj zavaró hatásait kell lecsökkenteni, ennek eszköze a spektrális kivonás. A zaj spektrumát a beszédfolyamat alatt az inaktív periódusok alapján számítjuk ki és kivonjuk az aktuális ablak spektrumából. Így a tiszta beszéd spektrumának közelítő értékét kapjuk. A beszéddetektálás javításának egy népszerű eszköze a Wiener szűrő5 alkalmazása, melynek képlete:
12. ábra: A Wiener-szűrő képlete
5.2.8. A beszédfelismerés egy lehetséges folyamata, a rejtett Markov modell Mielőtt az egyik lehetséges folyamatot ismertetem, szeretnék a beszédfelismerés egy másik népszerű, sok helyen alkalmazott folyamatáról, a rejtett Markov modell [9] segítségével történő felismerésről írni. Ennek alapja, hogy minden felismerendő egységhez tartozik egy valószínűségi modell, amely egy adott megfigyelést valamilyen valószínűséggel generál, kimenete pedig a legnagyobb valószínűségű modell. A kilencvenes évek során ezek a modellek voltak a dominánsak, hatalmas adatbázisok készültek, melyek segítségére voltak a beszédfelismerőknek, így azok egyre több tanítandó paramétert tartalmazhattak. Napjainkra az ilyen alkalmazások futtatása nem csak kutatólaboratóriumok kiváltsága, ezt akár otthon is megtehetjük saját számítógépünkön. Mint látható, ez a módszer is inkább a konkrét fonémák felismerésére használható jobban, mivel a beszélt nyelv annyira változatos, hogy ezt a sokszínűséget a rejtett Markov modellen alapuló módszerek képesek a legjobban kezelni. Ha a modellek jól be vannak állítva, minden kiejtett szót a saját modellje állítja elő a legnagyobb valószínűséggel. A HMM (Hidden Markov Model) akár hosszabb szavak, mondatok nyelvi modellezésére is alkalmazható, így nagyon széleskörű az alkalmazhatósága. A fent említett egyik lehetséges alkalmazás során Rejtett Markov Modell segítségével tanítjuk a rendszert, tiszta és zajos beszéddel egyaránt. Ezek után következik a Non-Speech Frame Droppin (FD), amely arra hivatott, hogy csökkentse a zajból eredeztethető hibákat. Ezek után végül kiszámoljuk a Mel frekvencia kepsztrális együtthatókat. 5
Wiener-szűrő: zaj jelenlétében az optimális szűrő (adaptív)
23
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Ennek vázlatos rajza:
13. ábra: A beszédfelismerés egy lehetséges modellje
A fent leírtak közül alkalmas lényegkiemelésre a Mel-frekvenciás kepsztrális együtthatók kiszámolása, valamint a lineáris predikció is. A különbség a kettő között a jellemzővektor tartalmában mutatkozik meg. Míg az LPC a toldalékcső alakja szerint, a MFC a hallás szerint emeli ki a lényeget. 5.2.9. Beszédaktivitás felismerése zajos környezetben Témaválasztásom szempontjából ez a kérdéskör a legfontosabb, hiszen a taktilis kijelző projektben használatos beszéd-zaj elkülönítő algoritmusban ez játssza a mindennapi életben a legjelentősebb szerepet. Az alábbi példában a döntés alapja egy megfigyelt vektor, a jellemzővektor. A legtöbb algoritmus a felismerés során ott és akkor vét hibákat, amikor alacsony SNR szintnél akarunk megkülönböztetni. A jel-zaj arány azért lehet ennyire zavaró, mert egy ideig, bizonyos arány felett még jól kivehető, felismerhető a zajos háttérből a beszéd, de ahogy megnöveljük a zaj szintjét, a felismerhetőség egyre romlik, végül már felismerhetetlenségig zajjal terhelt rendszert találunk. Ilyen problémára megoldást jelenthet egy sima energiaszint detektor. Ennek váza:
14. ábra: Beszédfelismerés zajos környezetben
24
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Részei:
a)
Jellemzők kiemelése. Itt történik az energiák kiszámítása,
majd megmérik a spektrumbeli különbséget a zaj és a beszéd között, ezután a pitch becslése következik, majd a nullátmenetek vizsgálata, végül felsőbb rendű statisztika.
b)
Döntési modul. Itt áll össze a jellemzővektor, itt végzik el a
statisztikai valószínűségi teszteket, itt található a Bayes-i döntő, elvégzik a diszkrét koszinusz transzformációt a zajos részre, valamint a tiszta részre is, ezek után végül kiszámolják az átlagos négyzetes hibát.
c)
Végső állomás a döntés simítása
Egy ilyen feldolgozás láthatóan sok lépést igényel, azonban elég gyorsan végezhető.
5.2.10. Robusztus VAD algoritmusok A
beszédaktivitást
felismerő
algoritmusoknál
alapvető
kívánalom,
hogy
robusztusságot mutassanak, mivel nem engedhetjük meg azt magunknak, hogy ha például zajosabb a környezet, az alkalmazás helytelen választ adjon, félrevezetve ezzel a felhasználót. Inkább úgy érdemes megtervezni, hogy vagy jól tűrje a hibás bemeneteket is, vagy ne engedjük bizonyos jel-zaj arány átlépése esetén használni. Ez félmegoldásnak tűnhet, azonban használat közben inkább tudja azt a felhasználó, hogy ilyen környezetben nem képes az eszköz jól működni és kapcsolja ki, mint hogy téves jelzésekkel adott élethelyzetét elviselhetetlenné tegye azzal, hogy esetleg hangos fúráskor, aszfaltozáskor állandóan jelez, de ide bármilyen helyzetet behelyettesíthetünk. A robusztus viselkedéshez definiáljuk a hosszú távú spektrális eltérést. Ez az időben változó jel spektrumának kiszámítása, viszont hosszú távú beszédablakot használ az azonnali spektrumértékek helyett, ebből számítja ki a spektrális burkolót. A döntési szabályt a beszéd és zaj közötti hosszú távú spektrális eltérés alapján alkották meg.
25
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Másik eszköz ehhez a többszörös megfigyelésen alapuló valószínűségi arány teszt [2]. Ezt a megfigyelt vektorokon definiáljuk az alábbi képlettel:
15. ábra: Megfigyelt vektoron definiált valószínűségi arányok tesztje
Ez egy statisztikai szűrő, mely optimális éldetekciós filtereket használ a teljes energiasávon. A folyamat során a bemenő jelet először egy Wiener-szűrőn futtatjuk át. Ezek után a logaritmikus energiákat számítjuk ki az l-edik keretben K alsávban. Ezek implementálása segíthet a zajos környezetben való jobb felismerésben. 5.2.11. Fonéma felismerés mesterséges neurális hálóval A beszédfelismerés során segítségünkre lehetnek a neurális hálózatok [10][11] is, amelyek mátrixok segítségével tárolják a felismerendő szótárbeli elemeket, és az ehhez való legpontosabb illeszkedést vizsgálják. Az alábbiakban két eljárást mutatok be, amelyek mesterséges neurális hálózatokat használnak beszédfelismeréshez. A mesterséges neurális hálóval történő eljárás során a neurális hálót úgy tanították, hogy az felismerje a fonémákat, ehhez az error back-propagation6 algoritmust használták fel. A felismerés hatékonysága 8093%-os volt, kézi szegmentációnál ez 64%-ot ért el, azonban a jó válasz majdnem minden esetben az első három megtippelt válasz között volt. A szótár, amelyet használtak 60 mondatból áll, ebből 50 a hálózat tanításához, 10 pedig a teszteléséhez volt szükséges. A hálózat két részből áll. Első része egy „durva” jellemzők szerint szétválasztó hálózat, amely hét tulajdonság szerint választ szét egy Bark-skála7 szerinti szűrőadatbázis alapján. Másik része a fonémafelismerő hálózat. A megvalósított megoldás nagyon jól alkalmazkodik a beszélő személyének változásához és nem is nyelvspecifikus, ahogy az a különböző tesztekből kiderült. Számunkra, mivel egy neurális hálózatot létrehozni és megtanítani nem olyan gyors és megfelelő tanulóhalmaz hiányában nem is egyszerű feladat, ezért alapvetően nem így 6 7
A tanulás során a hibát csatolja vissza, ennek segítségével frissíti az egyes perceptronok súlytényezőit Logaritmikus skála, a frekvenciatartományt a hallásunkhoz igazodó kritikus sávok alapján osztja fel
26
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
szeretném megvalósítani a zaj-beszéd megkülönböztetést, másrészt ez inkább fonémák detektálására alkalmas eljárás. Vannak azonban részei, amelyek átgondolandók alkalmazás szempontjából, ilyen a nyelvfüggetlenség, valamint a beszélőfüggetlenség. Másik hasonló neurális hálót használó alkalmazás [12] során folyamatos beszéd akusztikus-fonetikus felismerése a feladat. Szintén error back-propagation algoritmust használ, ugyanúgy két hálózattal, melyet a következőképpen osztanak fel: az első hálózat végzi az akusztikus-fonetikus feldolgozást, a második pedig a nyelvi feldolgozást. Az akusztikus feldolgozás során spektrális analízist alkalmaznak, 10-20 ms-os keretekkel, majd a kepsztrum kerül meghatározásra. Ez a módszer a kepsztrális feldolgozás miatt fontos számomra, valamint a keretek pontos meghatározása miatt. Léteznek hibrid HMM-ANN, azaz rejtett Markov modellen és mesterséges neurális hálózatokon alapuló konstrukciók is, ahol a neurális háló végzi a fonetikai osztályozást, a beszédfolyam és a tárolt modell időbeli illesztését pedig a Markov lánc. (Kepsztrális alapon közelíti meg a problémát a SPLICE [13] algoritmus is, de itt már valószínűségeket is használnak. A zajos beszéd kepsztrális vektora Gauss eloszlást mutat, így lehetőség van a valószínűségi feltételes sűrűségfüggvény kiszámítására. A SPLICE minden keretet egymástól függetlenül dolgoz fel.) 5.2.12. Előfeldolgozás A beszéd-zaj megkülönböztetésben fontos szerepet kap a felvett jel megfelelő előfeldolgozása. Ez akár meg is könnyítheti, de nem megfelelő megválasztása meg is nehezítheti
munkánkat.
Találtam
olyan
megoldást
a
csecsemősírás
elemzésének
tanulmányozása folyamán [14], ahol az előfeldolgozás és a jelfeldolgozás együtt történt meg. Először csúszóablakozás történt 0,1 s-os időközzel, utána autokorrelációs függvényt használtak, majd két FFT után megnézték az alapfrekvenciát (kepsztrum). Így akár egyszerűbb is lehet a folyamat, ez a valós idejű feldolgozást elősegíti. 5.2.13. Az entrópia használata Az entrópia kiszámítása [15][16][17] szintén segítségünkre lehet zajos közegben beszéd felismerésében. E jellemző kiszámításához a jel spektrumára van szükségünk, melyet úgy számolunk ki, hogy átlapolódó blokkokra bontjuk, így végzünk rajta FFT-t (Fast Fourier
27
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Transformation). Így a gördülő spektrumot kapjuk:
16. ábra: A gördülő spektrum kiszámítása
ahol t jelenti az időt, to az aktuális keret kezdetét, h(t) a súlyozó ablak (általában Hanning), f a frekvencia, y(t) pedig a vizsgált jel. Azt már korábban említettem, hogy amíg nagy a jel-zaj viszony, addig az energiaszint alapon döntő módszerek jól használhatóak, ám ahogy több zaj kerül a beszéd mellé, az eredmények már nem értékelhetőek, bár a beszéd még látható a spektrumképen. Ez azon látszik, hogy a spektrum rendezettséget mutat. Éppen ezen alapul a Shannon-féle entrópia bevezetése, mely a spektrum rendezettségét méri:
17. ábra: A Shannon-féle entrópia
ahol s az i-edik forrásból érkező szimbólum, P(s) pedig az i-edik szimbólum adási valószínűsége. Az entrópia egy véletlen változó bizonytalanságát írja le. Ez azért lehet számunkra hasznos, mivel a beszéd és a zaj másféle spektrális karakterisztikával rendelkezik, így az elkülönítéshez használható. Az értéke akkor maximális, ha fehér zajt vizsgálunk, minimális, ha tiszta szinuszjelünk van, értéke viszont a jelszinttől független. Így változó szintű, de állandó spektrumú zajok esetén a beszédszakaszok az entrópiából könnyen meghatározhatók. Ha a zaj spektruma elnyomja a beszéd spektrumát, már nem tudjuk megkülönböztetni őket, sőt ezzel a módszerrel akkor sem, ha nem egyenletes a zaj spektruma, azaz színes a zaj. Ekkor más módszereket kell alkalmaznunk a zaj kifehérítésére. A szakirodalom áttanulmányozása során ez a módszer volt az, mely jó és gyors eredményeket mutatott, ám még mindig tapasztalható egy kis késés a feldolgozás során, hiszen ha az entrópia alapú felismerést a rejtett Markov modellel kombináljuk, zajbecslést kell alkalmaznunk, mely 0,3 s késést mutat. Ez nem szembetűnő, ám ha adott helyzetekben
28
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
szeretnénk használni ezt a beszéd-zaj megkülönböztetőt, esetünkben a taktilis kijelzőnél, véleményem szerint felesleges ennyi bonyolult algoritmust megvalósítani, főleg úgy, hogy egyelőre csak veszélyhelyzetek jelzésére és figyelemfelhívásra szeretnénk használni. 6. A megfelelő megoldás kiválasztása A szakirodalom áttanulmányozása után három algoritmus megvalósítása történt meg. Alapvető feltevés, hogy különítsük el a számunkra hasznos részeket a haszontalantól, azaz azokat a részeket, amikor nincs beszéd, és ügyeljünk arra is, hogy ez hangosabb zaj esetén is működjön. Pontosan ez az az elv, amelyet a GSM rendszernél és egyéb hangátvitelt biztosító rendszereknél használnak, hiszen fontos szempont a takarékoskodás az erőforrással, amelyet ez segít megvalósítani. Esetünkben azonban nem ennyire általános a feladat, hiszen elsősorban siket emberek segítése a cél, főleg veszély esetén, így elsődlegessé válik a figyelemfelkeltés. Három ilyen algoritmust valósítottam meg, ezeket fogom a továbbiakban bemutatni, majd részletesebben azt az egyet, amelyik a legjobban illeszkedik a feladatra. A figyelemfelkeltés során ösztönösen csak egy bizonyos szókészletből használunk fel szavakat. Figyelembe véve, hogy az eszközt általában utcán, járművön, otthoni környezettől távol szeretnénk használni, bízhatunk az emberek reakciójában egy vészhelyzet, figyelmeztetés esetén. Mivel a külső zajt a figyelmeztetni készülő emberek is jól hallják, várhatóan hangerősségüket is ennek megfelelően fogják megválasztani, különösen hajlamosak vagyunk a még erőteljesebb beszédre, ha valakihez magyarázóan, figyelmeztetően szólunk. Ezek a faktorok viszont pont előnyt jelentenek egy zárt szótáras beszédfelismerő létrehozásához. Így először ezt valósítottam meg. 6.1. Dinamikus idővetemítés Mivel ez egy zárt szótáras felismerő [9], az adott minták alapján dolgozik. Először a mintakönyvtárba felvehetjük a saját hanganyagunkat. Itt beállítható a mintavételi frekvencia és a hanganyag előre látható hossza is. Ez célszerűen 4 másodpercre lett beállítva alapértékként, valamint előtte tartalmaz 0,15 másodperc csendet. Ezen kívül beállíthatjuk, hogy mekkora a szótárunk, hányféle kifejezést tartalmaz, és hány beszélő vesz részt benne. Ez azért fontos, mert az algoritmus beszélőérzékeny.
29
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Először a saját mintánk létrehozását kell megtennünk. A template-eket különböző mintavételezési frekvencián rögzítjük, majd ezeken futtatjuk az eltárolásukat segítő Matlab fájlt. Ennek az a feladata, hogy végigmenjen a megadott könyvtárban található hangfájlokon, melyeket wav formátumban mentettünk el, majd ezekből minden beszélőre létrehozza a jellemzővektorokat hangonként, ezeket mátrixban egy .m fájlba menti referenciának.
A
feldolgozás során itt a Mel-frekvenciás kepsztrális együtthatókat (MFCC) számoljuk ki, amely során meg kell adnunk, hogy hány koefficienst szeretnénk kiszámolni. Ebben segít a Matlabhoz ingyenesen elérhető Voicebox Toolbox. Ha a saját mintatárunk elkészítésével elkészültünk, tesztelhetjük rendszert. Ezt a mikrofonba mondott szavak segítségével tehetjük meg. Ennek minőségét szintén tetszés szerint állíthatjuk. Végül megkapjuk az eredményt, azaz hogy sikerült-e felismerni az elhangzottakat, valamint hogy mi volt az. A program a szakirodalomban felsorolt források közül a Mel-frekvenciás kepsztrumot használja, ennek segítségével dolgozza fel a beérkező szöveget. Azonban a többi megemlített technikát is összefoglalja, hiszen a feldolgozás menete a következő: Miután bemondjuk a mikrofonba a felismerni kívánt szöveget, először a zajmentesítés következik, ezt a spektrális kivonás algoritmusa végzi el, amely úgy zajlik, hogy megkapja a zajos jelet és a mintavételezési frekvenciát, és ezek alapján hozza létre a zajmentes jelet.
18. ábra: A kepsztrális kivonás algoritmusa
30
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
A zajszűrés során VAD algoritmus is megvalósításra került, így csak azzal a jellel dolgozik a program a továbbiakban, ahol valóban beszédet érzékelt. Ezek után a mintákhoz hasonló formában kiszámolja a bevitt hang jellemzőit, ezeket egy vektorban tárolja. Utána következik a felismerés, amikor is a dinamikus idővetemítés (DTW - Dynamic Time Warping) [18] algoritmust használva a mintavektor / vektorokat összehasonlítja a bemenő beszédből képzett vektorral és döntést hoz, hogy volt-e egyáltalán felvétel, vagy sikerült és megvan az elhangzott szöveg, esetleg sikertelen volt a felismerés. A dinamikus idővetemítés algoritmus célja tipikusan nagyobb egységek összehasonlítása, így jól illeszkedik a feladathoz. Az összehasonlítás az előfeldolgozás után keletkezett és a referenciavektorok összevetése, adott értékek közti távolságkeresés, azaz a lehető legjobb illeszkedést keresi meg. Minden lehetséges módon össze kell párosítanunk az egységeket, majd a legkisebb távolságot kell megnéznünk. Az idővetemítés feladata a legkisebb távolság megtalálása, amely mentén az össztávolság minimális, ez lesz a két szó távolsága.
19. ábra: Az algoritmus vázlata
20. ábra: Referenciaminták Matlabban mátrixban tárolva
31
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Létrehoztam a referenciamintákat, ezek benne vannak a vektorban.
21. ábra: Szótárban nem szereplő kifejezés felismerése
Itt olyan szöveget mondtam, amely nem szerepel a szótárban szereplő kifejezések között, ezért a várt eredményt adta. Ha a felismerés sikeres volt, az alábbi képernyő fogad minket:
22. ábra: Szótárban szereplő kifejezés felismerése
32
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
6.2. Zárt szótáras rendszer beszélőazonosítással Ebben a változatban ugyanazt a zárt szótárat alkalmaztam, de itt a neveknek lett nagyobb jelentősége, mivel az azonosítást még személyfelismerés is követi. A cél az, hogy olyan jellemzőket nyerjünk ki a beérkező hangból, amely alapján nagy bizonyossággal el tudjuk dönteni, hogy az kitől származik, feltéve, hogy az illetőt már felvettük rendszerünkbe. Ilyen fajta megoldás akkor válhat szükségessé, ha szeretnénk tudni, hogy kitől származik a hang, viszont sok esetben nehéz megmondani, hogy az adott kifejezést ugyanaz az ember mondta-e másik alkalommal is. Különböző helyzetekben más lehet a hangsúlyunk, a beszédritmusunk, hangmagasságunk, ez okozhatja a legtöbb problémát az azonosítás során. Éppen ezért az alapötlet, hogy a hangot ne csak egyszer vigyük fel az adatbázisba, hanem többször, hogy ezek alapján tudjunk számolni egy „átlagot”, amely az adott beszélőre jellemző, és ezzel hasonlítjuk össze a beérkező jelet. Mivel a fentebb felsorolt problémák a felismerés során nehezítik a dolgunkat, így az időtartomány, mint valamiféle műveletek végzésének tartománya kiesik a lehetőségek közül, azonban megfelelő lehet a frekvenciatartományba transzformálás, amelyet diszkrét koszinusz transzformáció segítségével végzünk el. Ezek után a jól ismert euklideszi norma kiszámítása következik. Ha ez elkészült, akkor ki kell számítanunk az összes minta normáját, majd össze kell hasonlítani azokat, és a bejövő jelet hozzá tudjuk mérni, ugyanis ha nagyon kicsi a távolság, akkor az nagy valószínűséggel ugyanattól a személytől származó beszéd. Segítségünkre van még a Csebisev egyenlőtlenség, amikor a szórás segítségével felső korlátot adhatunk a várható értéktől való eltérés valószínűségére. Ennek segítségével 75%-os pontossággal megmondhatjuk, hogy a beszéd az adott személytől származik-e. A program működése során először rögzítenünk kell a hangunkat, ezt megtehetjük a program, vagy egyéb segédprogram segítségével is. Ezután indulhat a tényleges algoritmus. Először beírjuk a nevet, melyet fel szeretnénk ismerni, ez az a név lesz, amit felvettünk, remélhetőleg a saját nevünk. Utána lehetőségünk van bemondani ezt a nevet, ezt 3 másodpercig tehetjük meg. Ha nem jól sikerült a felvétel (visszahallgathatjuk), akkor készíthetünk újat, siker esetén a program továbbmegy. Ekkor láthatjuk a felvett jel spektrumképét és az összehasonlító jelek spektrumképét. Ekkor történik az összehasonlítás, aminek végeztével a program kiírja, hogy helyes volt-e a felismerés, azaz mi vagyunk azok vagy sem.
33
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
A program forráskódjából az 2. sz. Mellékletben találhatunk bővebb ismertetést. Ha a felismerés sikeres, a program kiírja a nevünket:
23. ábra: Saját referencia mintatár készítése
24. ábra: Helytelen felismerés
25. ábra: Sikeres felismerés
34
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
26. ábra: Megjelenített spektrumképek
Ennél a megvalósításnál saját magunk készítjük az adatbázist a program indításánál, amikor a nevünket tízszer felvesszük. Ezek után, ha újra felveszünk neveket, azok törlik a régi felvételt, célszerű ezért azokat kimenteni, így bármikor újra kipróbálhatjuk. Ennél az algoritmusnál nincs értelme valós idejűségről beszélni, mivel a célja nem is ez, de ha mégis lemérjük, azt kapjuk, hogy minden esetben nagyon gyorsan, szinte valós időben, pár tizedmásodperces késéssel megtörténik a név felismerése, elemzése. Bár ez az algoritmus nem tartozik szorosan a kiírt feladathoz, mégis hasznos lehet végül, főleg, ha okostelefonra is kifejlesztésre kerül egy alkalmazás, melyben így a személyfelismerés is lehetővé válik.
35
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
6.3. Rejtett Markov modellel megvalósított megoldás A rejtett Markov modell [9] statisztikai jellemzőket használ a beszédfelismeréshez. Előnye, hogy könnyen készíthető vele nagy szótáras beszédfelismerő, amelyet könnyen bővíthetünk, valamint folyamatos beszédre is alkalmazhatunk. Azonban ha ilyen nagy szótárat szeretnénk, nem használhatjuk a szavakat alapegységekként, hanem a fonémákat kell felismerési egységnek vennünk. Ekkor minden fonémához egy háromállapotú modellt kell rendelni, amelyben a középső állapot a fonéma stabil magja, a jobb és bal állapot pedig a szomszédos hangokhoz igazodó kezdő és záró szakasz. Ezt hívjuk monofón modellnek [19], ennek előnye az egyszerűsége, betaníthatósága. A környezetfüggetlen monofónokat kiterjeszthetjük környezetfüggő trifónokra is, ám ekkor a betanítás szinte lehetetlen, mivel egy adott fonémához minden lehetséges környezetet végig kell nézni és ahhoz egy modellt rendelni. A rendszer két részből áll, az egyik rész a szótár rögzítéséért felelős, tehát a felvételeket olyan formában tárolja el, hogy azt később a tesztek során össze tudjuk hasonlítani. Ez vázlatosan az alábbi módon néz ki:
27. ábra: A szótár rögzítésének folyamata
A felismeréskor a következő folyamat megy végbe:
28. ábra: A felismerés vázlatos folyamata
Itt a rendszer csak akkor készít felvételt, ha arra ténylegesen szükség van, így próbál meg valós idejűvé válni. Ezt úgy éri el, hogy van egy küszöbérték, amely felett automatikusan
36
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
felvétel készül a szóról, itt ez 1 s. Ezek után következik a VAD, ennek köszönhetően a továbbiakban csak a beszédet tartalmazó részeket fogjuk felhasználni. Utána Mel-frekvenciás koefficiensek számítása következik, végül pedig a rejtett Markov modell feladata lesz kiszámolni a valószínűségeket és a maximum likelihood8 módszerével döntést hozni. Ha egy ilyen felismeréssel végeztünk, újra kezdődik a bejövő jel figyelése, ezért ez tekinthető közel valós idejűnek. A jel feldolgozása a Matlab Data Aquisition Toolbox segítségével történik, így a Matlabból irányíthatjuk a hangkártyát, itt állíthatjuk be a treshold értéket is. Ha ezt nem tennénk meg, a program folyamatosan mentené az adatokat a gépünkre. A VAD nagyon fontos része a programnak, enélkül nem tudnánk megkülönböztetni a beszédet tartalmazó és nem tartalmazó részeket. A beszéd jelenlétét az energia segítségével tudjuk megállapítani, ezeket kis időközönként, ablakonként vizsgáljuk, így különböztetve meg a csendes részektől. Azonban a nullátmenetek vizsgálata is szükségessé válik, mivel ez más szempontból végzi az elkülönítést, a kettő együttes alkalmazása pedig jó eséllyel vezet helyes eredményhez. Két treshold értéket vezetünk be, egy nagyobbat és egy kisebbet. Ha az energia értéke a nagyobb felett van, akkor biztosan beszéd történt, ekkor aktivizálódik a rendszer, elindul a felismerés. Ha az alacsony érték alatt van az energia, akkor biztosan nem történik semmi, mivel ezt biztosan beszédmentes, csendes szakaszként jelölhetjük. Viszont ha a kettő közé esik, akkor nézzük meg a nullátmeneteket, és így döntjük el, hogy beszédet tartalmazó zajos részről, vagy csak szimplán zajról van-e szó, esetleg zöngétlen beszédhangról. Ez alacsony jel-zaj arány esetében nehezebb feladat, mivel ekkor lehet, hogy beszédként reagál a rendszer a zajra. Ezért inkább magasabb jel-zaj arányú környezetben kifizetődő a használata. A felismerés annál jobb, minél több mintát rögzítünk. Először tíz-tíz mintával teszteltem az algoritmust, de aztán százszáz mintát rögzítettem a jobb felismerés érdekében. A program sok részt merít a Voiceboxból, HMM Toolboxból, és az Auditory Toolboxból.
8
Maximum likelihood módszer: egy feltételes valószínűséget kell maximalizálnunk, a bayes-i döntésből vezethető le
37
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
7. Első tesztkörnyezet és az azzal elért eredmények Két fontos tényezőt vettem figyelembe a hangrögzítés folyamán, az egyik a mintavételezési arány, azaz hogy milyen gyakorisággal szeretnénk az analóg jelből mintákat eltárolni, a másik pedig az, hogy mindezt hány biten szeretnénk ábrázolni, azaz mennyire pontosan vesszük fel az értékeket. Ezen értékek megválasztása sokszor függ a hangkártyánktól, csak a szabott határokon belül tudjuk változtatni az értékeket, azonban programok segítségével lehetőség nyílik utólagos alul-mintavételezésre. Ekkor az Audacity-t használtam, a kódokat Matlabban futtattam. A mintavételezési frekvenciák a következők voltak: Mivel a beszéd frekvenciája 100 Hz és 8 kHz között változhat, a 8000 Hz-es frekvencia már jó kell, hogy legyen, de kipróbáltam 11000 Hz-en és 22000 Hz-en is, mindezt 32 biten. A tesztelés során otthon készített (házon belül – házon kívül) felvételekkel dolgoztam, úgy gondoltam, hogy ezek a felvételek elég jól reprezentálják a zajos környezetet, a stúdiófelvételeket pedig feleslegesnek ítéltem meg. A felhasznált mondatok, kifejezések:
Ne menj a házához!
Ne menj a vázához!
Jó ez az illat.
Jó ez az élet.
Tegnap óta itt áll?
Tegnap óta ittál?
Nézd, leszedték az árakat!
Nézd, leszedték a zárakat!
Két ember hazudik.
Képembe hazudik.
Kérlek, negyedeld!
Kérlek, ne egyed!
38
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Ezek után tipikus figyelmeztető szavakat használtam:
Vigyázz
Autó
Metró
Bicikli
Villamos
Busz
Mögötted
Jön
Állj
Stop
Igen
Nem
Elől
Ez összesen 25 elem, melyet a fent megadott paraméterekkel rögzítettem. A zárt szótáras konstrukciók lényege, hogy csak adott helyzetekben használhatóak, viszont bármekkorára kibővíthetőek, így nem csak siketek veszélyre való figyelmeztetésére, hanem egyéb más segítésnyújtásra is használhatóak, például egy munkahelyen az integrációt elősegítendő gyakran használt szavakat, neveket taníthatunk meg a szerkezetnek, majd egyre szélesebb körben használhatjuk. Mivel az algoritmus azt ismeri fel, amit megtanítunk neki, így nem jelent gondot idegen nyelvű szavak felismerése sem, egyedül a beszélőtől való függés és a jobb zajtűrés fejlesztése lehet még fontos. Az adatbázisba kerültek még elemek, ezek a számok 0-9-ig, valamint különböző keresztnevek, hónapok, napok. 7.1. Eredmények a dinamikus idővetemítés algoritmusával 8000 Hz-en a felismerés nem volt túl sikeres, sok mintát nem ismert fel a program.
29. ábra: 8000 Hz-es mintákhoz tartozó eredmények időbeli eloszlása kifejezésenként, különböző zajterheléssel
39
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
A rossz eredményeket nullának vettem, így jól látható a grafikonon, hogy hol nem sikerült eredményt elérni. Akkor is nullának vettem az értéket, ha a felismerés megtörtént, de rossz eredményt adott. Ilyen a „Nézd, leszedték az árakat”, illetve a „Nézd, leszedték a zárakat” mondatoknál volt.
Ugyanez 11025 Hz-en:
30. ábra: 11025 Hz-es mintákhoz tartozó eredmények időbeli eloszlása kifejezésenként, különböző zajterheléssel
Itt már jobban látszik az egész eloszlása, látható, hogy a zajos környezet növelésével egyre csökken a helyes felismerések száma, és a hangminőség javulása miatt már több a helyes felismerés. Voltak kifejezések, ahol itt sem értem el értékelhető eredményt, de a rövid szavak esetében ez az előzőnél jobb volt. A harmadik grafikonon a 22050 Hz-en tárolt minták esetében elért eredmények láthatóak:
31. ábra: 22050 Hz-es mintákhoz tartozó eredmények időbeli eloszlása kifejezésenként, különböző zajterheléssel
40
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Ebben az esetben is látható, hogy a felismerés pontosabb lett, több helyes eredmény született, de a két mondatpár esetében ismét nem sikerült a megkülönböztetés. Persze ezeket azért is tettem bele, hogy nehézséget okozzanak, így jó indikátorai lettek a pontos felismerésnek. Itt is a rövidebb kifejezések értek el nagyobb sikereket. Összefoglalva elmondható, hogy az algoritmus segítségével sikerült helyesen felismerni a rövidebb kifejezéseket, ezeket zajos környezetben is jó minőség mellett. A nehezebb kifejezések gyakran adtak hibát, illetve nem lehetett őket megkülönböztetni. Az időbeli eloszlás 2-6 s között van. 7.2. Zárt szótáras felismerés beszélőazonosítással – elért eredmények Ez az algoritmus szinte valós időben, 1-2 tizedmásodperces késéssel érte el az alábbi, közel 75%-os eredményeket:
32. ábra: A helyes felismerések százalékos aránya 10-10 teszt elvégzése után
A felismerés zajmentes, otthoni körülmények között sikeres, még utcazajban is, mivel a spektrumot vizsgálja, a sikeresség a jel-zaj viszony függvénye. Variálhatunk még beszédünk ritmusával, hangsúlyával, eltorzíthatjuk azt, akkor sem túl sokszor sikerült a felismerés. Azonban ha csak a saját beszédünkben általában is előforduló különbségeket vesszük alapul, jó eredményre juthatunk. Átlagosan elmondható, hogy az algoritmus többször ismer fel helyesen, mint sem.
41
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
7.3. Eredmények rejtett Markov modellel Ez az algoritmus elég jó aránnyal ismerte fel a számokat, de néhány esetben adódtak gondok. A hónapoknál a június és a július volt nehezen megkülönböztethető, ezt mintha véletlenszerűen találta volna el. Itt nem teszteltem mondatokkal, csak rövidebb kifejezésekkel, nevekkel. Itt is jelentkeztek azok a problémák, mint a többi megvalósításnál, hogy nem mindegy, hogy milyen tempóban, milyen hangsúllyal beszélünk, hol visszük le a hangsúlyt, hol visszük fel, milyen a hangmagasságunk. A zajtűrése nem volt tökéletes a rendszernek. Számok esetében:
33. ábra: Eredmény számok esetében (O-otthon, U-utcán, 10-10 mintával, százalékban kifejezve)
Hónapok esetében:
34. ábra: Eredmény hónapok esetében (O-otthon, U-utcán, 10-10 mintával, százalékban kifejezve)
Napok esetében:
35. ábra: Eredmény napok esetében (O-otthon, U-utcán, 10-10 mintával, százalékosan)
42
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Előfordult, hogy rosszul ismerte fel a számjegyeket, leginkább az egy-négy számoknál. A hónapoknál több gond akadt, itt sokszor jelzett tévesen vagy fel sem ismerte, viszont a júnuis-július nagyon problémásnak bizonyult. A legjobb eredményt a napoknál értem el, itt nagyon jól sikerült a felismerés, sokszor adott jó eredményt. Átlagban a felismerések:
36. ábra: Az eredmények összefoglalása
8. Továbbtesztelt algoritmus, újabb feladatok Az előzőekben bemutatott dinamikus idővetemítés algoritmusa nem illeszkedik teljesen a feladathoz, és bár nem hoz rossz eredményeket jó hangminőség esetén, zajosabb környezetben nem megfelelő eredményt ad, valamint a gyorsasága sem megfelelő, hiszen egy valós idejű alkalmazásban nem engedhető meg ekkora késés. Ezen felül zárt szótáras és beszélőfüggő is, ez nagyban nehezíti a jelen feladatkörben való alkalmazását. A következő megoldást azért vetettem el, mert jelenleg beszélőazonosításra nincs szükség, hiszen ez a beszélőt próbálta meg megkülönböztetni a Csebisev egyenlőtlenség és egyéb statisztikai módszerek segítségével. Bár itt elég jó eredményt lehet elérni, és a sebessége is viszonylag gyors volt, pontossága függ az adatbázisba felvett minták számától. Itt a legnagyobb probléma, hogy nem tesz lehetővé állandó beszédfelismerést, inkább csak szeparált szavak, kifejezések felismerésére alkalmas. Az előzőekben a rejtett Markov modellre épülő megoldás vezetett a legjobb eredményhez, így úgy döntöttem, hogy ezzel foglalkozom mélyebben a továbbiakban. Mivel a feladatom, a beszéddetektáló algoritmus fejlesztése és tesztelése nem feltétlenül követeli meg a mondandó pontos felismerését, így több figyelmet szenteltem a beszéddetekcióra.
43
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
8.1. Az új tesztkörnyezet A jobb tesztelhetőség érdekében új tesztkörnyezetet készítettem. Bár nem tartalmaz annyi nevet, mint az előző, ugyanazokkal a mondatokkal, kifejezésekkel foglalkoztam most is, hogy legyen összehasonlítási alapom. Most 8000 Hz-en és 8 biten rögzítettem a mintákat, majd 16000 Hz-en és 16 biten, valamint csináltam néhány CD minőségű (44100 Hz, 32 bit) felvételt is. Az első két változatból kifejezésenként 100-100 mintát rögzítettem, a CD minőséggel ezt tízszer tettem meg, hiszen ezt csak ellenőrzésképpen használtam fel, a taktilis kijelző használatánál ugyanis nincs mód ilyen jó minőségű felvételek feldolgozására. Igyekeznünk kell a lehetőségeinkhez képest legrosszabb minőséggel is jó eredményeket elérni, hiszen ez vezethet csak az erőforrás-takarékossághoz. A felvételeket megvágtam, mindegyik elején egy másodperc beszédmentes zajos szakasz található. Így lehetőség van egyesével is betölteni őket, de van olyan hanganyag is, ahol minden kifejezésből száz minta található egy hangfájlban, így ez folyamatos tesztelést tesz lehetővé. A valós idejűség még annyiban nem valósult meg, hogyha egy mintát tesztelek, akkor utána azonnal megmutatja az eredményt, de ez több minta esetén (pl. száz minta együttes betöltésénél, amely körülbelül 3,5-4 percbe telik) csak a teljes hanganyag végigtesztelése után látható. A felvételek stúdiókörülmények között, otthoni környezetben és az utcán (forgalomban) készültek. Ez a három környezet egész jól modellezi a teljes életteret. A stúdióban és otthon készített felvételek között a vártnál kevesebb különbséget tapasztaltam, de azért a felismerés során már jobban elkülönültek, különösen a megkülönböztethetetlennek hitt hónapok és mondatok esetében. Végül tehát két algoritmust teszteltem újra. Az egyik a rejtett Markov modellt alkalmazó kettős tresholdot tartalmazó algoritmus, amelynél az új felvételek sokkal szélesebb körű tesztelést tettek lehetővé. A másik módszer szintén ennek az algoritmusnak az alapja, a kezdeti feldolgozás során használjuk, ez pedig a hangaktivitás detektálása. Ennek során fel kell ismerni, hogy az adott szakaszban történt-e beszéd, ha igen, akkor ezt jelezni kell. Ez a jelzés éppen elegendő ahhoz, hogy a taktilis kijelző működésbe lépjen és jelezze a beszéd jelenlétét. Tehát megpróbáltam kiragadni az algoritmusból ezt a részt, és megjeleníteni a beszédet tartalmazó részeket.
44
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
8.2. A tesztelt kifejezések Mint fentebb említettem, minden kifejezésből 100-100 minta került rögzítésre, mind 8000 Hz-en és 8 biten, mind 16000 Hz-en és 16 biten, valamint 10 minta CD-minőségben is. Mindezek stúdió, otthoni és forgalmas környezetben, így az összmintaszám és a tesztelés ideje megugrott az előző tesztkörnyezethez képest, árnyaltabb eredményt adva a felismerés sikerességéről. A felhasznált szavak, mondatok: Számok:
1
2
3
4
5
6
7
8
9
10
Hónapok:
január
február
március
április
május
június
július
augusztus
szeptember
október
november
december
Napok:
hétfő
kedd
szerda
csütörtök
péntek
szombat
vasárnap
Női nevek:
Anett
Katalin
Sára
Vilma
Zita
Géza
József
Péter
Férfi nevek:
Attila
Balázs
45
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Mondatok:
Állj, jön a villamos
Jön a busz
Mögötted
egy Vigyázz, ott a metró
biciklis Jó ez az élet
Jó ez az illat
Képembe hazudik
Két ember hazudik
Kérlek, ne egyed
Kérlek, negyedeld
Ne menj a házához
Ne menj a vázához
Nézd, leszedték az Nézd, leszedték a Tegnap óta itt áll? árakat
Tegnap óta ittál?
zárakat
8.3. Rejtett Markov modellt alkalmazó algoritmussal elért eredmények A számok esetében ismét a négy és az egy, a hat és a hét volt problémásabb, de a régebbi eredményekhez képest most jobban egymáshoz közelítenek azok, nincs olyan túlzottan kiugró érték. A hónapoknál ismét a június-július volt a problémás, bár az előzőekhez képest már nem csak a véletlen döntés látszik, hanem jobb a megkülönböztetés. A mondatoknál is hasonló eredményre jutottam, mint tavaly. Az igazi kihívást az jelentette, hogy a megadott mondatokat mindig megkülönböztetetten mondjam fel, hiszen a beszédben sem tudjuk megkülönböztetni a „Tegnap óta itt áll?” vagy a „Tegnap óta ittál?” mondatokat. Ugyanígy volt sikertelen a „Nézd, leszedték a zárakat” és a „Nézd, leszedték az árakat” mondatok megkülönböztetése. Ha túlzottan hangsúlyoztam, az segített, de így senki sem beszél, tehát a megkülönböztetés így nem lehet reprezentatív. A többi hangmintánál arányaiban hasonló eredmények születtek, mint az előző tesztkörnyezettel, így elmondható, hogy a többszöri tesztelés csak finomította az eredményeket, bár a treshold állításával a zajtűrést valamelyest sikerült javítani. Általánosságban elmondható, hogy a várt eredményt kaptuk, azaz ahogy javult a felvételek minősége, úgy lettek az eredmények is egyre jobbak. Stúdióban szinte mindent sikerült felismerni, itt majdhogynem hibátlan eredményt kaptam. Otthoni környezetben kicsivel rosszabb eredmények születtek, a különbség leginkább a technikai berendezések különbözőségéből adódhat. A forgalmas utcán készült felvételek felismerésénél sokkal
46
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
rosszabb eredményre számítottam, de visszahallgatva már hallatszott, hogy itt sem ad majd annyi hibás eredményt a tesztelés. Itt már akadtak hibák, főleg akkor, amikor egy-egy zöld lámpa hatására megnőtt a hirtelen elinduló forgalom, ilyenkor volt, hogy sajnos ösztönösen hangosabban kezdtem el beszélni a zaj túlharsogása érdekében, de ha sikerült megtartanom a hangerőmet, akkor előfordult, hogy a zaj elnyomta a beszédemet. Ilyenkor, mint az a hangaktivitás detekciónál is látszik majd, nem sikerült a felismerés, azaz hibásan ismert fel. Ez a minőség csökkenésével csak nőtt, bár még így is elfogadható eredményt adott, hiszen 60% körül, de inkább felette adódtak az eredmények. A rosszabb értékek betudhatók a nagyobb zajos periódusoknak, ezt viszont ellensúlyozhatja a hangsúlyosabb beszéd. 8.4. Az eredmények táblázatos formában és grafikonon ábrázolva Számok esetében a sikeres felismerések száma:
37. ábra: Számok esetében a sikeres felismerések száma
Ez grafikonon ábrázolva:
38. ábra: Számok esetében a sikeres felismerések száma grafikonon ábrázolva
47
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Napok esetében a sikeres felismerések száma:
39. ábra: Napok esetében a sikeres felismerések száma
Ez grafikonon ábrázolva:
40. ábra: Napok esetében a sikeres felismerések száma grafikonon ábrázolva
Hónapok esetében a sikeres felismerések száma:
41. ábra: Hónapok esetében a sikeres felismerések száma
48
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Ez grafikonon ábrázolva:
42. ábra: Hónapok esetében a sikereses felismerések száma grafikonon ábrázolva
Hasonló mondatok esetében a sikeres felismerések száma:
43. ábra: Hasonló mondatok esetében a sikeres felismerések száma
Ez grafikonon ábrázolva:
44. ábra: Hasonló mondatok esetében a sikeres felismerések száma grafikonon ábrázolva
49
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Mondatok esetében a sikeres felismerések száma:
45. ábra: Mondatok esetében a sikeres felismerések száma
Ez grafikonon ábrázolva
46. ábra: Mondatok esetében a sikeres felismerések száma grafikonon ábrázolva
Nevek esetében a sikeres felismerések száma:
47. ábra: Nevek esetében a sikeres felismerések száma
50
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Ez grafikonon ábrázolva:
48. ábra: Nevek esetében a sikeres felismerések száma grafikonon ábrázolva
Látható, hogy az eredményeknél adódnak indokolatlan rossz felismerések, ezek általában az én hibámból adódnak, mivel nem mindig sikerült jól hangsúlyoznom és volt, hogy zajos környezetben hangosabban, tagoltabban beszéltem, így könnyebb volt a felismerés. Ezeket elég nehéz kiszűrni, mert ösztönösen történnek, de ez a valóság modellezése szempontjából nem is baj, így jobban közelíti a valós élethelyzeteket. 8.5. A Voice Activity Detection-nel elért eredmények A hangaktivitás detektálása jelen esetben egész pontos eredményeket adott. Három hangminta esetében láthatjuk a detektálás eredményét. Látható, hogy a hangminőség nem annyira befolyásolja a detektálást, mint a zajszint. Minél zajosabb környezetben vagyunk, annál több hibát vét a rendszer. A forgalomban akkor is történt hangaktivitás jelzése, amikor csak zajosabb, két beszéd közötti szakasz volt. Mivel itt nem számít, hogy mit ismerünk fel, csak hogy felismertünk-e valamit, az eredmények máshogy alakultak, így egy kifejezésekre lebontott és egy össz-százalékos arányt tudunk kiszámolni. Ezek az értékek a következők:
49. ábra: A sikeres detektálások száma
51
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Látható, hogy összességében egész jó felismerés jött létre. A rosszabb értékek a zajnak és a beszédemnek köszönhetőek, hiszen sokszor jelzett akkor is, amikor nem volt beszéd, ezeket sikertelen felismeréseknek vettem, valamint ha nem beszéltem, de mélyebbet sóhajtottam, köhintettem, azt is hozzávette a beszéddel jelzett szakaszokhoz. Az alábbiakban három esetben szeretném megmutatni a beszéd jelzését. Először a „Képembe hazudik” 8000 Hz-es stúdióban készült felvételét:
50. ábra: Képembe hazudik, 8000 Hz, stúdió
Látható, hogy a beszédet tartalmazó szakaszokat szépen felismerte. A következő ábrán a „Tegnap óta ittál?” 8000 Hz-en otthon készült felvételét lehet látni:
51. ábra: Tegnap óta ittál, 8000 Hz, otthon
Az otthoni mikrofonnak köszönhetően kicsit torz a jel, de még itt is látszik, hogy kevés a zaj és jól elkülönül a beszédet tartalmazó szakasz.
52
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Az utolsó ábrán a „Jó ez az illat” látható 8000 Hz-en, forgalmas utcán készített felvételen:
52. ábra: Jó ez az illat, 8000 Hz, forgalmas utcán
Látható, hogy itt olyan szakaszon is jelzett, ahol csak zaj van, beszéd nem, ezért adódtak a hibás felismerések. 9. Következtetések A tesztek során elért eredmények hasonlók a szakirodalomban leírtakkal. A zajszűrés javítása és megfelelő előfeldolgozási eljárások beiktatása a pontos felismerést segítheti. A mérések során a paraméterek további állításával az eredmény még javítható. A tesztkörnyezet finomításával, például több beszélő (női/férfi), több élethelyzetnek megfelelő környezet beiktatásával még jobban finomíthatók az algoritmusok. A fenti algoritmusok alkalmasak arra, hogy a taktilis kijelző számára a beszédet a csendtől megkülönböztessék, némelyik még több információval is szolgál a felismerés során. A dinamikus idővetemítés kisebb késéssel ismeri fel az elhangzottakat, pontossága a szakirodalomban meghatározott értékek közelében van. A rejtett Markov modellel történő felismerés jobb eredményt adott, közel valós időben ismerte fel az elhangzottakat jó hatásfokkal. Az előfeldolgozó mechanizmusa, melynek során a hangaktivitást detektáltuk - a beszéd/nem beszéd megtörténtét - alkalmas megfelelő zajszint mellett az elkülönítésre.
53
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
10. Továbbfejlesztési kérdések A fent bemutatott algoritmusok jól használhatók a beszéd felismerésére. A hangaktivitás detektálásán alapuló modell a taktilis kijelző alapfeladatának egy lehetséges jó megoldását adja. A siketek további segítése céljából a beszélődetektálás okostelefonra történő megvalósítása adhat hasznos funkciókat a feladathoz. A taktilis kijelző szempontjából pedig még a zajtűrés fejlesztése fontos, itt a szakirodalomban áttekintett algoritmusok közül még több is megvalósításra kerülhet ilyen célból. A készülék akkor nem jelezhet, amikor nem történt beszéd, azonban ez többször is megtörtént. Erre megoldás lehet még a limitált használat (bizonyos zajszint felett a készülék használata nem javasolt), mely azonban pont az esetleges forgalmas utcán történő veszély jelzésétől fosztaná meg a felhasználót. A másik továbbfejleszthető tényező a valós idejű megjelenítés, mert ebben a formában a tesztelendő hanganyag hosszától függ a feldolgozás ideje és a kiértékelés sebessége. A két faktor továbbfejlesztése lehetővé tenné, hogy a taktilis kijelző működése helytálló lehessen. Más megközelítésből a feladat is továbbfejleszthető, hiszen sok olyan jellemző van beszédünkben, amely még kijelzésre kerülhet egy ilyen kijelzőn. Ezen faktorok lehetnek például a szájról olvasás segítése a hangok jobb feltérképezhetősége által, zöngés-zöngétlen megkülönböztetés. Meggondolandó a taktilis kijelző mobiltelefonhoz kapcsolása is a jobb megjeleníthetőségért. 11. Összefoglalás Jelen dolgozatban áttekintettem a taktilis kijelző működését, annak elvét és felhasználhatóságát a siketek segítésében. A beszédfelismerési eljárások áttekintése után kiválasztottam azokat a lehetséges megoldásokat, amelyek a feladat szempontjából jó megoldást adhatnak. Tesztkörnyezetet készítettem, az algoritmusokat megvalósítottam, azokat leteszteltem. Az eredmények ismeretében a legjobb algoritmust bővebb tesztkörnyezet segítségével is megvizsgáltam, így arra az eredményre jutottam, hogy a rejtett Markov modell segítségével a beszédet sikeresen fel lehet ismerni. A felismerés algoritmusának előfeldolgozási eljárását külön is megvizsgáltam, ez 80%-os hatásfokkal ismerte fel a beszéd jelenlétét. A zajtűrés fejlesztése a paraméterek finomhangolásával lehetséges. A bemutatott algoritmusok segítségére lehetnek a siketeknek a beszéd jelenlétének értelmezésében, melyet a taktilis kijelzőn érzékelhetnek.
54
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
12. Köszönetnyilvánítás Köszönetemet szeretném kifejezni Tihanyi Attila Tanár Úrnak az irányelvek meghatározásáért, a feladat pontos értelmezésének segítéséért, az útmutatásért, valamint a sok segítségért, és hogy bármikor fordulhattam hozzá, mindig sok türelemmel és segítséggel volt felém. Szeretném megköszönni a taktilis kijelző projekt másik két résztvevőjének is a segítségét, Reizmüller Lászlónak és Auffenberg Andrásnak, hogy együtt megbeszélhettük a részfeladatainkat és egymást segítettük, ha elakadtunk.
55
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Irodalomjegyzék [1] BME Kognitív Tudományok Tanszék, Észlelés kurzus, Multiszenzoros feldolgozás előadás
[2] Iker Luengo, Eva Navas, Igor Odriozola, Ibou Saratxaga, Inmaculada Hernaez, Inaki Sainz, Daniel Erro: Modified LSTE-VAD algorithm for applications requiring reduced silence frame misclassification (University of the Basque Country)
[3] R. Venkatesha Prasad, Abhijeet Sangwan, H. S. Jamadagni, Chiranth M. C., Rahul Sah, Vishal Gaurav: Comparision of Voice Activity Detection Algorithms for VoIP (CEDT, Indian Institute of Science, Bangalore, India, Department of E&C, PESIT, Bangalore)
[4] J. Ramírez, J. M. Górriz, J. C. Segura: Voice Activity Detection. Fundamentals and Speech Recognition System Robustness (University of Granada, Spain) (Source: Robust Speech Recognition and Understanding, Book edited by: Michael Grimm and Kristian Kroshel, ISBN 987-3-90213-08-0, pp.460, I-Tech, Vienna, Austria, June 2007)
[5] T. Ravichandran, K. Durai Samy: Performance Enhancement on Voice using VAD Algorithm and Cepstral Analysis (Velalar Collage of Engineering and Technology, Thindal, Erode, Tamilnadu, India, K.S.R.C.T., Tiruchengode, Erode, Tamilnadu, India, Journal of Computer Science 2 (11): 835-840, 2006, ISSN 1549-3636, 2006 Science Publications)
[6] Jia-lin Shen, Jeih-weih Hung, Lin-shan Lee: Robust Entropy-based Endpoint Detection for Speech Recognition in Noisy Environments (Institute of Information and Science, Academia Sinica, Taipei, Taiwan, Republic of China)
[7] Csapó Tamás Gábor, Tarján Balázs: Dialógustervezés VoiceXML-ben
[8] Takács György: Beszédfelismerés és szintézis kurzus, 2010. 03. 09. előadás
[9] Mikael Nilsson, Marcus Ejnarsson: Speech Recognition using Hidden Markov Model, performance evaluation in noisy environment (Degree of Master of Science in Electrical Engineering, Blekinge Institute of Technology, 2002)
[10] Takács György: Beszédfelismerés és szintézis kurzus, Beszédfelismerés neurális hálókkal előadás
56
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
[11] K. Elenius, Gy. Takács: Phoneme Recognition with an Artificial Neural Network (Department of Speech Communication and Music Acoustics, KTH, Stockholm, Journal: STL-QPSR, Volume: 31, Number: 2-3, Year: 1990, Pages: 001-044)
[12] K. Elenius, Gy. Takács: Acoustic-phonetic Recognition of Continous Speech by Artificial Neural Network (Department of Speech, Music and Hearing, KTH Computer Science and Communication, Stockholm)
[13] Jasha Droppo, Li Deng, Alex Acero: Evaluation of the SPLICE Algorithm on the Aurora2 Database (Microsoft Research, One Microsoft Way, Redmond, WA, USA, Eurospeech 2001)
[14] Benyó Zoltán, Farkas Zsolt, Illényi András, Katona Gábor, ifj. Várallyai György: Csecsemők hangelemzése, különös tekintettel hallás-képességükre (MTA Nyelvtudományi Intézet)
[15] Zoltán Tüske, Mihajlik Péter, Zoltán Tobler, Tibor Fegyó: Robust Voice Activity Detection Based on the Entropy of Noise-Supressed Spectrum (Department of Telecommunications and Media Informatics, Budapest, University of Technology and Economics, Hungary, Interspeech 2005)
[16] Tüske Zoltán, Mihajlik Péter, Tobler Zoltán: Új, zajbecsléssel kombinált, entrópia-alapú beszéddetektálási
eljárás
a
beszédfelismerési
hatásfok
javítására
(Budapesti
Műszaki
és
Gazdaságtudományi Egyetem, Távközlési és Médiainformatikai Tanszék, Budapest)
[17] Philippe Renevey, Andrzey Drygaljo: Entropy Based Voice Activity Detection in Very Noisy Conditions (Swiss Center for Electronics and Microtechnology, Neuchatel, Switzerland, Swiss Federal Institute of Technology, Lausanne, Switzerland, Eurospeech 2001, Scandinavia)
[18] Takács György: Izolált szavas, zárt szótáras beszédfelismerők, A dinamikus idővetemítés, Beszédfelismerés és szintézis előadás
[19] Mihajlik Péter, Fegyó Tibor, Tatai Péter: Új eljárás a gépi beszédfelismerés környezetfüggő beszédhangmodelljeinek kialakítására
57
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
Ábrajegyzék 1. ábra: Példa taktilis kijelzőre ……………………………………………………………………….... 13
2. ábra: A jel energiájának kiszámítása ……..…………………………………………………………. 16
3. ábra: „Nézd, leszedték a zárakat” spektrumképe …………………………………………………… 16
4. ábra: „Nézd, leszedték a zárakat” kepsztrumának megjelenítése …………………………………... 17
5. ábra: A Mel-frekvenciás kepsztrum előállításának folyamata …………………………………….... 18
6. ábra: A Mel-frekvenciás kepsztrum együtthatóinak ábrázolása …………………………………….. 19
7. ábra: FFT spektogramm …………………………………………………………………………….. 20
8. ábra: A Mel-frekvenciás szűrők kimenete …………………………………………………………... 20
9. ábra: Információveszteség megtekintéséhez a diszkrét koszinusz transzformáció előtti állapot kirajzoltatása …………………………………………………………………………………………... 21
10. ábra: MFCC kiszámításakor információveszteség vizsgálata ……………………………………... 21
11. ábra: Az AMR Speech Coder vázlatos rajza ………………………………………………………. 22
12. ábra: A Wiener-szűrő képlete …………………………………………………………………….... 23
13. ábra: A beszédfelismerés egy lehetséges modellje ……………………………………………….... 24
14. ábra: Beszédfelismerés zajos környezetben ……………………………………………………….. 24
15. ábra: Megfigyelt vektoron definiált valószínűségi arányok tesztje ………………………………... 26
16. ábra: A gördülő spektrum kiszámítása …………………………………………………………….. 28
17. ábra: A Shannon-féle entrópia ……………………………………………………………………... 28
58
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
18. ábra: A kepsztrális kivonás algoritmusa ………………………………………………………….... 30
19. ábra: Az algoritmus vázlata ………………………………………………………………………... 31
20. ábra: Referenciaminták Matlabban mátrixban tárolva …………………………………………….. 31
21. ábra: Szótárban nem szereplő kifejezés felismerése ………………………………………………. 32
22. ábra: Szótárban szereplő kifejezés felismerése ……………………………………………………. 32
23. ábra: Saját referencia mintatár készítése …………………………………………………………... 34
24. ábra: Helytelen felismerés …………………………………………………………………………. 34
25. ábra: Sikeres felismerés ……………………………………………………………………………. 34
26. ábra: Megjelenített spektrumképek ………………………………………………………………... 35
27. ábra: A szótár rögzítésének folyamata …………………………………………………………...… 36
28. ábra: A felismerés vázlatos folyamata …………………………………………………………...… 36
29. ábra: 8000 Hz-es mintákhoz tartozó eredmények időbeli eloszlása kifejezésenként, különböző zajterheléssel ………………………………………………………………………………………….. 39
30. ábra: 11025 Hz-es mintákhoz tartozó eredmények időbeli eloszlása kifejezésenként, különböző zajterheléssel ………………………………………………………………………………………….. 40
31. ábra: 22050 Hz-es mintákhoz tartozó eredmények időbeli eloszlása kifejezésenként, különböző zajterheléssel …………………………………………………………………………………………... 40
32. ábra: A helyes felismerések százalékos aránya 10-10 teszt elvégzése után ……………………..… 41
33. ábra: Eredmény számok esetében (O-otthon, U-utcán, 10-10 mintával, százalékban kifejezve) .… 42
34. ábra: Eredmény hónapok esetében (O-otthon, U-utcán, 10-10 mintával, százalékban kifejezve). .. 42
59
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
35. ábra: Eredmény napok esetében (O-otthon, U-utcán, 10-10 mintával, százalékosan) …………..… 42
36. ábra: Az eredmények összefoglalása ………………………………………………………………. 43
37. ábra: Számok esetében a sikeres felismerések száma …………………………………………...… 47
38. ábra: Számok esetében a sikeres felismerések száma grafikonon ábrázolva …………………….... 47
39. ábra: Napok esetében a sikeres felismerések száma ………………………………………………. 48
40. ábra: Napok esetében a sikeres felismerések száma grafikonon ábrázolva ……………..……….... 48
41. ábra: Hónapok esetében a sikeres felismerések száma ……………………………………………. 48
42. ábra: Hónapok esetében a sikereses felismerések száma grafikonon ábrázolva ………………...… 49
43. ábra: Hasonló mondatok esetében a sikeres felismerések száma ………………………………….. 49
44. ábra: Hasonló mondatok esetében a sikeres felismerések száma grafikonon ábrázolva ………….. 49
45. ábra: Mondatok esetében a sikeres felismerések száma …………………………………………... 50
46. ábra: Mondatok esetében a sikeres felismerések száma grafikonon ábrázolva ………………….... 50
47. ábra: Nevek esetében a sikeres felismerések száma ……………………………………………..... 50
48. ábra: Nevek esetében a sikeres felismerések száma grafikonon ábrázolva ……………………….. 51
49. ábra: A sikeres detektálások száma ………………………………………………………………... 51
50. ábra: Képembe hazudik, 8000 Hz, stúdió …………………………………………………………. 52
51. ábra: Tegnap óta ittál, 8000 Hz, otthon ………………………………………………………….… 52
52. ábra: Jó ez az illat, 8000 Hz, forgalmas utcán …………………………………………………..…. 53
60
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
1. sz. Melléklet - Dinamikus idővetemítés - forráskód magyarázat, részletek Template-ek beállítása: %13 koefficienst szeretnénk: koeff=13; %Mátrix létrehozása: matr = cell(1,25); %Hangminta beolvasása, MFCC kiszámítása: for i = 1:25 q = ['C:\Users\Ancsa\Desktop\hangok\rovid\teszt\A_' num2str(i) '.wav']; [in1,FS1] = wavread(q); input = myVAD(input); matr(1,i) = {mfcc(koeff,input,FS1)}; end MFCC koefficiensek kiszámítása: n=256; %FFT Tk=0.025; %Keret – szokásos méret N=Fs*Tk; %Kereten belül a minták száma fn=24; %Mel filterek száma l=length(s); %minták száma a jelben Ts=0.01; FrSt=Fs*Ts; a=1; b=[1, -0.97]; %szűrőhöz k=floor(l/FrSt); matr=zeros(k-2, num); l=1:num; l=1+floor((num)/2)*(sin(l*pi/num)); if mean(abs(s)) > 0.01 s=s/max(s); %Normalizáláshoz end %MFCC kiszámítása for i=1:FrNum-2 fr=s((i-1)*FrSt+1:(i-1)*FrSt+N); e1=sum(fr.^2); %Energiaszámítás keretenként e2=max(e1,2e-22); En=log(e2); frF=filter(b,a,fr); %SZűrés F=frF.*hamming(N); %Hamming ablak
FFT1=fft(F,N);
%FFT kiszámítása
melfrek=melbank(fn,n,Fs); %24 szűrő létrehozása halfn=1+floor(n/2); spectr1=log10(melfrek*abs(FFTo(1:halfn)).^2); spectr=max(spectr1(:),1e-22);
61
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
c=dct(spectr); c(1)=En; koef=c(1:num); koefN=koef.*l'; matr(i, :)=koefN';
%DCT, kepsztrális tartományban
end DTW-hez a pontok kiszámítása: p = zeros(1,N); s1 = load('Teszt1.mat'); matrS = struct2cell(s1); %A tesztet számolja és hozzáhasonlítja a referenciához for i = 1:N matrNew = matrA{i,1}; matrNew = CMN(matrNew); p(i) = DTW(matrNew,matrRef); end points = [p];
62
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
2. sz. Melléklet – Zárt szótáras rendszer beszélőazonosítással – Forráskód magyarázat, részletek Először a hangfelvétel kódját mutatom be: 'A név felvétele következik 10 alkalommal' for i = 1:10 templ = sprintf('%s%d.wav','g',i); input('A név: (3 s, Enter, ha mehet a felvétel)'); y = wavrecord(132300,44100); sound(y,44100); wavwrite(y,44100,templ); end 'A Program szó begépelésével elindítható a felismerés' A felismerés kódja pedig: name = input ('A felismerendő név: ','s'); ytemp = zeros (132300,20); r = zeros (10,1); for j = 1:10 templ = sprintf ('% s % d.wav','g',j); [t, fs] = wavread (templ); s = abs (t); starts = 1; ends = 132300; for i = 1:132300 if s (i) >=.1 && i <=7000 starts = 1; break end if s (i) >=.1 && i > 7000 starts = i-7000; break end end for i = 1:132300 k = 132300-i; if s (k)>=.1 && k>=132300 ends = 132300; break end if s (k)>= .1 && k <132300 ends = k + 7000; break end end r (j) = ends-starts; ytemp (1: ends - starts + 1,2 * j) = t (starts:ends); ytemp (1: ends - start + 1,(2*j - 1)) = t (starts:ends);
63
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
end y = zeros (min (r),20); for i = 1:20 y (:,i) = ytemp (1:min (r),i); end Ezzel a beolvasott adatok egy 132300*20 méretű mátrixba kerülnek elhelyezésre. Ezek után FFT következik: fy = fft (y); fy = fy.*conj (fy); Majd a spektrum normalizálása következik. Csak 600 Hz-ig nézzük a frekvenciakomponenseket az egyszerűség kedvéért, valamint mert ez nagyjából lefedi az emberi hangokat. fr = zeros (600,20); for i = 1:20 fr (1:600,i) = fy (1:600,i)/sqrt(sum (abs (fy (1:600,i)).^2)); end Megkeressük az átlagot: av = zeros (600,1); for i = 1:20 av = av + fr (1:600,i); end av = av/20; Normáljuk: norm = av/sqrt(sum (abs (av).^2)); Meghatározzuk a szórást: stdev = 0; for i = 1:20 stdev = stdev + sum (abs (fr (1:600,i)-norm).^2); end stdev = sqrt (stdev/19); Ezek után következik a saját felvételünk elkészítése, amelyet a referenciához hasonlítunk: mytempl = wavrecord (132300,44100); sound (mytempl,44100); ''; myrec = input ('Ha a felvétel nem megfelelő, 1-et megnyomva újra elkészíthető vagy enterrel továbbléphet'); while myrec == 1 myrec = 0; input ('Kérem a nevét bemondani: (3 s, enter ha kész)') mytempl = wavrecord (132300,44100); sound (mytemp,44100);
64
Siketek beszédértését segítő taktilis kijelző készítéséhez zajtűrő beszédfelismerő algoritmusok tesztelése, fejlesztése
myrec = input ('Ha a felvétel nem megfelelő, 1-et megnyomva újra elkészíthető vagy enterrel továbbléphet'); end Ezek után ugyanolyan lépések következnek, mint a felvett hang előfeldolgozása során, majd végül a tíz referenciamintát összehasonlítjuk a frissen felvett mintával, kirajzoljuk a kettő spektrumát: hold on; subplot (2,1,1); plot (template) title ('Az új felvétel normalizált frekvenciaspektruma') subplot (2,1,2); plot (norm); title ('A refereciafelvételek normalizált frekvenciaspektruma') di = sqrt (sum (abs (template - norm).^2)); if di < 2*stdev name = strcat ('Sikerült a felismerés, ',name,' a neved.'); name else name = strcat ('Nem sikerült a felismerés, neked nem ',name,' a neved.'); name end
65