ЗАВРШНИ (BACHELOR) РАД - rt-rk.uns.ac.rs · УНИВЕРЗИТЕТ У НОВОМ САДУ...
Transcript of ЗАВРШНИ (BACHELOR) РАД - rt-rk.uns.ac.rs · УНИВЕРЗИТЕТ У НОВОМ САДУ...
УНИВЕРЗИТЕТ У НОВОМ САДУ
ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА
УНИВЕРЗИТЕТ У НОВОМ САДУ
ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА
НОВИ САД
Департман за рачунарство и аутоматику
Одсек за рачунарску технику и рачунарске комуникације
ЗАВРШНИ (BACHELOR) РАД
Кандидат: Мирослав Стефановић
Број индекса: Е12369
Тема рада: Имплементација интерактивне апликације са подршком за препознавање и могућност управљања гласом на Андроид платформи
Ментор рада: проф. др Јелена Ковачевић
Нови Сад, 22.06.2012. година
УНИВЕРЗИТЕТ У НОВОМ САДУ ФАКУЛТЕТ ТЕХНИЧКИХ НАУКА
21000 НОВИ САД, Трг Доситеја Обрадовића 6
КЉУЧНА ДОКУМЕНТАЦИЈСКА ИНФОРМАЦИЈА
Редни број, РБР:
Идентификациони број, ИБР:
Тип документације, ТД: Монографска документација
Тип записа, ТЗ: Текстуални штампани материјал
Врста рада, ВР: Завршни (Bachelor) рад
Аутор, АУ: Мирослав Стефановић
Ментор, МН: др Јелена Ковачевић, ред. проф.
Наслов рада, НР: Имплементација интерактивне апликације са подршком за препознавање и могућност управљањa гласом на Андроид платформи
Језик публикације, ЈП: Српски / латиница
Језик извода, ЈИ: Српски
Земља публиковања, ЗП: Република Србија
Уже географско подручје, УГП: Војводина
Година, ГО: 2012
Издавач, ИЗ: Ауторски репринт
Место и адреса, МА: Нови Сад; трг Доситеја Обрадовића 6
Физички опис рада, ФО: (поглавља/страна/ цитата/табела/слика/графика/прилога)
7/33/0/0/15/0/0
Научна област, НО: Електротехника и рачунарство
Научна дисциплина, НД: Рачунарска техника
Предметна одредница/Кључне речи, ПО: Андроид, препознавање говора, интерактивна апликација
УДК
Чува се, ЧУ: У библиотеци Факултета техничких наука, Нови Сад
Важна напомена, ВН:
Извод, ИЗ: У овом раду је приказано једно решење имплементације интерактивне апликације са подршком за препознавање и могућност управљања гласом на Андроид платформи
Датум прихватања теме, ДП:
Датум одбране, ДО:
Чланови комисије, КО: Председник:
Члан: Потпис ментора
Члан, ментор: др Јелена Ковачевић
UNIVERSITY OF NOVI SAD FACULTY OF TECHNICAL SCIENCES
21000 NOVI SAD, Trg Dositeja Obradovića 6
KEY WORDS DOCUMENTATION
Accession number, ANO:
Identification number, INO:
Document type, DT: Monographic publication
Type of record, TR: Textual printed material
Contents code, CC: Bachelor Thesis
Author, AU: Miroslav Stefanović
Mentor, MN: Jelena Kovačević, PhD
Title, TI: Interactive application implementation with voice recognition and voice control support servis on Android platform
Language of text, LT: Serbian
Language of abstract, LA: Serbian
Country of publication, CP: Republic of Serbia
Locality of publication, LP: Vojvodina
Publication year, PY: 2012
Publisher, PB: Author’s reprint
Publication place, PP: Novi Sad, Dositeja Obradovića sq. 6
Physical description, PD: (chapters/pages/ref./tables/pictures/graphs/appendixes)
7/33/0/0/15/0/0
Scientific field, SF: Electrical Engineering
Scientific discipline, SD: Computer Engineering, Engineering of Computer Based Systems
Subject/Key words, S/KW: Voice recognition, Android, Interactive application
UC
Holding data, HD: The Library of Faculty of Technical Sciences, Novi Sad, Serbia
Note, N:
Abstract, AB: Interactive application implementation with voice recognition and voice control support servis on Android platform
Accepted by the Scientific Board on, ASB:
Defended on, DE:
Defended Board, DB: President:
Member: Menthor's sign
Member, Mentor: Jelena Kovečević, PhD
Zahvalnost
I
Zahvalnost
Zahvaljujem se svom mentoru prof. dr Jeleni Kovačević na stručnoj pomoći tokom
izrade završnog (bachelor) rada.
Srdačno se zahvaljujem asistentu Nenadu Četiću i Ivanu Letvenčuku na podsticanju za
nastanak završnog rada, savete, strpljenje i podršku tokom izrade.
Na kraju se zahvaljujem svima onima koji su na bilo koji način doprineli izradi ovog
završnog rada.
Sadržaj
II
SADRŽAJ
1. Uvod ................................................................................................................................ 1
2. Teorijske osnove ............................................................................................................. 2
2.1 Android OS ................................................................................................................ 2
2.2 STT tehnologija ......................................................................................................... 3
2.3 HTTP ......................................................................................................................... 4
3. Koncept rešenja ............................................................................................................... 6
3.1 Modul STT ................................................................................................................ 6
3.2 Modul za iscrtavanje bitmapa na ekranu i njihovo snimanje .................................. 10
3.3 Modul veštačke inteligencije (AI) ........................................................................... 12
4. Programko rešenje ........................................................................................................ 14
4.1 Paket Main ............................................................................................................... 15
4.2 Paket Game .............................................................................................................. 16
4.3 Paket Levels ............................................................................................................. 19
4.4 Paket Shaker ............................................................................................................ 20
4.5 Paket Artifical Intelligence (AI) .............................................................................. 20
5. Rezultati ........................................................................................................................ 22
6. Zaključak ...................................................................................................................... 25
7. Literatura ....................................................................................................................... 26
Spisak slika
III
SPISAK SLIKA
Slika 1 – Dijagram veze između korisnika, servisa i uređaja ................................................ 1
Slika 2 - Grafički prikaz dugmadi za komunikaciju ............................................................... 7
Slika 3 - Grafički prikaz dugmadi za komunikaciju kada ne postoji internet konekcija ........ 8
Slika 4 - MSC dijagram pozadinskih aktivnosti ..................................................................... 9
Slika 5 - Način dodele bitmapa na osnovu karaktera .......................................................... 10
Slika 6 - Izgled iscrtane mape i dugmadi za komunikaciju .................................................. 11
Slika 7 - Ilistrativni prikaz brisanja sadržaja vektora ......................................................... 12
Slika 8 – Sadržaj osnovnih paketa programskog rešenja .................................................... 14
Slika 9 - Klasni dijagram paketa Main ................................................................................ 15
Slika 10 - Klasni dijagram paketa Game ............................................................................. 18
Slika 11 - Klasni dijagram paketa levels.............................................................................. 19
Slika 12 - Klasni dijagram paketa Shaker ........................................................................... 20
Slika 13 - Klasni dijagram paketa Artifical Intelligence ..................................................... 21
Slika 14 - MSC dijagram FlacChek projekta ....................................................................... 23
Slika 15 - Rezultati prepznavanja glasovnih komandi ......................................................... 23
Skraćenice
IV
SKRAĆENICE
AI - Artifical Intelligance, veštačka inteligencija
STT - Speech To Text, tehnologija koja pretvara govor u tekst
MSC - Message Sequence Chart Diagram, grafik sekvenci poruka
CSV - Comma-separated Values, zarezima razdvojene vrednosti
HTTP - Hypertext Transfer Protocol, protokol za prenos hiper teksta
OS - Operating System, operativni sistem
API - Application programming interface, programska sprega
URL - Uniform Resource Locator, jedinstvena adresa resursa
FLAC - Free Lossless Audio Codec, audio kodek bez gubitaka
ADT Plugin - Android Development Tools plugin, Android razvojni alat
SDK Tool - Software Development Kit Tool, skup softverskih alata za kreiranje
aplikacija
LCS - Longest common subsequence algorithm, algoritam za pronalaženje
najdužeg zajedničkog podniza
OSI - Open Systems Interconnection, referentni model za otvoreno povezivanje
sistema
Uvod
1
1. Uvod
U ovom radu biće predstavljen jedan od načina implementacije interaktivne aplikacije sa
podrškom za prepoznavanje i mogućnost upravljanja glasom (zadavanjem komandi), namenjene
isključivo korisnicima ureĎaja sa Android operativnim sistemom.
U poglavlju teorijske osnove biće objašnjen nastanak i razvoj Android operativnog
sistema, njegov koncept i primena, osnove tehnologije koja pretvara govor u tekst (u daljem
tekstu biće koričćena skraćenica STT), podela signala i protokol za prenos hiper teksta
(skraćenica HTTP će biti korišćena).
Konceptom rešenja obuhvaćena je izrada najbitnijih modula aplikacije, njihova
implementacija i način korišćenja.
Kroz programsko rešenje biče objašnjena meĎusobna povezanost svih modula kao i
metode najznačajnijih klasa i pojedinih interfejsa.
U poglavlju rezultati nalazi se detaljan opis postupka testiranja STT modula.
Slika 1 – Dijagram veze između korisnika, servisa i uređaja
Teorijske osnove
2
2. Teorijske osnove
2.1 Android OS
Android™ operativni sistem je trenutno najrasprostranjenij operativni sistem za mobilne
telefone, zasnovan je na Linux kernelu i prilagoĎen je tako da se može koristiti na većini
mobilnih ureĎaja, uključuju i tablet, laptop, netbook, smartbook računare, čitače elektronskih
knjiga, pa čak i ručne satove.
Pokretanje samih aplikacija se ne vrši direktno, već se aplikacije pokreću u okruženju
odvojenom od ostatka sistema gde dobijaju samo odreĎeni deo sistemskih resursa, pa tako
nemaju pristup delovima sistema koji su im nepotrebni, što donekle poboljšava sigurnost i
stabilnost sistema, takoĎe pri instalaciji aplikacija korisnik dibija listu svih dozvola koje jedna
aplikacija zahteva da bi se instalirala, što korisniku daje mogućnost da uoči potencijalno štetne
aplikacije i obustavi njihovu instalaciju pre nego što doĎe do oštećenja.
Sa tehničke strane Android predstavlja Linux operativni sistem razvijen za ARM i x86
arhitekturu i sastoji se od modifikovanog monolitnog Linux kernela zaduženog za podršku
hardvera i funkcija niskog nivoa, skupa biblioteka zaduženih za dodatne podrške kao što su
iscrtavanje grafike, podrška za dekodovanje video snimaka, podrška za SSL enkripciju itd., u
sklopu biblioteka se nalazi i odvojeni Android Runtime koji sadrži osnovne, bazne, biblioteke i
Dalvik virtualna mašina zadužena za pokretanja aplikacija višeg nivoa napisanih u Java
programskom jeziku. Na višem nivou od biblioteka su sistemske aplikacije ,tu se nalaze, window
manager, menadžer resursa, menadžer instalacionih paketa, kao i aplikacije zadužene za
obavljanje osnovnih funkcija vezenih za mobilne telefone ili ureĎaj na kom je instaliran Android,
na najvišem nivou se nalaze krajnje korisničke aplikacije, odnosno aplikacije koje direktno
koristi korisnik.
Teorijske osnove
3
Ovakva arhitektura sistema nije iznenaĎujuća jer predstavlja standardnu arhitekturu Linux
sistema gde su segmenti sistema razdvojeni po nivoima na kojim rade. Za crtanje 3D grafike
Android koristi biblioteku zasnovanu na OpenGL ES 2.0 specifikaciji, što ovom sistemu daje
mnoge napredne grafičke sposobnosti. Android poseduje i ugraĎenu podršku za multitasking.
Kroz svoju istoriju Android je imao nekoliko verzija od kojih je svaka donosila neku
novinu i poboljšanje, tako je npr. verzija 1.0 bila prva zvanično dostupna verzija Android
operativnog sistema, V1.5 Cupcake je bila njena nadogradnja zasnovana na Linux kernelu
2.6.27, V1.6 Donut je koristio 2.6.29 Linux kernel i imao još više dodatnih mogućnosti u odnosu
na prvu 1.0 verziju. Sa pojavom verzija 2.0 i 2.1 pod nazivom Eclair ispravljene su mnoge
postojeće greške u samom sistemu i dodate dodatne podrške za rad sa kamerom, kao i poboljšana
virtualna tastatura. Verzija 2.2 Froyo je prešla na novi kernel 2.6.32, ubrzala je rad sa
memorijom i poboljšala performanse samog sistema, V2.3 Gingerbread takoĎe prelazi na novi
kernel 2.6.35 i dodatno poboljšava korisnički interfejs, takoĎe donosi sa sobom i podršku za veće
displeje kao i za neke dodatne senzore. Verzija 3.0 poznata i kao Honeycomb bila je zasnovana
na kernelu 2.6.36 i bila je prilagoĎena tablet računarima, dodati su joj interfejs elementi kao što
su system bar i action bar koji su prilagoĎeni za tablet računare, takoĎe pojednostavljena je i
upotreba miltitaskinga, redizajnirana je i virtualna tastatura tako da omogući lakše i brže kucanje
a uklonjeni su i neki sigurnosni propusti.
Verzija 4.0 koja nosi naziv Ice Cream Sandwich je trenutno najnovija verzija Android
operativnog sistema.
2.2 STT tehnologija
Uopšteno govoreći realni svet proizvodi merljive izlaze koje mi nazivamo signalima.
Signali po svojoj prirodi mogu biti diskretni ili kontinualni. Izvor ovog signala može biti
stacionaran na način da se njegove statistike tokom vremena ne menjaju, ili nestacionaran.
Signali mogu biti čisti (direktno mereni sa izvora signala) ili zašumljeni uticajem drugih izvora
signala (šumova).
Problem od neverovatnog značaja jeste okarakterisati takav realni svet signala pomoću
odgovarajućeg modela signala. Mnogo je razloga zbog kojih je ovakav model signala od značaja.
Najvažniji od njih je da model signala omogućava odgovarajući teorijski opis signala pomoću
koga se može predložiti odgovarajuća obrada signala i na taj način dobiti željeni izlaz. Na
primer, ako je u pitanju obrada govornog signala koji je zagaĎen šumom ili smetnjama prilikom
prenosa signala, mi možemo iskoristiti model signala kako bismo optimalno otklonili šum i
potisnuli poremećaj koji se pojavio prilikom prenosa. Drugi značajan razlog zbog koga je važno
razvijati modele procesa jeste da nam ti modeli često govore nešto o izvoru signala čak i onda
Teorijske osnove
4
kada nam ti izvori nisu na raspolaganju. U takvim slučajevima mi možemo, ako su nam na
raspolaganju dobri modeli signala, generisati, odnosno simulirati realne signale. Na kraju, možda
i najvažniji razlog razvoja modela signala jeste razvoj efikasnih ureĎaja sistema za predikciju,
prepoznavanje, identifikaciju i t.d.
Postoji nekoliko različitih tipova modela signala. Oni se, na grubi način, mogu podeliti u
klasu determinističkih i u klasu statističkih modela. Deterministički modeli se baziraju na
konkretnom znanju specifičnih osobina signala. Kod ovih modela se uglavnom, na osnovu ovog
znanja, usvajaju karakteristični oblici a zatim se uglavnom estimiraju parametri kao što su
amplituda, učestanost, fazni stav i tome slično. Druga široka klasa modela signala su statistički
modeli u kojima je cilj da se izvrši karakterizacija statističkih osobina procesa. Primeri takvih
statističkih modela uključuju Gausovske procese, Poasonove procese, Markovljeve procese, pa i
skrivene Markovljeve procese. Zajednička nit ovih modela jeste da se signali mogu
okarakterisati kao slučajni procesi pri čemu je važno odrediti stohastičke parametre ovih procesa.
Niti je teorija o skrivenim Markovljevim modelima nova, niti je njena primena u
prepoznavanju govora nova. Osnovni teorijski rezultati su objavljeni kasnih šesdesetih i ranih
sedamdesetih (Baum i dr.) dok su prve implementacije ovih rezultata u oblasti prepoznavanja
govora izvršene sedamdesetih (Baker na CMU i Jelinek na IBM). MeĎutim, šira primena i
razumevanja ovakve metodologije je naišla tek nekoliko godina kasnije.
Prepoznavanje govora se danas vrši na mnogo načina, sa dobro razvijenim i dobro
uhodanim algoritmima, no ni jedna metoda još nije dovedena do vrhunca, sa 100%-tnim
prepoznavanjem. Kompanija Google je razvila SpeechToText API koji omogućava korisnicima
ureĎaja sa Android operativnim sistemom, mogućnost korišćenja ovog servisa. Postupak
implementacije i obrade obuhvaćen je realizacijom projektnog zadatka i biće detaljno opisan u
konceptu rešenja i programskom rešenju.
2.3 HTTP
HTTP (engl. HyperText Transfer Protocol) je mrežni protokol koji pripada sloju
aplikacije OSI referentnog modela, predstavlja glavni i najčešći metod prenosa informacija
na vebu. Osnovna namena ovog protokola je isporučivanje HTML dokumenata, tj. veb stranica.
HTTP je samo jedan od internet protokola. Razvoj i standardizaciju HTTP protokola
nadgledaju W3C i Internet Engineering Task Force.
HTTP je protokol za komunikaciju izmeĎu servera i klijenta, koji funkcioniše po principu
zahtev/odgovor. HTTP klijent, koji je najčešće veb pregledač, inicira prenos podataka nakon što
uspostavi TCP/IP vezu s udaljenim veb serverom na odreĎenom portu.
Teorijske osnove
5
Server konstantno osluškuje zahteve na odreĎenom mrežnom komunikacijskom portu
(tipično port 80), čekajući da se klijent poveže i pošalje svoj zahtev. Zahtev se sastoji od osnovne
HTTP komande (čija je sintaksa propisana standardom i koja se sastoji od naziva komande,
imena traženog dokumenta i verzije podržanog HTTP-a) i zaglavlja koje se sastoji od odreĎenog
broja redova teksta koji pobliže odreĎuju aspekte zahteva.
Zahtev klijenta se obraĎuje na serveru i, u zavisnosti od ispravnosti zahteva i mogućnosti
zadovoljavanja istog, klijentu se šalje odgovarajući odgovor. Odgovor se sastoji od izveštaja o
statusu zahteva (koji se sastoji od trocifrenog koda i kratkog deskriptivnog teksta statusa, npr.
200 ОК) i od konkretnog odgovora, ukoliko je zahtev moguće zadovoljiti. Odgovor se sastoji od
zaglavlja, koje je iste sintakse kao i zaglavlje zahteva i daje osnovne podatke o prirodi odgovora,
i od eventualnog konkretnog sadržaja koji se tražio u zahtevu. U zavisnosti od verzije HTTP
protokola kao i od zaglavlja zahteva, veza se može nakon toga prekinuti, a može se ista veza
iskoristiti za slanje novog zahteva, radi uštede vremena.
Koncept rešenja
6
3. Koncept rešenja
Realizacija Android aplikacije prvenstveno se oslanja na korišćenje Android sistemskih
klasa, više-nitno programiranje i projektovanje nekoliko manjih modula sa jasno definisanim
ciljem. U konceptu rešenja biće posvećena pažnja najviše tim modulima koju su izmeĎu ostalog i
najbitniji za pokretanje i normalan tok aplikacije. U tu grupu spadju:
1) Modul STT
2) Modul za iscrtavanje bitmapa na ekranu i njihovo snimanje
3) Modul veštačke inteligencije ( AI )
3.1 Modul STT
STT modul je napravljen kao veza izmeĎu korisnika, aplikacije i Google servisa za
prepoznavanje i obradu govora tj., pretvaranja u tekst. Sastoji se od prilično jednostavnog
grafičkog interfejsa i pozadinskog “sevisa“, dela koda koje se izvršava paralelno dok korisnika
komunicira sa aplikacijom putem govora. Glasovne komande koje je moguće koristiti su:
1) LEFT – za pomeraj u levo
2) RIGHT – za pomeraj u desno
3) UP – za pomeraj na gore
4) DOWN – za pomeraj na dole
5) STOP – za prekid korišćenja glasovnih komandi
6) RESET – za resetovanje tekuće mape
7) UNDO – za vraćanje poteza unazad
8) EXIT – za završetak aplikacije
Koncept rešenja
7
Slika 2 - Grafički prikaz dugmadi za komunikaciju
Na slici je prikazan grafički interfejs koji povezuje korisnika sa aplikacijom i pruža
mogućnost uvida u sam tok izvršenja obrade govora signalizirajući korisniku u kom trenutku se
snima, u kom trenutku se prosleĎuju informacije servisu koji radi u pozadini, kada se sve to
vraća i kada je moguće započeti novu sesiju. Na njemu se nalaze četiri dugmeta:
1) Speak – predstavlja glavno dugme i služi kao indikator korisniku, na njemu se
ispisuju poruke o trenutnom stanju. Može se nalaziti u pet različitih stanja. Prvo i
osnovno je stanje koje se instancira prilikom pokretanja aplikacije – Shake or
Press. U njemu se čeka da korisnik pritiskom na dugme ili potresom telefona
otpočne sesiju snimanja. Nakon čega se prelazi u Ready for record stanje. Ovde
upaljen mikrofon čeka promenu amplitude zvuka, koja će preći granicu minimalne
jačine koju smatramo govorom, i signalizirati prelazak u sledeće stanje. Iz Ready
for record prelazimo na snimanje tačnije u stanje Recording gde se vrši automatsko
čuvanje i slanje audio sadržaja pozadinskom servisu. Zatim prelazimo u obradu -
Processing gde dobijamo rezultate od servisa u vidu Liste String-ova. Iz ovog
stanja rezultati se šalju direktno Artifical Intelligence modulu (AI) na parsiranje i
Koncept rešenja
8
obradu o čemu će biti više reči u opisu modula AI. TakoĎe postoji stanje No
Internet Connection u koje se prelazi u slučaju da ne postoji ni jedna aktivna
internet konekcija, na bilo kom android ureĎaju u koji je instalirana aplikacija ili u
slučaju da u toku igranja doĎe do nepredviĎenog gubljenja konekcije.
Slika 3 - Grafički prikaz dugmadi za komunikaciju kada ne postoji internet konekcija
2) REC – je dugme koje predstavlja indikator snimanja. Može imati dva stanja ON i
OFF. U skladu sa željom korisnika za igranjem pomoću glasovnih komandi, ovo
dugme se aktivira.
3) NET – je dugme koje predstavlja indikator postojanja internet konekcije kao i
indikator slanja i primanja podataka sa interneta. Može imati četiri stanja. Prvo
kada postoji internet konekcija i nema nikakve aktivnosti na mreži u smislu slanja -
primanja sadržaja. Drugo kada se šalje snimljeni audio fajl. Zatim treće stanje u
kome se primaju rezultati od servisa kada je audio fajl poslat. Četvrto stanje
predstavlja nepostojanje internet konekcije.
4) Exit – je dugme koje zatvara postojeću internet konekciju i prekida obradu koja je u
toku ili bilo koje druge aktivnoisti, u slučaju da su pokrenute, i izlazi u prethodni
meni - meni izbora nivoa.
Pozadinski “servis“ je deo koda koje se odnosi na izvršenje snimanja i slanja audio
sadržaja i dobijanje rezultata koji se dalje prosleĎuju modulu AI. Detaljniji prikaz se nalazi na
slici 3.
Koncept rešenja
9
Slika 4 - MSC dijagram pozadinskih aktivnosti
Ovde vidimo da se u klasi GameActivity instancira objekat klase SpeechRecognizer koji
implemetira SpeechRecognizerListener i pozivom metode startListening aktivira se snimanje
korisnika i slanje audio zapisa servisu. Po završetku obrade, rezultate ukoliko ih ima, dobijamo u
metodi onResults, a ukoliko nije uspela obrada dobijamo kod greške u metodi onError. Ostale
metode nam služe za indikaciju menjanja stanja na dugmićima Speak, REC i NET. Metoda
StopListening označava završetak sesije.
Koncept rešenja
10
3.2 Modul za iscrtavanje bitmapa na ekranu i njihovo snimanje
Da bi se omogućilo korisniku da nesmetano koristi, potrebno je pre svega iscrtati aplikaciju
na ekran što ujedno predstavlja zadatak ovog modul. Ideja je da se učitavaljem razčičitih
karaktera iz dvostuke matrice ( char[][] ) dodeli svakom istom elementu odreĎena bitmapa koja
će biti dalje prosleĎena funkciji zaduženoj za iscrtavanje na ekran. U dvostrukoj matrici
karaktera mogu se naći samo znakovi kao što su “$“ , “*“, “ “, “@“, “+“, “.“, “#“. Tako npr., ako
se prilikom prolaska petljom kroz dvostruku matricu naiĎe na karakter “#“ svaki put biće
učitana slika odreĎenih dimenzija koja predstavlja zid, i ta slika će biti konvertovana u bitmapu
koja će se iscrtati na odreĎenom prostoru ekrana. Na ovaj način korisnik će imati utisak da su na
ekranu samo slike što nam je i bio cilj.
Slika 5 - Način dodele bitmapa na osnovu karaktera
Kada se završi dodela bitmapa i njihovo isctravanje na ekranu, aplikacija ima ovakav
izgled:
Koncept rešenja
11
Slika 6 - Izgled iscrtane mape i dugmadi za komunikaciju
Implementacijom Android-ovog sistemskog onTouchListenera dobijamo mogućnosti
kretanja po ekranu na dodir. Potrebno je čikicom pomeriti crvene dijamante na žute kvadratiće
da bi se prešlo na sledeći nivo. Ono što predstavlja problem jeste:
1) Zamena elemenata u dvostrukoj matrici karaktera. Da bi se izvršila kretnja na ekranu,
dok korisnik dodirom vuče poteze ili ih zadaje korišćenjem glasovnih komandi, u
pozadini se pronalazi korisnikovo željeno mesto u matrici karaktera i proverava se da
li je moguće i u skladu sa pravilima igre odigrati taj potez. Ukoliko su svi uslovi
ispunjeni odredišni karakter će biti zamenjen novim a na mesto izvornog će biti
stavljen odgovarajući karakter. Nakon ovog se poziva metoda iscrtavalja koja će
ponovo projuritu kroz matricu, dodeliti bitmape i izvršiti njihovo iscrtavanje na
ekranu. To će se desiti dovoljno brzo da će korisnik imati utisak da se samo čikica
pomera tj., odigrava zadati potez.
2) Realizacija snimanja svakog odigranog poteza ukoliko korisnik napravi grešku ili iz
bilo kog razloga želi da se vrati unazad proizvoljan broj poteza. Rešava se
smeštanjem celokupne dvostruke matrice karaktera u Vector nakon svakog uspesno
Koncept rešenja
12
odigranog poteza. Ukoliko korisnik zahteva izvršenje metode UNDO, poslednji
element Vector-a sa mapama se briše i učitava predposlednji, koji se dalje prosleĎuje
na iscrtavanje. Na taj način vrši vraćanje proizvoljnog broja poteza unazad kako bi
korisnik mogao ispraviti svoju grešku nastalu prilikom loše izrečene glasovne
komande ili drugih razloga.
Slika 7 - Ilistrativni prikaz brisanja sadržaja vektora
3.3 Modul veštačke inteligencije (AI)
Modul veštačke inteligencije koji se koristi u ovom projektu je napravljen za svrhu
poboljšanja igrivosti i odnosi se samo na glasovne komande. Naime kad korisnik pokuša da zada
neku od komandi glasom, jedan od mogućih scenarija je 100%-tno prepoznavanje nakon čega
sledi odigravanje ili prepoznavanje sa manje tačnosti. MeĎutim u većini slučajeva dolazi do
mnogo manjeg procenta prepoznavanja (čak i do 50% manjeg) usled nepravilnog izgovaranja
reči, različitog akcenta, pozadinskog šuma, buke, razgovora više lica itd... Da bi se povećao
procenat uspešno pogoĎenih poteza oslonićemo se na modul veštačke inteligencije.
Nakon što dobijemo rezultate od pozadinskog “servisa”za snimljeni fajl koji smo poslali,
prosleĎujemo ih u AI. Zatim imamo nekoliko koraka u obradi a to su:
1) Parsiranje i sortiranje – postupak u kome se dobijena lista String-ova sreĎuje tako
što se za svaki element proverava koliko sadrži komandi.
2) LongestCommonSubsequence je algoritam kroz koji se, nakon parsiranja i sortiranja, svaka
reč svakog elementa liste propušta na obradu. Ovaj algoritam proverava sličnost izmeĎu
učitane reči i komandnih reči vraćajući kao rezultat broj. Ukoliko je taj broj veći do broja
proglašenim graničnom vrednošću sličnmosti, tekuća reč će biti zamenjena sa najsličnijom
Koncept rešenja
13
komandom. Nakon ovoga se uzima sledeća i tako sve do kraja dobijenih rezultata. Primeri:
leaf -> left, wrihgt -> right, dawn -> down itd...
3) Po završetku dodele vrši se sortiranje novodobijenih rezultata od kojih se odabira
onaj sa najviše pogodaka. Zatim se rezultat prosleĎuje funkciji za odigravanje
poteza koja će pokušati da izmeni sadržaj dvostuke matrice karaktera
novopristiglem potezima i pozvati funkciju za iscrtavanje koja će prikazati odigrane
poteze.
Programsko rešenje
14
4. Programko rešenje
Programska realizacija projektnog zadatka napisana je u Java programskom jeziku i
primenjen je objektno orijentisan pristup programiranja. Korišćeno je Eclipse Helios razvojno
okruženje sa ADT Plugin-om i Android SDK Tools. Realizovano rešenje zasnovano je na
korišćenju Android sistemskih klasa, nasleĎivanjem, menjanjem postojećih i dodavanjem
novih. Osnovni paketi koji čine programsko rešenje zadatka prikazani su na slici 7.
Naziv paketa Opis Paketa Sadrzaj paketa - Klase
SplashScreen.java
MainActivity.java
GameLevelChooseActivity.java
GameActivity.java
GameView.java
GameEngine.java
pak.levels Sadrži skup nivoa igre Levels.java
pak.shaker Sadrži klasu za kontrolu senzora Shaker.java
LongestCommonSubsequence.java
LcsString.java
ArtificialIntelligenceEngine.java
AlgorithmInterface ( interfejs )
Alg1.java
pak.main
Sadrži skup klasa koje služe za
pokretanje Splash, Main i Level
aktivnosti
Sadži skup klasa koje su zadužene za
prikaz grafike na ekranu, izvršenje
algoritma igre, korišdenje glasovnih
komandi i senzora
pak.game
Sadrži skup klasa i interfejs koji
omoguduju korišdenje veštačke
inteligencije u cilju poboljšanja STT
rezultata i same igrivosti
artificial.intelligence
Slika 8 – Sadržaj osnovnih paketa programskog rešenja
Programsko rešenje
15
4.1 Paket Main
Na slici možemo videti meĎusobnu zavisnost klasa i interfejsa, kao i njihove metode i
atribute koji su sadržani u paketu Main.
Slika 9 - Klasni dijagram paketa Main
Programsko rešenje
16
Main paket sadrži skup klasa koje služe za pokretanje Splash, Main i Level aktivnosti.
Sve tri klase nasleĎuju Android sistemsku klasu Activity pa možemo reći da one same
postaju aktivnosti svaka za sebe.
SplashScreen klasa se prva startuje nakon pokretanja aplikacije. Ona prikazuje njen
zaštitni znak i progres dijalog koji, kada dostigne maksimalnu vrednost, automatski pokreće
MainActivity klasu.
MainActivity klasa prventstveno instancira glavni meni aplikacije. Tačnije tri dugmeta (
nova igra, o igri i za izlazak iz igre ) kao i pozadinsku sliku, kako za horizontalnu poziciju
ekrana tako i za vertikalnu. Ova klasa implementira OnClickListener Androidov sistemski
interfejs, na osnovu čega je moguće kliknuti na neko od dugmadi iz menija. U zavisnosti od
izbora u meniju pokreće se GameLevelChooseActivity klasa koja nam omogućava izbor nivoa
aplikacije, AlertDialog za informacije o igri ili zatvaranje svih aktivnosti i izlazak.
GameLevelChooseActivity klasa sadrži listu svih nivoa aplikacije, oni su prikazani na
ekranu i korisniku je omogućen izbor. Nakon odabira nivoa startuje se GameActivity klasa.
4.2 Paket Game
Paket Game je zadužen za iscrtavanje aplikacije na ekranu, samo igranje tj.kretnje kao i
korišćenje glasovnih komandi. Glavna klasa ovog paketa je GameActivity.
GameActivity klasa nasleĎuje Androidovu sistemsku klasu Activity. Ona instancira
četiri dugmeta na severnoj strani ekrana ( dugme indikator govora, idikator snimanja,
indikator internet konekcije i dugme za izlazak ) a ostatak rezerviše za iscrtavanje bitmapa,
kako za horizontalnu poziciju ekrana tako i za vertikalnu. Ova klasa implementira
OnClickListener Androidov sistemski interfejs, na osnovu čega je moguće kliknuti na neko
od prethodnih dugmadi. TakoĎe implementira i Shaker.Callback interfejs koji omogućava
praćenje potresa telefona na osnovu senzora čime se startuje snimanje kao preduslov za
korišćenje glasovnih komandi. Algoritam glasovnih komandi kao i sama funkcionalnost su
detaljnije objašnjeni u poglavlju koncept rešenja. Da bi se mogla iscrtati grafika na
rezervisanom delu ekrana neophodno je instancirati objekat klase GameView.
GameView je klasa koje nasleĎuje Androidovu sistemsku klasu View i njen zadatak je
da prikaže grafički interfejs na mestu koje je klasa GameActivity predvidela. Implementira
Androidov sistemski OnTouchListener interfejs kojim je omogućena funkcionalnost na dodir
ekrana. TakoĎe sadrži metodu public void draw() koja iscrtava aplikaciju, metodu public void
Programsko rešenje
17
performMove() zaduženu za pravljenje kretlji na ekranu, kao i metode koje se pozivaju
prilikom obrade glasovnih komandi a to su : public void makeLeft(), public void makeRight(),
public void makeUp(), public void makeDown(), public void makeUndo(), public void
makeReset(), public void makeExit(). Metoda iscrtavanja detaljnije je objašnjena u poglavlju
koncept rešenja.
Na slici možemo videti meĎusobnu zavisnost klasa i interfejsa, kao i njihove metode i
atribute koji su sadržani u paketu Game.
Programsko rešenje
18
Slika 10 - Klasni dijagram paketa Game
GameEngine klasa pretstavlja srce aplikacije, tačnije ona sadrži sve najbitnije atribute i
metode koje klasa GameView koristi kako bi uspela da prikaže grafiku na ekranu u klasi
GameActivity. Konstruktor ove klase kao parametar prima broj nivoa koji korisnik želi da
proba i iz Levels klase učitava u char[][] matricu - nivo. Na osnovu karaktera iz matrice
Programsko rešenje
19
odreĎuje se koja će bitmapa biti iscrtana na ekranu. Funkcija public boolean tryMove() na
osnovu parametara dx, dy i rotation pokušava da odigra potez ako je to moguće. Nakon
odigranog poteza pamti se sadržaj novonastale mapa kao i prethodne u private
Vector<char[][]> jer nam to omogućava da se vraćamo u nazad sa potezima ukoliko je
korisnik napravio grešku, sve do počentog stanja. Metode private void switchElement() i sam
postupak snimanja nivoa je detaljnije objašnjen u konceptu rešenja.
4.3 Paket Levels
Paket levels sadrži klasu Levels koja kao atribut ima dvostruki niz stringova, tačnije,
jedan nivo se sastoji od odreĎenog broja vrsta u kojima se nalazi po osam karaktera (onoliko
koliko ima kolona). Vrsta sa karakterima pretstavlja jedan string a niz tih stringova čine nivo
aplikacije. Niz od n nivoa pretstavljen je dvostrukim nizom stringova kao atribut klase Levels
i pretstavlja skup svih nivoa.
Slika 11 - Klasni dijagram paketa levels
Programsko rešenje
20
4.4 Paket Shaker
Slika 12 - Klasni dijagram paketa Shaker
Na slici možemo videti meĎusobnu zavisnost klasa i interfejsa, kao i njihove metode i
atribute koji su sadržani u paketu Shaker.
Klasa Shaker implementira SensorEventListener i Callback interfejs koji omogućuju da
se na osnovu promene parametara dobijenih očitavanjem senzora akcelerometra, može znati
kada je došlo do potresa telefona, na osnovu čega će biti pokrenuta aktivnost snimanja
govora.
4.5 Paket Artifical Intelligence (AI)
Paket Artifical Intelligence je namenjen za obradu rezultata dobijenih od Google-a
prilikom slanja audio sadržaja u kome se nalaze potencijalni potezi ili komande aplikacije
koje je korisnik izgovorio. Cilj je da se poveća procenat prepoznatih poteza (ponekad se
izgovorene komande razlikuju u jednom ili više karaktera pa nije moguće uvek dobiti 100%
poklapanje) kako aplikacija ne bi gubila na funkcionalnosti. Za to je zadužena prvenstveno
LongestCommonSubsequence klasa.
LongestCommonSubsequence klasa je apstraktna klasa koja implementira algoritam.
Dizajnirana je tako da može da poredi karaktere u strungu, linije u datotekama, blokove koda,
čvorišta u XML dokumentu i slično. Klasa LcsString nasleĎuje LongestCommonSubsequence
klasu ali ograničava i uprošćava njeno korišćenje samo na komparaciju stringova. U
Programsko rešenje
21
zavisnosti od dužine dva stringa koja se porede algoritam će vratiti broj koliko se istih
karaktera nalazi i u jednam i u drugom stringu, takoĎe će vratiti i parametar distance koji
pretstavlja koliko su ta dva stringa različita, odnosno broj karaktera koji se ne poklapa.
Pored pomenute dve klase postoje ArtificalIntelligenceEngine i Alg1 klase. Dizajnirane
su da se na najjednostavniji način implementiraju i pokrenu u aplikaciji onog trenutka kada se
dobiju rezultati obrade audio datoteka poslatih servisu. One će te rezultate propustiti kroz
LongestCommonSubsequence algoritam, izvršiti obradu i parsiranje nakon čega će zadržati
samo one sa najvećim brojem pogodaka i proslediti ih na izvršenja, a ostatak odstraniti.
Detaljniji opis ovog postupka je ovisan u poglavlju koncept rešenja.
Na slici možemo videti meĎusobnu zavisnost klasa i interfejsa, kao i njihove metode i
atribute koji su sadržani u paketu Artifical Intelligence.
Slika 13 - Klasni dijagram paketa Artifical Intelligence
Rezultati
22
5. Rezultati
Ispitivanje rada AI realizovanog projektnim zadatkom vršeno je pomoću FlacCheck i Test
projekata, koje poziva test.bat datoteka.
FlacCheck kao argumente komandne linije prima lokaciju i naziv Flac audio datoteka, sample
rate tj., frekvenciju odabiranja, broj rezultata i String originalno izgovorenih komandi. Nakon slanja
audio datoteka setvisu putem HTTP konekcije, kao odgovor će nam stići rezultati. Parser obraĎuje
rezultate tj., svaku reč posebno, propustajući kroz LCS algoritam. LCS će na osnovu sličnosti dva
String-a donositi zaključak da li je reč koja se obraĎuje potencijalna komanda ili ne. U slučaju da
jeste ona će biti preimenovana u komandu. Na osnovu ovih parametara i obrade u izlaznu CSV
datoteku će biti snimljeni novodobijeni rezultati.
Test kao argument komandne linije prima ime izlazne CSV datoteke. Učitavaju se svi
rezultati prethodno kreirani pomoću FlacCheck i vrši se njihovo sortiranje. Prilikom sortiranja
sabira se broj ponavljanja komandnih reči za svaku grupu. AI,Servis i Original predstavljaju
grupe. Nakon ovoga će se u izlaznu datoteku upisati rezultati koje dalje korištimo za dobijanje
grafika prikazanog na slici 13.
Test.bat je izvršna datoteka koja učitava sve audio zapise i sve originalno izgovorene
komande u vidu tekstualnih datoteka, iz zadatog foldera, prosleĎuje ih kao argumente komandne
linije prilikom poziva FlacCheck zajendno sa parametrima frekvencije odabiranja i brojem
rezultata. Nakon obrade svih audio zapisa poziva se Test i kao finalni rezultat dobijamo graf
prepoznavanja komandi.
Rezultati
23
Slika 14 - MSC dijagram FlacChek projekta
Slika 15 - Rezultati prepznavanja glasovnih komandi
Rezultati
24
Ovaj test je raĎen na osnovu snimanja govora 10 lica, koji su izgovorili po 5 rečenica sa
minimalno 5 - 7 komandi. Mozemo zaključiti da je prilično mali broj tačno pogoĎenih komandi
od strane servisa ( manji od 50%) iz više razloga - pozadinski šum, govor više lica, drugačijeg
akcenta, pogrešnog izgovoranja i td… Propuštanjem kroz algoritam veštačke inteligencije
procenat uspešnosti se povećava za 35% od ukupnog broja izgovorenih komandi. Samim tim
imamo oko 70% odigranih poteza u slučaju kada se zadaje izmeĎu 5-7 komandi glasom, dok se
za manji broj zadatih komandi preciznost povećava.
Zaključak
25
6. Zaključak
Ovaj rad predstavlja jedno rešenje realizacije interaktivne aplikacije sa podrškom za
prepoznavanje i mogućnost upravljanja glasom (zadavanjem glasovnih komandi), namenjene
isključivo korisnicima ureĎaja sa Android operativnim sistemom. Aplikacija je napravljena u
programskom jeziku Java, primenom objektno orijentisanog pristupa programiranja zasnovanog
na korišćenju Android sistemskih klasa, menjanjem ili dodavanjem novih. Korišćeno je Eclipse
Helios razvojno okruženje sa ADT Plugin-om i Android SDK Tools.
Na osnovu dobijenih rezultata i iskustva stečenog kroz realizaciju diplomskog rada, može
se zaključiti da se postupak prepoznavanja i obrade glasa (zvuka), odnosno STT tehnologija, na
Android operativnom sistemu može realizovati vrlo jednostavno.
Implementacija se svodi na korišćenje Google API-ja (java programsko rešenje koje se
odnosi na aplikacije) ili slanjem zahteva na odreĎen URL uz pomoć HTTP protokola (rešenje
koje zaobilazi pravljenje aplikativnog dela i može biti veoma korisno za implementaciju na svim
platformama koje podržavju HTTP). Zahvaljujući velikom broju raznovrsnih metoda i interfejsa
koje nam API pruža, moguće je kontrolisati gotovo svaki segment toka obrade. Počevši od
snimanja zvuka, preko indikatora promene njegove jačine, podešavanja pauze u izgovoru izmeĎu
reči, signalizacije završetka govora pa do preuzimanja rezultata nakon obrade.
Verodostojnost dobijenih rezultata je relativna, ali kada se uzme u obzir da ni jedan STT
algoritam nije doveden do savršenstva, nakon izvršenog testiranja, stiče se utisak da su na
zavidnom nivou, tačnije procenat uspešnosti direkto zavisi od količine pozadinske buke prilikom
snimanja. TakoĎe datoteke, u kojima je sniman govor lica sa drugačijim akcentom ili
nepravilnim izgovorom dovodi do povećanja nepreciznosti. Ovaj vid problema se veoma
uspešno zaobilazi implementacijom AI algoritma veštačke inteligencije, koji povećava procenat
uspešnosti do 70% a nekada i više.
Literatura
26
7. Literatura
[1] Vladimir Kovačević, Miroslav Popović: Sistemska programska podrška u realnom
vremenu, Univerzitet u Novom Sadu, Fakultet Tehničkih Nauka, 2002
[2] Reto Meier: Professional Android 4 Application Development (Wrox Professional
Guides) , USA, May 1, 2012
[3] Reto Meier: Professional Android Application Development, USA, 2008
[4] Paul Michael Kilgo: Android OS: A robust, free, open-source operating system for
mobile devices. USA, 2012
[5] Android Summer School 2011 RT-RK Novi Sad
[6] Sajt Wikipedia, The Free Encyclopedia,
http://en.wikipedia.org/wiki/Longest_common_subsequence_problem,
učitano 21.06.2012
[7] Sajt Wikipedia, The Free Encyclopedia, http://sr.wikipedia.org/sr-el/HTTP,
učitano 21.06.2012
[8] Sajt Stackoverflow programerski forum, free to ask questions, free to answer
questions, free to read, free to index…, http://stackoverflow.com/,
korišćen od 1.04.2012 do 21.06.2012
[9] Sajt Android podrške za razvoj, Android Developers,
http://developer.android.com/resources/articles/speech-input.html,
korišćen od 1.04.2012 do 21.06.2012