Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Fakulteta za elektrotehniko,
računalništvo in informatiko
Smetanova ulica 17
2000 Maribor, Slovenija
Simon Furman
GOVORNE TEHNOLOGIJE V
RAČUNALNIŠKIH IGRAH
Diplomsko delo
Maribor, september 2014
I
Diplomsko delo visokošolskega strokovnega študijskega programa
GOVORNE TEHNOLOGIJE V RAČUNALNIŠKIH IGRAH
Študent: Simon Furman
Študijski program: Visokošolski strokovni
Računalništvo in informacijske tehnologije
Mentor: doc. dr. David Podgorelec, univ. dipl. inž. rač. in inf.
Maribor, september 2014
II
III
IV
ZAHVALA
Za vso strokovno pomoč in vodenje pri opravljanju
diplomske naloge se zahvaljujem mentorju doc. dr.
Davidu Podgorelcu.
Iskrena zahvala tudi punci Rebeki za vso pomoč,
podporo in nasvete tekom študijskih let. Hvala, ker si mi
ves čas stala ob strani.
Posebej bi se rad zahvalil svojim staršem, ki so mi
omogočili študij in mi stali ob strani ter me z veliko mero
razumevanja spodbujali na študijski poti.
V
GOVORNE TEHNOLOHIJE V RAČUNALNIŠKIH IGRAH
Ključne besede: razpoznavanje govora, računalniško generiranje govora, identifikacija
govorca, uporabniški vmesnik, računalniška igra, XNA
UDK: 004.934(043.2)
Povzetek
V diplomskem delu opisujemo načine za razpoznavanje govora, računalniško generiranje
govora in identifikacijo govorca ter ogrodje za izdelavo računalniške igre. Na podlagi teh
znanj smo razvili 3D računalniško igro, ki jo lahko med igranjem upravljamo preko
tipkovnice ali govora. Gre za namizno aplikacijo, ki je namenjena uporabnikom
operacijskega sistema Windows. Napisana je v programskem jeziku C# in v ogrodju XNA,
ki omogoča razvoj in upravljanje iger.
VI
SPEECH TECHNOLOGIES IN COMPUTER GAMES
Key words: speech recognition, computer generated speech, speaker identification, user
interface, computer game, XNA
UDK: 004.934(043.2)
Abstract
In this diploma work, we describe modes of speech recognition, computer generated
speech and speaker identification. We also present a framework for the implementation of
a computer game. On the basis of these knowledges, we have develop a 3D computer
game, which can be managed through the keyboard or speech during the play. Our game is
desktop application, intended for users of the Windows operating systems. The game is
written in the C# programming language and in the XNA framework, which enables game
development and management.
VII
KAZALO VSEBINE
1 UVOD ............................................................................................................................ 1
2 GOVORNE TEHNOLOGIJE ....................................................................................... 3
2.1 Razpoznavanje govora ............................................................................................ 4
2.1.1 Klasifikacija modelov razpoznavanja .............................................................. 4
2.1.2 Algoritmi razpoznavanja govora ..................................................................... 5
2.2 Računalniško generiranje govora ............................................................................ 6
2.3 Identifikacija govorca ............................................................................................. 9
3 OBSTOJEČE TEHNOLOŠKE REŠITVE ZA PODPORO GOVORNIH
TEHNOLOGIJ .................................................................................................................... 10
3.1 Razpoznavanje govora .......................................................................................... 10
3.2 Računalniško generiranje govora .......................................................................... 11
3.3 Identifikacija govorca ........................................................................................... 12
4 ZASNOVA IN IMPLEMENTACIJA RAČUNALNIŠKE IGRE, KRMILJENE Z
GOVOROM ........................................................................................................................ 13
4.1 Primeri obstoječih iger z govornim uporabniškim vmesnikom ............................ 13
4.2 Pravila in potek igre, ki jo bomo realizirali .......................................................... 14
4.2.1 Pravila igre ..................................................................................................... 14
4.2.2 Potek igre ....................................................................................................... 15
4.3 Uporabniški vmesnik ............................................................................................ 16
4.4 Razpoznavanje govora .......................................................................................... 20
4.5 Generiranje govora ............................................................................................... 21
4.6 Virtualna 3D scena ................................................................................................ 21
5 ANALIZA REŠITVE .................................................................................................. 26
5.1 Primer poteka igre ................................................................................................. 26
5.1.1 Primer 1: Karta s številko 6 ........................................................................... 26
5.1.2 Primer 2: Karta s številko 3 ........................................................................... 26
5.1.3 Primer 3: Karta s podobo kralja ..................................................................... 26
5.1.4 Primer 4: Karta s podobo kraljice .................................................................. 27
5.1.5 Primer 5: Karta s številko 10 ......................................................................... 27
5.1.6 Primer 6: Karta s številko 7 ........................................................................... 27
5.1.7 Primer 7: Karta s številko 9 ........................................................................... 28
VIII
5.1.8 Primer 8: Karta As ......................................................................................... 28
5.2 Težave in prihodnje delo ....................................................................................... 28
6 ZAKLJUČEK .............................................................................................................. 30
7 LITERATURA ............................................................................................................ 31
IX
KAZALO SLIK
Slika 4.1: Začetna stran aplikacije ....................................................................................... 16
Slika 4.2: Dodajanje imen želenemu igralcu ter dodajanje poti do mape z glasbo ............. 16
Slika 4.3: Izgled igre ob pričetku igranja ............................................................................ 17
Slika 4.4: Prosti pogled ........................................................................................................ 19
Slika 4.5: Prosti pogled z druge strani prostora ................................................................... 19
Slika 4.6: Primer delovanja metode ("CreateLookAt") [30] ............................................... 22
Slika 4.7: Primer delovanja metode ("CreatePerspectiveFieldOfView") [31] .................... 23
X
Uporabljene kratice
2D – Two-Dimensional; dvodimenzionalen, dvorazsežen
3D – Three-Dimensional; tridimenzionalen
SR – Speech Recognition; razpoznavanje govora
ASR – Automatic Speech Recognition; samodejno razpoznavanje govora
SST – Speech-To-Text; govor v besedilo
TTS – Text-To-Speech; besedilo v govor
SLM – Statistical Language Model; statistični model jezika
C# - See Sharp; objektno orientiran programski jezik
DTW – Dynamic Time Warping; dinamično časovno krivljenje
WAV - Waveform Audio File Format; zvočni format za zajemanje in obdelavo zvoka
WMA – Windows Media Audio File; microsoftov format za zvočno datoteko
PCM – Pulse-Code Modulation; impulzno-kodna modulacija
.txt – Text file; tekstovna datoteka
.doc – Microsoft Word document; dokument v formatu Microsoft Word
.pdf – Portable Document Format; odprt standard za izmenjavo dokumentov
.htm – Hypertext Markup Language; označevalni jezik
.rtf – Rich Text Format; datoteka z obogatenim besedilom
1
1 UVOD
Napredovanju tehnologije v sodobnem času skoraj ni več mogoče slediti. Vedno več
vsakodnevnih opravil se seli na računalnike, npr. nakupovanje, prodajanje, oglaševanje,
prav tako pa tudi družabne igre. V diplomskem delu smo tako v obliki računalniške igre
implementirali med mladimi priljubljeno igro s kartami. Igro s 3D grafičnim uporabniškim
vmesnikom lahko upravljamo tudi z govorom, kar prinaša igri prednost, saj pri igranju ne
potrebujemo tipkovnice ali miške.
Predmet diplomskega dela je študija računalniškega razpoznavanja govora, s katerim bomo
upravljali aplikacijo – 3D igro s kartami. Glavni problem razpoznavanja je, da imajo
različni govorci precej različne glasove, poleg tega pa ima vsak govorec lahko poleg
svojega prepoznavnega glasu tudi karakterističen naglas, ki vpliva na trajanje izgovora
posameznih delov besede. Nekateri imajo trajno ali občasno tudi težave z govorom. V delu
se bomo dodobra seznanili s principi govorne komunikacije med uporabnikom in
računalnikom. Predvidena je tudi povratna govorna komunikacija, torej bo moral biti
program sposoben na podlagi prepoznanih besed predvajati ustrezne vnaprej posnete
zvočne datoteke.
Zanimale nas bodo morebitne odprtokodne in druge prosto dostopne implementacije
razpoznavanja. Seznanili se bomo tudi z drugimi primeri obstoječih iger, upravljanih z
govorom. Ker v teh in v podpornih knjižicah absolutno prevladuje razpoznavanje govora v
angleškem jeziku, se bomo v naši aplikaciji omejili na enostavno razpoznavanje nekaterih
angleških besed. Implementirali bomo namizno aplikacijo, kar pomeni, da bodo morali biti
med igranjem igre vsi igralci v bližini istega računalnika. Glas govorca mora biti dovolj
močan in razločen, da ga bo lahko sistem za razpoznavanje govora ob vseh šumih (glasba v
ozadju, medsebojna komunikacija drugih igralcev …) pravilno razpoznal. Za uspešen
potek igre potrebujemo mikrofon in zvočnike, predpostavljamo pa tudi, da vsi igralci
dovolj dobro in razločno izgovarjajo izbrane angleške besede.
Ob govornem uporabniškem vmesniku se bomo ukvarjali tudi s pripravo 3D modelov in
vizualizacijo 3D prostora. Pričakujemo, da bo izdelana aplikacija dejansko uporabna, saj je
v današnjem času bolj verjetno, da bo v prostoru kakšen računalnik, kakor da bomo imeli
pri sebi fizične karte.
2
Diplomska naloga sestoji iz šestih poglavij. Po tem uvodnem sledi poglavje 2, kjer so
opisane različne govorne tehnologije. Nadaljevali (poglavje 3) smo s pregledom rabe teh
govornih tehnologij v obstoječih aplikacijah. V poglavju 4 smo predstavili implementacijo
računalniške igre v orodju XNA, ki omogoča razvoj in upravljanje iger. XNA temelji na
ogrodju .NET, torej smo uporabili za implementacijo programski jezik C#. S poglavjem 5
in 6, smo podali končno analizo in zaključili diplomsko delo.
3
2 GOVORNE TEHNOLOGIJE
Razpoznavanje govora (angl. Speech Recognition; SR) predstavlja znotraj računalništva
prevod izgovorjenih besed v besedilo. Prav tako je znano kot samodejno razpoznavanje
govora (angl. Automatic Speech Recognition; ASR), računalniško razpoznavanje govora
(angl. Computer Speech Recognition; CSR) in razpoznavanje govora v tekst (angl. Speech-
To-Text; STT) [1].
Sistemi za razpoznavanje govora so lahko govorno neodvisni (angl. speaker independent
systems) ali govorno odvisni (angl. speaker dependent systems). Govorno odvisni sistemi
potrebujejo usposabljanje, kjer posamezni govorec bere dele besedila v sistem SR. Ti
sistemi analizirajo specifičen glas osebe in ga nato uporabijo za izpolnitev razpoznavanja
govora s strani te osebe, ki izhaja iz bolj natančne transkripcije. Govorno neodvisni sistemi
tega usposabljanja ne potrebujejo.
Zahtevki za razpoznavanje govora vključujejo glasovne uporabniške vmesnike, kot so
glasovno klicanje, preusmeritev klicev, preprost vnos podatkov (npr. vnos številke osebne
izkaznice), priprava strukturiranih dokumentov, obdelava govora v tekst (npr. pisanje e-
pošte), iskanje …
Razpoznavanje govorca (angl. speaker recognition) se nanaša na ugotovitev identitete
tistega, ki govori, in ne tega, kar govori. To se lahko uporablja za potrditev ali preverjanje
identitete govorca kot del varnostnega procesa, lahko pa tudi poenostavi naloge
razpoznavanja govora v sistemih, ki so bili usposobljeni za glasove določene osebe.
Generiranje govora se uporablja za pretvorbo govora iz teksta. Sistem (angl. Text-To-
Speech; TTS) vnaprej pripravljen tekst pretvori v računalniški govor. Tehnologija je
predvsem uporabna, kadar želimo vsebino teksta slišati namesto prebrati (branje e-pošte,
sporočil sms …).
4
2.1 Razpoznavanje govora
2.1.1 Klasifikacija modelov razpoznavanja
Naloga sistema za razpoznavanje govora je ugotoviti niz besed, ki so bile govorjene.
Sistem za takšno iskanje uporablja model razpoznavanja (angl. recognition model), ki
predstavlja nize vseh besed, ki jih govorec lahko izgovori, skupaj z njihovo izgovarjavo.
Rezultat tega je najbolje ujemajoč se niz besed. Da se ustvari model razpoznavanja,
potrebujemo akustični/zvočni model (angl. acoustic model), slovar (angl. dictionary) in
slovnična pravila (angl. grammar). V nadaljevanju bomo te tri komponente podrobneje
predstavili.
Akustični model predstavlja razpoznavalnikovo interno predstavitev izgovarjave
vsakega možnega fonema ali osnovnega glasu v jeziku. Akustični modeli so znotraj
trenutnih sistemov ustvarjeni s strani procesa usposabljanja. V sistem se običajno
vnese veliko primerov govorjenih stavkov in fraz z označbami izgovorjenih besed v
nizu [2].
Slovar predstavlja seznam besed in njihove izgovarjave. Nekatere besede imajo
več kot le eno možno izgovarjavo, predvsem zaradi regionalnih naglasnih
poudarkov, stilističnih variacij, hitrosti govora in drugih različnosti [2]. Slovar
lahko torej obsega raznolike vstope za besedo, ki združuje različne izgovarjave.
Slovnična pravila predstavljajo vse, kar govorec ali klicatelj sporoči sistemu in kar
je sistemu razumljivo. Vključujejo definicije možnih nizov besed, ki jih
razpoznavalnik razpozna, skupaj s pravili združevanja pomenov s temi nizi besed.
Različna slovnična pravila so lahko aktivna v različnih časovnih intervalih tekom
pogovora. Pomembno je razlikovati med dvema tipoma slovničnih pravil. Prvi tip
so temeljna slovnična pravila (angl. rule-based grammar), ustvarjena s pisanjem
zbirke eksplicitnih pravil, ki popolnoma opredeljujejo slovnična pravila. Drugi tip
predstavlja statistični model jezika (angl. Statistical Language Model; SLM),
statistična slovnična pravila, ki so oblikovana avtomatično preko primerov [2].
Za gradnjo takšnega statističnega modela je potrebno zbrati veliko govorov s strani
klicateljev ali govorcev in narediti prepis tega, kar je bilo govorjeno (zabeležiti
točni niz govorjenih besed). Potem se vsi ti podatki shranijo v sistem, ki oblikuje
slovnična pravila z izračunom verjetnosti pojava besed v nekem kontekstu.
5
Prednost statističnega modela jezika je v tem, da v splošnem omogoča večjo
fleksibilnost tega, kar je lahko izrečeno.
2.1.2 Algoritmi razpoznavanja govora
Moderni sistemi za razpoznavanje govora so v glavnem zasnovani na statistični osnovi.
Predvsem skriti model Markova [3] se danes pojavlja v veliko sistemih, medtem ko so v
preteklosti odigrali svojo vlogo tudi pristopi z dinamičnim časovnim krivljenjem [4] in z
nevronskimi mrežami [5].
Skriti model Markova
Skriti model Markova (angl. Hidden Markov Model; HMM) je statistični model Markova,
pri katerem je modelirani sistem domnevno proces Markova z neopaznimi (skritimi)
navedbami. Sodobni sistemi z namenom splošnega razpoznavanja govora pogosto
temeljijo na skritem modelu Markova. Znotraj razpoznavanja govora bi skriti model
Markova kot izhod oddal zaporedje vektorjev realnih vrednosti v n dimenzijah, ki jih
sistem zajema vsakih 10 milisekund. Na koncu bi vsaka beseda ali vsak fonem imel
drugačno izhodno distribucijo. Skriti model Markova za zaporedje besed ali fonemov je
narejen s povezovanjem individualnih usposobljenih skritih modelov Markova za
ločevanje besed in fonemov.
Pristop z dinamičnim časovnim krivljenjem
Dinamično časovno krivljenje (angl. Dynamic Time Warping; DTW) je pristop, ki je bil v
preteklosti uporabljen za razpoznavanje govora, vendar ga je sedaj v veliki meri izpodrinil
pristop s skritim modelom Markova. DTW je algoritem za merjenje podobnosti med
dvema zaporedjema, ki se lahko razlikujeta v času in hitrosti. Na splošno velja, da je to
metoda, ki v računalništvu omogoča najti optimalno ujemanje dveh navedenih sekvenc
(npr. časovne serije) z nekaterimi omejitvami.
Nevronske mreže
Nevronske mreže (angl. neural networks) so se pojavile kot privlačen pristop akustičnega
modeliranja v poznih 1980-ih. Od takrat se nevronske mreže uporabljajo v številnih vidikih
razpoznavanja govora, kot so klasifikacija (angl. phoneme classification), razpoznavanje
6
izoliranih besed (angl. isolated word recognition) in prilagoditev govorca (angl. speaker
adaptation).
Časovno-frekvenčne predstavitve govornih signalov
Pri prikazu časovno-frekvenčne predstavitve govornega signala (angl. time-frequency
representations of speech signals) pravzaprav rišemo graf funkcije časa in frekvence. Slika
oz. graf takšne predstavitve nam tako podaja informacijo o spremembah in velikosti
porazdelitve energije (odseka) signala v časovno-frekvenčnem prostoru. Na podlagi te
informacije lahko sklepamo o lastnostih obravnavanega signala.
Govorni signal je zelo težaven za časovno-frekvenčno analizo. Vsebuje tako izrazite
nestacionarnosti in kratke, hipne spremembe, kot tudi daljše stacionarne dele (npr. vokali).
Zaradi tega predstavlja velik izziv časovno-frekvenčnim predstavitvam [6].
2.2 Računalniško generiranje govora
Sinteza govora (angl. speech synthesis) je umetna produkcija človeškega govora.
Računalniški sistem za sintezo govora se krajše imenuje sintetizator govora in je lahko
implementiran v programski ali strojni opremi. Sistem za transformacijo teksta v govor
pretvarja vnaprej pripravljen tekst v govor [7]. V nadaljevanju bomo opisali postopek
delovanja pretvorbe besedila v govor.
Sistem TTS pretvarja besedilo v format impulzno-kodne modulacije PCM (angl. pulse-
code modulation) [8], ki je standardna oblika digitalnega zvoka v računalnikih, na
zgoščenkah, v digitalni telefoniji in drugih digitalnih avdio aplikacijah. Koraki TTS so:
Normalizacija besedila (angl. text normalization),
razločitev homografov (angl. homograph disambiguation),
izgovarjava besed (angl. word pronunciation),
prozodija (angl. prosody) in
združevanje segmentov valov (angl. concatenate wave segments) [9].
7
Normalizacija besedila
Normalizacija besedila je tisti del programa TTS, ki pretvori vsako vhodno besedilo v
serijo govorjenih besed. Na osnovni ravni normalizacija besedila pretvori niz, kot je »Moje
ime je Ritesh«, v serijo besed »Moje«, »ime«, »je« in Ritesh« skupaj z označevalcem, ki
kaže, da je prišlo do nekega »obdobja«, kot je pika ali vejica [9]. Zaplete se lahko, ko pride
normalizator besedila do vezav, kot so: »Marko Novak je vozil 55.5 kmh«, kjer pika ne
predstavlja konca stavka, ampak je niz pretvorjen v »petinpetdeset cela pet kilometrov na
uro«.
Proces normalizacije besedila poteka tako, da najprej normalizotor besedila izolira besede
v besedilu, nato pa normalizacija besedila poišče števila, datume, čase in druge
predstavitvene simbole. Simboli se pretvorijo v besede (primer je bil predstavljen za
kilometre na uro). Naslednje so razne okrajšave, kot so »cm« za merske enote, »ul« za
ulice itd. Normalizacija besedila lahko opravlja tudi druge besedilne transformacije, kot so
internetni naslovi, npr. »www.google.si« je običajno govorjen kot »w w w dot google dot
si«.
Razločitev homografov
Problem v tujih jezikih je ta, da imajo ogromno besed, ki imajo isti tekst, vendar različno
izgovarjavo. V slovenščini je skupna beseda »klop«, ki se lahko izgovori kot »klòp«
(majhen zajedavec na koži človeka) ali »klóp« (podolgovata lesena, kamnita s podstavki za
sedenje) . V angleščini je takšna beseda npr. »read«, ki je lahko izgovorjena kot »ri:d« ali
»red«, odvisno od pomena uporabljene besede.
Zanimivo je, kako računalnik zazna, kako izgovoriti »read«, torej ali kot »ri:d« ali »red«.
Eden od načinov je z ugotavljanjem, o čem tekst dejansko govori. Na podlagi konteksta se
nato odloči, kateri pomen je primernejši. Ko so homografi (so besede, ki so isto napisane
vendar imajo različen pomen) razčlenjeni, so besede poslane v naslednjo fazo izgovarjave.
Izgovarjava besed
Da pri procesu TTS dobimo izgovarjavo besed, se najprej pogleda v bazo, imenovano
leksikon izgovarjave. Če besede ni v leksikonu, potem se ves sistem povrne v sistem pravil
»črka v zvok«. Pri teh pravilih gre za izgovarjavo besede iz besedila in predstavljajo
inverzijo govornih pravil, ki smo se jih učili v šoli. Obstaja vrsta tehnik za ugotavljanje
izgovarjave, ampak algoritem, ki ga povzemamo tukaj, je eden najenostavnejših za
8
izvajanje. Ta algoritem je uporabljen za razčlenitev besede in ugotovitev, katero črko
izgovoriti s katerim zvokom [9].
Problem nastane pri izgovarjavi imen, ker le-ta ne izhajajo iz angleščine in imajo različna
pravila za izgovarjavo. Nekatera pravila »črka v zvok« (angl. letter-to-sound) najprej
ugotovijo, iz katerega jezika izhaja beseda, in potem uporabljajo različne vrste pravil
izgovarjave v drugih jezikih. Ko so izgovarjave ustvarjene, se prenesejo v proces
prozodije.
Prozodija
Po tem, ko imamo izgovarjavo besed, je potrebno urediti še govor v tonu, hitrosti glasu in
druge faktorje, ki so vključeni v govor. Za vse to poskrbi prozodija, ki je predstavljena kot
kvaliteta zvoka, hitrost in glasnost, s katerimi so zlogi, besede, fraze in stavki izgovorjeni.
Brez prozodije je besedilo, pretvorjeno v govor, slišano zelo robotsko.
Znotraj prozodije imamo nekaj splošnih tehnik. Sistem zazna začetek in konec stavkov. Pri
tem se glasnost in hitrost govora povečata, ko TTS začne s proizvajanjem govora, in se
zmanjšata pri zadnji besedi, preden se ustavi. Pavze so postavljene med stavki. Sistem prav
tako zazna meje med besednimi zvezami, le-te pa loči na samostalniške in glagolske
besedne zveze. Te bodo imele podobne karakteristike kot povedi, a bodo manj naglašene.
Algoritmi potem poskušajo določiti, katere besede v stavku so pomembne za pomen
celotnega stavka in te so poudarjene. Poudarjene besede so glasnejše, daljše in bodo imele
večje variacijo glasovnih vibracij.
Vse te informacije kvalitete, časa in glasnosti na ravni povedi, fraz in besed so združene,
da skupaj proizvedejo končni izhod. Ta izhod iz modula prozodije je samo seznam
fonemov z vsemi zgoraj navedenimi informacijami vsakega fonema posebej [9].
Združevanje segmentov valov
Celoten sistem TTS je pretvoril seznam fonemov in njihovo trajanje ter glasnost v digitalni
zvok. Metode izvedbe digitalnega zvoka se razlikujejo, vendar večina sistemov TTS
ustvarja zvok z združevanjem kratkih posnetkov fonemov. Posnetki pridejo od realne
osebe. V poenostavljeni obliki sistem prejme foneme za govor, povzame digitalni zvok iz
baze podatkov, dodela časovne spremembe in spremembe glasnosti ter vse to pošlje na
zvočno kartico.
9
2.3 Identifikacija govorca
Identifikacija govorca (angl. speaker identification) predstavlja prvo fazo v sicer
obsežnejšem procesu razpoznavanja govorca, ki samodejno razpoznava, kdo govori. Pri
identifikaciji govorca gre za sistem za ugotavljanje identitete neznanega govorca [10].
Deluje tako, da posname govor govorca in ga primerja z več predlogami. Predloga je lahko
glasovni odtis (angl. voice print) ali glasovni model (angl. voice model). Rezultat
predstavlja vsako ujemanje, ki zadosti vnaprej postavljenim kriterijem. Ta sistem je
predvsem uporaben v npr. forenzičnih aplikacijah, kjer želimo s postopkom identifikacije
dobiti seznam najboljših ujemanj in nato s postopkom preverjanja govorca poiskati
prepričljivo ujemanje.
Preverjanje ali verifikacija govorca (angl. speaker verification) je druga faza procesa
razpoznavanja govorca in ugotavlja dejansko identiteto govorca [10]. Sistem deluje tako,
da primerja v kakšnem odstotku se glas govorca ujema s predlogo. V primeru, da je ta
odstotek višji od podanega praga (angl. threshold), se identiteta potrdi. Visok prag
preprečuje sprejetje vsiljivcev (angl. impostors), vendar je tudi večja možnost, da zavrne
veljavnega uporabnika. V nasprotnem primeru tvegamo sprejemanje vsiljivcev in
povečamo sprejetje veljavnih uporabnikov.
Razlika med identifikacijo in preverjanjem govorca je v številu ujemanj. Pri identifikaciji
je možnih toliko rezultatov, kolikor je predlog, medtem ko sta pri verifikaciji samo dve
možnosti – sprejetje ali zavrnitev. Za vse rezultate, ki jih potrdimo z verifikacijo,
smatramo, da predstavljajo enega in istega govorca.
Poznamo dva tipa razpoznavanje govorca, tekstovno odvisno in tekstovno neodvisno
razpoznavanje. Pri prvem ne preverjamo samo, ali je govorec prava oseba, ampak
preverjamo tudi vsebino povedanega. V bistvu gre za kombinacijo razpoznavanja govorca
in razpoznavanja govora. Tekstovno neodvisne tehnologije ne primerjajo, kaj je bilo
povedano [11].
10
3 OBSTOJEČE TEHNOLOŠKE REŠITVE ZA PODPORO
GOVORNIH TEHNOLOGIJ
3.1 Razpoznavanje govora
Na spletu obstaja kar nekaj programov, ki nam omogočajo, da lahko igre ali aplikacije
upravljamo z govorom. Na voljo so tako za namizne kot tudi za spletne in mobilne
aplikacije. V nadaljevanju bomo opisali nekaj značilnih predstavnikov.
Tazti [12] – je program za razpoznavanje govora. Poenostavlja uporabo
računalnika, ker nam omogoča, da lahko s pomočjo govora upravljamo številne
funkcionalnosti, katere običajno upravljamo s tipkovnico. Uporabljamo ga lahko
za glasovno iskanje v internetnih iskalnikih, nadzor zaznamkov, računalniške igre
(navezovanje na tipko), itd.
Voice buddy [13] – lastnosti tega programa sovpadajo z lastnostmi z zgoraj
omenjenega programa, a Voice buddy dodatno omogoča še:
o funkcionalnost virtualnega inštruktorja,
o neposredni nivo prenosa (angl. instant level teleporter), itd.
e-Speaking – je enostaven program, ki nam omogoča, da lahko računalnik
upravljamo preko govora. Deluje na vseh operacijskih sistemih Windows (od
Windows XP dalje). Zelo zanimiva funkcionalnost je ta, da nam omogoča, da
lahko vsebino, ki jo želimo poslati preko e-pošte, narekujemo (ima opcijo, da nam
vsebino prebere). Dodatne prednosti in funkcionalnosti so [14]:
o brezplačen program,
o več kot 100 govornih ukazov je že vgrajenih (možnost spreminjanja,
dodajanja in odstranjevanja ukazov),
o temelji na tehnologijah.NET,
o enostavnost za uporabo, itd.
Voice Attack [15] – je program za razpoznavanje govora, ki nam omogoča
upravljanje aplikacij in iger. Dodamo lahko neomejeno število ukazov, kar nam
omogoča, da lahko imamo npr. za vsako igro svoj profil in ukaze.
11
S Voice [16] – je integrirana mobilna aplikacija. Podpira samo operacijski sistem
Android. Aplikacija nam omogoča različne funkcionalnosti (odštevalnik časa,
nastavitev budilke, odpiranje aplikacij, iskanje z googlom …).
3.2 Računalniško generiranje govora
Na spletu je kar nekaj programov, ki nam omogoča računalniško generiranje govora iz
besedila. Nekateri programi nam omogočajo samo branje besedila, medtem, ko druge
omogočajo pretvorbo besedila v zvočni format datoteke ali oboje. Računalniško
generiranje govora iz besedila nam omogočajo namizne, spletne in mobilne aplikacije.
Navedimo nekaj tovrstnih aplikacij.
Natural reader [17] – je spletna aplikacija, ki nam omogoča računalniško
generiranje govora iz besedila v več različnih jezikih z različnimi osebami. Za vsak
jezik imamo vsaj po en glas moškega in ženskega spola. Prav tako nam omogoča
tudi, da si lahko nastavimo hitrost branja besedila. Aplikacija ima omejitev dolžine
besedila na 200 znakov.
Text-To-Speech.ImTranslator [18] – je prav tako spletna aplikacija, ki nam
omogoča branje besedila. Ima podporo več jezikov, nastavitev hitrosti branja
besedila in dodatne funkcionalnosti:
o kopiraj, prilepi, odreži in odstrani besedilo,
o povečava črk besedila in
o pisanje besedila preko zaslonske tipkovnice.
Text 2 Speech [19] – je kompleksna namizna aplikacija, ki nam omogoča
generiranje govora iz različnih tekstovnih datotek (.txt, .doc, .pdf, .htm in .rtf).
Poleg branja tekstovnih datotek nam omogoča, da lahko pretvorimo govor v zvočno
datoteko, ki jo lahko nato predvajamo.
Panopreter [20] – je namizna aplikacija, ki nam omogoča generiranje govora iz
besedila ter shranjevanje v datoteko v izbranem zvočnem formatu. Ima možnost
namestitve vtičnika za brskalnik Internet Explorer in aplikacijo Microsoft Office
12
Word. Vtičnika lahko generirata govor iz besedila in ga predvajata ali shranita v
zvočno datoteko.
3.3 Identifikacija govorca
Za identifikacijo govorca je na spletu ogromno ponudnikov, ki nam omogočajo, da lahko
njihov program uporabljamo na različnih napravah z istimi govornimi ukazi, uporabimo
identifikacijo za uporabo različnih aplikacij, prijav v sistem, itd.
Kivox 360 – je strežnik za identifikacijo, ki ponuja najnaprednejše zmožnosti za
identifikacijo govorca. Le-to omogoča na mobilnih, spletnih in namiznih
aplikacijah. Program za razpoznavanje govorca je optimizirana tako, da z izbranim
geslom kreira edinstveni glasovni odtis, ki se ga lahko potem uporablja za
preverjanje pristnosti v vsakem kanalu (mobilna, spletna, namizna aplikacija) [21].
RecoMadeEasy – je sistem za razpoznavanje govorca, ki je sposoben delovati na
več načinov [22]:
o identifikacija govorca,
o preverjanje govorca itd.
Sistem deluje na način tekstovno neodvisnega (smo omenili v poglavju 2.3)
razpoznavanja govorca. Deluje na operacijskih sistemih Windows, Linux in Apple
Macintosh OS X.
SESTEK Vocal Passphrase – je biometrični sistem za razpoznavanje govorca in
odgovarja na varnostne potrebe institucij z zagotavljanjem visoke ravni varnostnih
ukrepov in zmanjšanjem stroškov klicnega centra. Program zagotavlja varno in
učinkovito metodo za preverjanje identitete govorca, medtem ko preverja zlorabe in
kraje identitete. Temelji na tehnologiji potrjevanja in identifikacije govorca. Ta
sistem je uporaben za klicne centre, kjer klicatelj varno dostopa do klicnih centrov
z uporabo glasovnega odtisa namesto uporabe konvencionalnih varnostnih ukrepov,
kot so kode PIN, gesla ali varnostna vprašanja [23].
13
4 ZASNOVA IN IMPLEMENTACIJA RAČUNALNIŠKE IGRE,
KRMILJENE Z GOVOROM
Igra »The Game« je zabavna in enostavna igra s kartami. Vse kar potrebujemo za igro so
karte, pijača in najmanj dva igralca. Igra poteka v smeri urinega kazalca, prične jo poljubni
igralec. Pred začetkom igre se določi, koliko požirkov mora vsak igralec popiti v primeru,
da ga doleti kazen (število požirkov se lahko tekom igre spreminja, odvisno od karte). Igra
poteka tako, da igralec, ki je na vrsti, obrne karto (karte so na začetku zložene ena na drugi
s hrbtno stranjo navzgor) in prične z nalogo, ki velja za obrnjeno karto. Vsaka karta ima
svoj pomen (nalogo, ki bo kasneje podrobneje opisana). Med igro moramo ves čas skrbeti,
da imamo pijačo v kozarcu. Igra se zaključi, ko so vse karte obrnjene.
4.1 Primeri obstoječih iger z govornim uporabniškim vmesnikom
Glasovno ukazovanje se uporablja v veliko igrah. Ena izmed teh iger je »Tom Clancy's
EndWar« [24]. Sodi med strateške igre, saj se v njej med seboj bojujejo različne vojske.
Upravljamo jo lahko v celoti z govornimi ukazi, kjer lahko ukazujemo, kam se morajo
enote premakniti (»Unit 1 move to …«), kdaj morajo napasti (»Unit 1 attack«) itd. Pri sami
igri lahko branimo določeno mesto ali pa moramo osvajati točke.
Zanimiva je tudi igra »Odama« [25], ki se igra kot fliper. Naloga igralca je, da prenese
velik zvon skozi vrata nasprotnika, medtem pa strelja ogromno kroglo ter uničuje
nasprotnika. V pomoč so mu tudi vojaki, ki jih lahko upravlja s pomočjo govornih ukazov,
kot so napad (»press forward«), polnjenje (»charge«) itd.
Primeri iger, ki vsebujejo govorni uporabniški vmesnik, so tudi:
Hey You, Pikachu! [26],
Lifeline [27] in
Seaman [28].
14
4.2 Pravila in potek igre, ki jo bomo realizirali
4.2.1 Pravila igre
Vsaka karta, ki jo igralec obrne, ima svoj pomen. V nadaljevanju bomo opisali pravila igre.
As – igra imenovana slap. Vsi igralci začnejo piti istočasno. Vsak igralec lahko
odloži kozarec šele, ko ga odloži njegov predhodnik. Prvi, ki lahko odloži kozarec,
je tisti, ki je vlekel karto, in za njim vsi ostali v smeri urinega kazalca. V primeru,
da katerikoli igralec predčasno izprazni kozarec, se igra takoj zaključi.
Številka 2 – poljubno razdelite dva požirka.
Številka 3 – poljubno razdelite tri požirke.
Številka 4 – igralec, ki se zadnji prime za nos, spije požirek.
Številka 5 – igralec, ki se zadnji prime za uho, spije požirek.
Številka 6 – igra imenovana »bum«. Igralec si izbere dve števili med 2 in vključno
9. Igra poteka v smeri urinega kazalca in se začne pri igralcu, ki je vlekel karto.
Štetje se prične s številko 1 in nato vsak naslednik pove naslednjo zaporedno
številko. Pri tem mora vsak igralec paziti, da namesto števila, ki ga je prvi igralec
izbral ter vsakega večkratnika tega števila, izgovori »bum«. Igralec, ki se zmoti,
spije požirek.
Številka 7 – igra imenovana »države«. Igralec, ki vleče karto, izgovori prvo črko
poljubne države in nato mu sledijo vsi v smeri urinega kazalca. Igralec, ki se zmoti
pri črkovanju države, spije požirek. V primeru, da igralec, ki je na vrsti, ne ve
naslednje črke države, lahko predhodnika vpraša, katero državo je imel v mislih. Če
mu ta pravilno odgovori, spije požirek igralec, ki je vprašal, v nasprotnem primeru
pa spije požirek predhodnik. Če pride igra do konca, prav tako spije požirek igralec,
ki zaključi celotno ime države. Države se v eni igri (52 kart) ne smejo ponavljati.
Številka 8 – igra imenovana »pojmi«. Igralec, ki vleče karto, izgovori prvo črko
poljubnega pojma in nato mu sledijo vsi v smeri urinega kazalca. Veljajo ista
pravila, kot so opisana pri številki 7 (»države«).
Številka 9 – »novo pravilo«. Igralec, ki je vlekel karto, si izmisli novo pravilo, ki
velja do naslednjega novega pravila.
15
Številka 10 – karta, ki dovoljuje, da lahko igralec med igro gre na stranišče. Če gre
igralec na stranišče in nima te karte, mu lahko drugi igralci v tem času določijo
kazen.
Fant – igralec, ki se zadnji prime za čelo, spije požirek.
Kraljica – »skrito vprašanje«. Igralec, ki je vlekel karto kraljice, jo postavi na stran
s hrbtno stranjo navzgor ter si lahko v času igre izmisli vprašanje in ga zastavi
poljubnemu igralcu. Če mu ta igralec odgovori na vprašanje, spije požirek vprašani
igralec, v primeru, da mu vprašani igralec kot odgovor poda samo besedo »skrito
vprašanje«, spije požirek igralec, ki je vprašal.
Kralj – igralec, ki vleče karto kralja, jo postavi na stran s pravilno stranjo navzgor.
Za vsakega kralja mora igralec, ki je na vrsti, popiti toliko požirkov, kolikor je
kraljev obrnjenih. Tisti igralec, ki vleče zadnjega kralja, mora popiti celoten
kozarec.
V času igre ne sme noben igralec zapustiti igre brez, da bi imel karto, ki mu to dovoljuje.
Zgoraj opisana pravila veljajo za pravilo enega požirka, to pravilo se lahko spremeni pred
začetkom igre.
4.2.2 Potek igre
Igra, ki smo bomo realizirali, je enostavna za igranje. Potrebujemo računalnik z nameščeno
igro, mikrofon, zvočnike, igralce (največ šest igralcev) ter pijačo. Pred začetkom igre se
morajo igralci dogovoriti, ali velja pravilo enega požirka ob vsaki kazni ali več. Ob zagonu
igre vnesemo imena igralcev in nato lahko pričnemo z igro. Če želimo ob igranju poslušati
svojo glasbo, moramo pri postopku za vnos igralcev vnesti tudi pot do mape z glasbo.
Aplikacija naključno izbere, kateri igralec prične z igro, premeša igralne karte ter sproti
prikazuje, katera karta je bila obrnjena in kateri igralec je na vrsti. Vsak igralec, ki je na
vrsti, mora preko govora obrniti karto. V primeru, da se med igranjem posluša glasba, se ta
ob začetku razlage pravila prekine. Prav tako lahko z govorom v celoti upravljamo glasbo
(prestavimo na naslednjo ali predhodno skladbo, jo ustavimo, itd.).
Igra se konča, ko so vse karte obrnjene. Pravila, ki so bila uporabljena v prejšnji igri, v
novi igri ne veljajo več.
16
4.3 Uporabniški vmesnik
Slika 4.1 prikazuje začetno stran aplikacije, kjer se besedilu navaja v angleškem jeziku
zato, ker imamo razpoznavanje govora v angleškem jeziku. Če kliknemo z miško na gumb
»New game« ali izgovorimo »new game«, nas aplikacija privede do naslednjega koraka,
kjer moramo vnesti imena igralcev ter pot do glasbe, če želimo med igranjem poslušati
glasbo preko aplikacije.
Slika 4.1: Začetna stran aplikacije
V tem delu menuja (Slika 4.2) imamo tri dodatne gumbe, ki jih lahko uporabljamo s
pomočjo miške ali govora. V primeru, da uporabimo gumb »Back«, nas aplikacija prestavi
nazaj v začetni menu. Z gumbom »Clear fields« nam aplikacija počisti vsa polja z imeni. Z
gumbom »Play« pa pričnemo z igro. Govorne ukaze, ki jih potrebujemo za upravljanje
menuja, bomo predstavili kasneje.
Slika 4.2: Dodajanje imen želenemu igralcu ter dodajanje poti do mape z glasbo
17
Slika 4.3: Izgled igre ob pričetku igranja
Slika 4.3 prikazuje uporabniški vmesnik v času igranja. V desnem spodnjem kotu vidimo
ime igralca, ki prične z igro, ter hrbtno stran karte (prikazan je začetek igre, ko se ni
obrnila še nobena karta). Katerega risanega junaka uporablja trenutni igralec, lahko vidimo
s pomočjo puščice, ki se prikaže nad risanim junakom.
Sedaj lahko pričnemo z igranjem igre. V primeru, da smo nastavili pot do mape z glasbo,
se nam glasba predvaja v ozadju. V nadaljevanju bomo prikazali več primerov
manipulacije z glasbo.
Karto lahko obrnemo s pomočjo govora ali s pritiskom črke »Y«. Z uporabo govora lahko
karto obrnemo na tri načine:
»card«;
»a card«;
»next«.
Ko se karta obrne, se začne predvajati zvočni posnetek s pravilom (v primeru, da se v
ozadju predvaja glasba, se ta postavi na premor) za obrnjeno karto. Istočasno, ko se obrne
karta, se v spodnjem desnem delu zaslona prikaže obrnjena karta, izpiše se ime novega
igralca, puščica pa se prestavi na novega risanega junaka, ki je na vrsti.
18
Med igranjem igre se lahko prostovoljno premikamo s kamero po 3D prostoru. Za
premikanje kamere moramo uporabiti tipkovnico in sicer:
»w« - kamero premikamo navzgor nad 3D modele. Premikamo jo lahko, dokler
nismo pravokotno nad mizo;
»s« - kamero premikamo navzdol. Premikamo jo lahko, dokler nismo vodoravno s
tlemi;
»a« - kamero premikamo levo okrog 3D prostora za 360 stopinj;
»d« - kamero premikamo desno okrog 3D prostora za 360 stopinj;
»e« - kamero približujemo proti notranjosti mize (v središče dogajanja);
»q« - kamero oddaljujemo od notranjosti mize (od središča dogajanja).
Predhodno smo že omenili, da lahko med samim igranjem manipuliramo z glasbo.
Manipuliramo jo lahko s pomočjo tipkovnice ali govora. V nadaljevanju bomo predstavili
načine manipuliranja z glasbo. Za vsako operacijo podajamo vrstni red (številka na
numerični tipkovnici, črka ter besede, ki jih izgovorimo).
»8«, »Z«, »play music/song« - začnemo predvajati glasbo, ki je trenutno na
seznamu oz. nadaljujemo v primeru, če je glasba na premoru;
»2«, »N«, »stop music/song« - ustavimo predvajanje glasbe;
»4«, »G«, »previous music/song« - izberemo predhodno glasbo. V primeru, da smo
trenutno pri prvi glasbi na seznamu, se prestavimo na zadnjo glasbo s seznama;
»6«, »J«, »next music/song« - izberemo naslednjo glasbo. V primeru, da smo
trenutno pri zadnji glasbi na seznamu, se prestavimo na prvo glasbo s seznama;
»5«, »H«, »pause music/song ali resume music/song« - trenutno predvajano glasbo
damo na premor. V primeru, da je trenutna predvajana glasba na premoru,
nadaljujemo z nazadnje predvajano glasbo;
»7«, »T«, »first music/song« - izberemo glasbo, ki je prva na seznamu predvajanj;
»9«, »U«, »last music/song« - izberemo glasbo, ki je zadnja na seznamu
predvajanj;
»1«, »B«, »shuffle music/song« - želimo ali ne želimo, da se glasba vrti naključno;
»3«, »M«, »repeat music/song« - želimo ali ne želimo, da se glasba ponavlja;
»+«, »O«, »volume up« - povečamo glasnost za 10%;
»-», »I«, »volume down« - zmanjšamo glasnost za 10%;
19
»0«, »,«, »mute music/song ali unmute music/song« - utišamo glasbo ali pa jo
povrnemo na stanje pred utišanjem.
Slika 4.4: Prosti pogled
Slika 4.5: Prosti pogled z druge strani prostora
20
Slika 4.4 in Slika 4.5 prikazujeta prosti pogled 3D prostora brez figur (risani junaki na
stolih) in pijače ter kart na mizi.
Ko se igra zaključi, se ne zgodi nič. Vse ostane tako kot je, a če želimo pa lahko odpremo
menu in ponovimo postopek, ki smo ga predhodno že opisali.
V menuju imamo poleg nove igre (angl. new game) še možnosti, kot sta prosti pogled
(angl. free view) ter izhod iz aplikacije (angl. quit). V primeru, da kliknemo prosti pogled,
se lahko prosto premikamo s kamero po 3D prostoru. Pri tem načinu so vidni vsi 3D
modeli, razen risanih junakov, kart, pijače, puščice nad risanim junakom ter okenca v
spodnjem desnem delu zaslona. Prav tako lahko ti dve funkcionalnosti upravljamo tudi
preko govora. V nadaljevanju bomo opisali, katere govorne ukaze imamo vnaprej
pripravljene za upravljanje menuja:
»main menu« - odpre glavni menu;
»hide« ali »hide main menu« - zapre glavni menu;
»new game« - odpre naslednji korak menuja, kjer lahko vnesemo podatke o igralcih
ter pot do mape s skladbami;
»back« - v primeru, da smo na koraku za vnos igralcev, se prikaže glavni menu;
»clear« ali »clear fields« - v koraku za dodajanje igralcev počisti vsa polja z imeni;
»play« ali »start« - v koraku za dodajanje igralcev ob tem ukazu pričnemo z igro;
»free« ali »free view« - če smo v glavnem menuju, preidemo v prosti pogled v 3D
prostoru;
»quit« - zapre aplikacijo.
4.4 Razpoznavanje govora
Za razpoznavanje govora smo uporabili Microsoftove knjižice »SpeechRecognizer«,
»GrammarBuilder«, »Grammar« in »Choices«. Ob zagonu igre smo najprej inicializirali
objekte.
this.speechRecognizer = new SpeechRecognizer();
this.grammarBuilder = new GrammarBuilder();
this.choices = new Choices();
21
V naslednjem koraku smo morali najprej pripraviti seznam besed, ki jih bo razpoznavalnik
govora razpoznaval.
this.choices.Add(new string[] { "main menu", "new game", "card", …});
Ko smo ustvarili seznam besed za razpoznavanje, smo ta seznam dodali v objekt za
slovnična pravila in nato smo slovnična pravila naložili v razpoznavalnik govora. Ko
razpoznavalnik govora zazna, da je govorec izrekel besedo, ki je shranjena v slovničnih
pravilih, kliče metodo »speechRecognizer_SpeechRecognized«, kjer za vsako izgovorjeno
besedo izvedemo ukaz, ki smo ga vnaprej implementirali.
this.grammarBuilder.Append(this.choices);
this.grammar = new Grammar(this.grammarBuilder);
this.speechRecognizer.LoadGrammar(this.grammar);
this.speechRecognizer.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(speechRecognizer_SpeechRecognized);
4.5 Generiranje govora
V igri nismo uporabili nobenega generiranja TTS, ampak smo uporabili zvočne datoteke
formata WAV, ki smo jih vnaprej posneli. Zvok govorca smo najprej posneli z uporabo
programa snemalnik zvoka (angl. sound recorder), ki ga najdemo na operacijskem sistemu
Windows. Omenjeni program nam omogoča, da lahko shranimo govor samo v formatu
WMA. Ta format smo nato pretvorili v format WAV preko spletne aplikacije, ki nam
omogoča brezplačno pretvarjanje različnih formatov (avdio, video, dokumenti, slike itd.)
[29]. Zvočne datoteke predvajamo za razložitev pravila posamezne karte.
4.6 Virtualna 3D scena
Ko smo začeli z implementacijo igre, smo morali najprej naložiti 3D model v objekt
razreda »Model«.
22
private Model table;
this.table = this.Content.Load<Model>("Models/Table/Table/Table");
V naslednjem koraku smo nastavili vrednosti za postavitev kamere ter 3D modela (prvi
model, ki smo ga prikazali na zaslonu, je bila miza). Za postavitev kamere in mize smo
uporabili 3D vektor.
this.tablePosition = new Vector3(50.0f, -50.0f, 0.0f);
this.cameraPosition = new Vector3(0.0f, -500.0f, 800.0f);
Za prikaz modela v 3D prostoru smo morali preračunati vrednosti za matriko prostora in
matriko projekcije. Za matriko pogleda smo uporabili metodo »CreateLookAt«, ki se
uporablja za postavitev in orientacijo kamere [30]. Za matriki projekcije smo uporabili
»CreatePerspectiveFieldOfView«, ki se uporablja za nastavitev vidnega kota in prednjo ter
zadnjo ravnino obrezovanja (velikost prostora) [31].
this.view = Matrix.CreateLookAt(this.cameraPosition, Vector3.Zero, Vector3.Up);
this.projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4,
this.graphics.GraphicsDevice.Viewport.AspectRatio, 1.0f, 10000.0f);
Slika 4.6: Primer delovanja metode ("CreateLookAt") [30]
Metoda »CreateLookAt« (Slika 4.6) se uporablja za postavitev kamere in določitev smeri,
kamor želimo gledati. Slika nam prikazuje oko »Eye«, od koder gledamo in kam gledamo
»Target point«, linijo pogleda »Line of sight« ter vektor, ki kaže od kamere navzgor »up
vector«.
23
Slika 4.7: Primer delovanja metode ("CreatePerspectiveFieldOfView") [31]
Z uporabo metode »CreatePerspectiveFieldOfView« (Slika 4.7) nastavimo velikost
virtualnega prostora oziroma vidnega polja kamere. Velikost prostora je odvisna od
vidnega polja pod kotom »Field of view Angle«, prednje ravnine »Near Clip Plane« in
zadnje ravnine »Far Clip Plane« obrezovanja ter višine »Hight – Aspect Ratio«. Dolžino
»Width« dobimo na podlagi ostalih podatkov.
Ko smo imeli osnovne objekte pripravljene, smo 3D model prikazali na zaslonu.
this.modelMesh = this.table.Meshes[1];
foreach (BasicEffect basicEffect in this.modelMesh.Effects)
{
this.boundingSphere = this.modelMesh.BoundingSphere;
this.objectCenter = new Vector3(this.boundingSphere.Center.X,
this.boundingSphere.Center.Y, this.boundingSphere.Center.Z);
this.transformation = Matrix.CreateTranslation(-this.objectCenter) *
Matrix.CreateScale(0.3f) * Matrix.CreateTranslation(this.tablePosition) *
Matrix.CreateRotationZ(MathHelper.ToRadians(this.angleX));
basicEffect.World = this.transformation;
basicEffect.View = this.view;
basicEffect.Projection = this.projection;
}
this.modelMesh.Draw();
Najprej smo v objekt razreda »ModelMesh« shranili mrežo (angl. mesh) 3D modela. Z
zanko smo šli skozi efekte modela, ki smo jih shranili v objekt razreda »BasicEffect«. Prvi
korak, ki smo ga morali narediti, je, da smo dobili velikost sfere »BoundingSphere« 3D
modela, da smo lahko na podlagi teh podatkov izračunali, za koliko moramo premakniti
24
objekt v negativno smer, da bomo dobili težišče na sredini 3D modela (potrebujemo, da
lahko rotiramo 3D model okrog njegove osi). Pri preračunavanju podatkov za postavitev
3D modela v matriko sveta smo 3D model najprej preusmerili s »CreateTranslation« v
negativno smer, nato smo ga pomanjšali s »CreateScale«, ga ponovno preusmerili v
prvotno pozicijo ter na koncu še zavrteli okrog osi z s »CreateRotationZ«. Razred
»BasicEffect« vsebuje osnovne efekte za prikaz modela na zaslon. Ko smo imeli vse to
preračunano, smo model še izrisali na zaslon z ukazom »Draw«.
Vse modele smo nato naložili na takšen način. Da smo imeli boljši nadzor nad postavitvijo
modelov na pravilna mesta, smo morali ustvariti premikanje kamere. Implementacija
spodaj prikazuje primer premikanja kamere navzgor. Kamera se premika po poti v obliki
sfere okrog mize.
this.angle = this.function.GetAngle(this.cameraPosition, this.tablePosition);
if (!this.lockCameraUp)
{
this.cameraPosition = Vector3.Transform(this.cameraPosition,
Matrix.CreateRotationX(MathHelper.ToRadians(-this.angleY)));
if (angle >= 89.0f)
{
this.lockCameraUp = true;
}
}
Najprej smo morali izračunati trenutni kot med postavitvijo kamere in mize. Ko smo
pridobili kot, smo izračunali novo postavitev kamere s »Transform«. Na koncu smo vedno
preverjali, ali smo s postavitvijo kamere pravokotno nad mizo. Če smo bili, nismo več
dovolili premika kamere v tej smeri (navzgor).
Vsi 3D modeli, ki smo jih pridobili, so že v osnovi imeli prilepljene teksture. To pomeni,
da je imel vsak model nastavljeno absolutno pot do slike, kar nas je oviralo pri mobilnosti
aplikacije. S pomočjo programa »3DS Max«, smo te teksture odstranili s 3D modelov in
smo jih nato programsko dodali nazaj.
((BasicEffect)this.table.Meshes[1].Effects[0]).TextureEnabled = true;
((BasicEffect)this.table.Meshes[1].Effects[0]).Texture = this.tableTextures;
25
Nekateri modeli so imeli že v osnovi dodano osvetlitev, spet drugi pa tega niso imeli.
Modele, ki so imeli šibkejšo osvetlitev ali pa le-te niso imeli, smo programsko osvetlili.
Da smo lahko ročno nastavili osvetlitev na model, smo jo morali omogočiti.
basicEffect.LightingEnabled = true;
Za nekatere modele smo uporabili osvetlitev »EmissiveColor«. To pomeni, da smo
osvetlili barve, ki jih uporablja objekt.
basicEffect.EmissiveColor = new Vector3(1.0f, 1.0f, 1.0f);
Večinoma smo uporabljali privzeto osvetljevanje objektov, ki je zadostovalo za želeni
končni izgled.
basicEffect.EnableDefaultLighting();
26
5 ANALIZA REŠITVE
5.1 Primer poteka igre
Potek igre je zelo enostaven. Ko pričnemo z igro in obrnemo prvo karto, bodisi preko
tipkovnice ali govornega ukaza, nam zvočni posnetek razloži pravilo igre.
5.1.1 Primer 1: Karta s številko 6
Karta predstavlja igro »boom«. Igralec, ki je obrnil karto, si izmisli dve števili med
številko 2 in vključno 9. Ti dve števili pove na glas (npr. izbral si je števili 3 in 5) in prične
s štetjem s številko 1. Igralec, ki je za njim, mora na glas povedati število 2, tretji igralec
mora namesto števila 3 na glas reči »bum« (ker je prvi igralec izbral števili 3 in 5), četrti
igralec pove 4, peti igralec mora ponovno reči »bum«, tudi šesti igralec mora izreči »bum«
(ker je 6 večkratnik števila 3), itd. Igra poteka tako dolgo, dokler se prvi igralec ne zmoti,
bodisi z napačno zaporedno številko ali pa, ker ni rekel »bum«.
Primer zaporedja izgovorjenih besed za kombinacijo števil 3 in 5 je:
1, 2, »bum«, 4, »bum«, »bum«, 7, 8, »bum«, »bum«, 11, itd.
5.1.2 Primer 2: Karta s številko 3
Igralec, ki je vlekel to karto, lahko poljubno razdeli 3 požirke med ostale igralec. Enemu
igralcu lahko podari vse 3 požirke, enemu 2 požirka, spet drugemu enega ali vsakemu po
enega. Ob tem lahko požirek spije tudi sam.
5.1.3 Primer 3: Karta s podobo kralja
Vsak igralec, ki vleče karto, jo mora postaviti na stran (s pravilno stranjo navzgor). Tisti, ki
vleče zadnjega, četrtega kralja, mora popiti celoten kozarec.
27
5.1.4 Primer 4: Karta s podobo kraljice
Igralec, ki je vlekel karto s podobo kraljice, mora to karto pokazati vsem igralcem ter jo
nato postaviti na stran s hrbtno stranjo navzgor. To karto lahko igralec unovči v času iste
igre. Unovči jo lahko tako, da v času igranja poljubnega igralca vpraša, karkoli mu pride na
misel. Če mu vprašani igralec kakorkoli odgovori na podano vprašanje, mora vprašani
igralec popiti požirek oz. toliko, kolikor so se dogovorili pred začetkom igre. V primeru, da
mu vprašani igralec odgovori z besedo »skrito vprašanje«, pije igralec, ki je vprašal. Ko je
igralec karto unovčil, jo mora postaviti na kup, kjer so karte že obrnjene.
5.1.5 Primer 5: Karta s številko 10
V času igranja ne sme nihče od igralcev oditi na stranišče ali kamorkoli drugam. V
primeru, da igralec vleče karto s številko 10, mu je to dovoljeno. Če igralec odide od igre
brez te karte, mu lahko ostali igralci v času njegove odsotnosti pripravijo kakšno koli
kazen, ki jo mora igralec ob vrnitvi izvesti.
5.1.6 Primer 6: Karta s številko 7
Igralec, ki vleče to karto, si izmisli prvo črko poljubne države. Igralci za njim v smeri
urinega kazalca nadaljujejo s črkovanjem imena države.
Primeri igre:
Igralec si izmisli prvo črko Č (v mislih je imel Češka), drugi igralec izgovori črko I (drugi
igralec je imel v mislih državo Čile), tretji igralec izgovori L, četrti igralec izgovori E. Ker
se tukaj črkovanje za državo konča, mora požirek narediti četrti igralec, ker je povedal
zadnjo črko države. V primeru, da se kateri koli igralec, ki je na vrsti, zmoti pri črkovanju
(npr. imamo vrstni red ČI in reče tretji igralec D, mora četrti igralec povedati tretjemu, da
se je zmotil pri črkovanju in nato pije tretji igralec. Če v istem primeru z zaporedjem ČID,
četrti igralec pove naslednjo črko, je s tem rešil tretjega igralca in mora upati, da peti
igralec tega ne opazi), sicer mora četrti popiti požirek. Vsak igralec, ki ne bi vedel
naslednje zaporedne črke države, lahko vpraša predhodnika, katero državo je imel v mislih,
in če mu ta odgovori pravilno, spije požirek igralec, ki je vprašal, v nasprotnem primeru
28
spije požirek predhodnik (ni vedel države). Isto pravilo velja tudi za karto s številko 8 –
»pojmi«.
5.1.7 Primer 7: Karta s številko 9
Igralec, ki vleče to karto, si lahko izmisli kakršno koli novo pravilo, ki velja do naslednjega
novega pravila.
Primer:
Igralec si izmisli, da mora vsak igralec (razen njega), preden vleče karto, izgovoriti »ta igra
je zakon« in da tisti, ki to pozabi povedati, dobi določeno kazen.
5.1.8 Primer 8: Karta As
Vsi igralci začnejo istočasno piti. Prvi, ki lahko odloži kozarec, je tisti igralec, ki je vlekel
to karto. Torej vsi igralci morajo piti tako dolgo, dokler njihov predhodnik ne preneha piti.
V primeru, da nekdo predčasno spije celoten kozarec, se igra razveljavi in lahko vsi igralci
istočasno prenehajo s pitjem.
5.2 Težave in prihodnje delo
Med implementacijo smo naleteli na kar nekaj težav, ki smo jih morali razrešiti. Prva večja
težava je bila interaktivno rotacija modela okrog njegove osi (rotacija modela na mestu,
okrog njegovega središča), katero smo rešili s sfero modela »BoundingSphere«. Ko smo
dodali mizo v prostor in nato želeli prikazati karte na mizi, smo imeli problem, da karte
niso bile na istih koordinatah kot miza. Kasneje smo to rešili z natančnejšim izračunom ter
pravilnim vrstnim redom prikazovanja modelov na zaslon. Prej ko slej se je pojavila tudi
težava s prenosljivostjo aplikacije (prenos na drugi računalnik), ker so imeli 3D modeli
prilepljene teksture znotraj modela. To smo odpravili tako, da smo z zgoraj omenjenima
programoma odstranili teksture iz modela ter jih ponovno prilepili s programsko kodo.
Zaradi vse večje razširjenosti (dodajanja več različnih objektov, kot so radiatorji, rože,
29
pijače itd) in želje po več funkcionalnostih aplikacije, smo imeli težave z vrstnim redom
dogodkov. Te težave smo odpravili s sprotnim testiranjem aplikacije. Nekaj težav smo
imeli tudi pri obračanju kart, ker smo morali paziti, da se karta ne obrne prehitro. Na koncu
smo naredili kar se da realistično obračanje kart.
V prihodnje se planira to aplikacijo razširiti na podporo razpoznavanja govora v različnih
jezikih, animacijo modelov (modeli v pravi človeški obliki in ne risani junaki) ter
sodobnejši uporabniški vmesnik. Prav tako je želja tudi po tem, da bi aplikacija imela
podporo delovanja na več sistemih (mobilnih in tudi Mac OS). V mislih imamo tudi, da bi
se aplikacija razširila tako daleč, da ne bi več potrebovali tipkovnice in miške ter, da bi
lahko vsak igral igro od doma.
30
6 ZAKLJUČEK
V diplomskem delu smo si ogledali, na kakšen način delujejo razpoznavanje govora,
računalniško generiranje govora, identifikacija govora ter ogrodje XNA, s pomočjo
katerega smo razvili 3D računalniško igro.
Uspešno smo izdelali 3D računalniško igro, ki jo lahko upravljamo z govorom in tako v
večini ne potrebujemo tipkovnice in miške. Med samo implementacijo smo se izpopolnili
na področjih razpoznavanja govora, prikaza in manipulacije 3D modelov v prostoru,
ogrodja XNA ter predvajanja zvočnih posnetkov. Med implementacijo smo upoštevali
pravila za razvoj iger v ogrodju XNA. Aplikacija je namizna, enostavna za uporabo za
vsakega uporabnika, poskrbljeno je tudi, da jo lahko še dodatno razširimo.
Za izdelavo aplikacije smo uporabili program Visual Studio 2010 podjetja Microsoft.
Visual Studio je zelo razširjen program, ki omogoča razvoj in upravljanje tako za namizne
kot tudi za mobilne in spletne aplikacije ter Xbox. 3D modele smo dobili z različnih
spletnih strani in jih s pomočjo programa 3DS Max in Maya malenkost prilagodili. Za
razvoj računalniške igre smo uporabili ogrodje XNA Studio 4.0.
Ko smo aplikacijo dokončali, smo nekaj časa namenili tudi testiranju govornega
uporabniškega vmesnika ter drugih funkcionalnosti, ki jih ponuja aplikacija. Ob testiranju
smo aplikacijo tudi optimizirali, s čimer smo na koncu pridobili tudi nekaj sličic prikaza na
sekundo (FPS). Optimizirali smo jo na takšen način, da smo določena preračunavanja za
upodabljanje 3D modelov prestavili v metode, ki se kličejo takrat, ko se morajo vrednosti
preračunati na novo. Prav tako smo zmanjšali tudi število na novo ustvarjenih objektov ter
zmanjšali velikosti tekstur za 3D modele.
Aplikacijo bi lahko v prihodnje razširili na razpoznavanje govora v različnih jezikih,
animiranje 3D risanih junakov, metanje senc modelov idr.
31
7 LITERATURA
[1] Speech recognition. [Spletni]. http://electronics.howstuffworks.com/gadgets/high-
tech-gadgets/speech-recognition1.htm. [Navedeno 10.09.2013].
[2] Cohen, M. H. Voice User Interface Design;, Addison-Wesley, Boston, ZDA, 2004.
[3] Nature biotechnology. [Spletni].
http://www.nature.com/nbt/journal/v22/n10/full/nbt1004-1315.html. [Navedeno
01.09.2014].
[4] web.science.mq.edu.au. [Spletni].
http://web.science.mq.edu.au/~cassidy/comp449/html/ch11s02.html. [Navedeno
01.09.2014].
[5] www.doc.ic.ac.uk. [Spletni].
http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/cs11/report.html. [Navedeno
01.09.2014].
[6] Žibert, J. [Spletni]. http://luks.fe.uni-lj.si/sl/osebje/janezz/pub/mg.pdf. [Navedeno
23.07.2014].
[7] Speech synthesis. [Spletni]. http://whatis.techtarget.com/definition/speech-synthesis.
[Navedeno 23.7.2014].
[8] Janssen, C. Techopedia. [Spletni].
http://www.techopedia.com/definition/24128/pulse-code-modulation-pcm.
[Navedeno 01.09.2014].
[9] The Windows Club. [Spletni]. http://forum.thewindowsclub.com/microsoft-
technologies-discussions/28522-how-text-speech-works.html. [Navedeno
23.07.2014].
[10] Speaker recognition. [Spletni].
http://www.scholarpedia.org/article/Speaker_recognition. [Navedeno 24.07.2014].
[11] cse.buffalo. [Spletni]. www.cse.buffalo.edu/./Speaker%20Recognition.pptx.
32
[Navedeno 01.09.2014].
[12] Tazti. [Spletni]. http://www.tazti.com/speech-recognition-software.html. [Navedeno
24.07.2014].
[13] Voice Buddy. [Spletni]. http://www.bitsdujour.com/software/voice-buddy.
[Navedeno 24.07.2014].
[14] e-Speaking. e-Speaking. [Spletni]. http://www.e-speaking.com/. [Navedeno
25.07.2014].
[15] voiceattack. voiceattack. [Spletni]. http://www.voiceattack.com/. [Navedeno
24.07.2014].
[16] [Spletni]. http://www.techradar.com/news/phone-and-communications/mobile-
phones/getting-the-most-from-samsung-s-voice-1198384. [Navedeno 24.07.2014].
[17] Natural Readers. [Spletni]. http://www.naturalreaders.com/. [Navedeno 25.07.2014].
[18] text-to-speech. [Spletni]. http://text-to-speech.imtranslator.net/. [Navedeno
25.07.2014].
[19] Download. [Spletni]. http://download.cnet.com/Text-2-Speech/3000-33660_4-
75910509.html. [Navedeno 26.07.2014].
[20] Panopreter. [Spletni]. http://www.panopreter.com/. [Navedeno 25.07.2014].
[21] agnitio-corp. agnitio-corp. [Spletni]. http://www.agnitio-
corp.com/products/commercial/voice-recognition-software. [Navedeno 27.07.2014].
[22] RecoMadeEasy. [Spletni]. http://www.speakeridentification.com/. [Navedeno
24.07.2014].
[23] Sestek. [Spletni]. http://www.sestek.com/vocal-passphrase. [Navedeno 23.07.2014].
[24] ubi.com. [Spletni]. http://ewo.ubi.com/en/main/. [Navedeno 01.09.2014].
[25] giantbomb. [Spletni]. http://www.giantbomb.com/odama/3030-268/. [Navedeno
01.09.2014].
33
[26] bulbagarden. [Spletni]. http://bulbapedia.bulbagarden.net/wiki/Hey_You,_Pikachu!
[Navedeno 01.09.2014].
[27] giantbomb. [Spletni]. http://www.giantbomb.com/lifeline/3030-19969/. [Navedeno
01.09.2014].
[28] gamegrin. [Spletni]. http://www.gamegrin.com/articles/oddities-seaman/. [Navedeno
01.09.2014].
[29] online-convert. [Spletni]. http://www.online-convert.com/. [Navedeno 11.05.2014].
[30] Primer delovanje metode "CreateLookAt". [Spletni]. https://encrypted-
tbn1.gstatic.com/images?q=tbn:ANd9GcRtqM8J2KCYHJHZgAE2IHbaolSPe0UpD
US-X4LriwfMte57Ndxh4Q.
[31] CreatePerspectiveFieldOfView. [Spletni].
http://packtlib.packtpub.com/graphics/9781849687089/graphics/7089_02_02.jpg.
34
35
36