Documente Academic
Documente Profesional
Documente Cultură
LUCRARE DE DISERTAŢIE
Coordonator ştiinţific:
Prof. Dr. Ing. Dan POPESCU
Masterand:
Ing. CAMACHI Balduino Estison Mugilila
Bucureşti – 2016
Cuprins
1. Introducere ..................................................................................................................... 4
1.1. Beneficii ale sistemele de RV ................................................................................. 6
1.2. Aplicații potențiale pentru viitor ............................................................................. 6
1.3. Cum funcționează Recunoaștere vocală? ............................................................... 7
1.4. Cum este facut? ....................................................................................................... 7
1.4.1. Pasul 1: Extragerea fonemelor ......................................................................... 7
1.4.2. Pasul 2: Modele Markov ................................................................................. 9
2. Scopul proiectului ........................................................................................................ 10
3. Scurta istorie ................................................................................................................ 12
3.1. Secolul 21 ............................................................................................................. 14
4. Modelul acustic construit pe HMM ............................................................................. 15
4.1. Definiția HMM ..................................................................................................... 15
4.2. HMM şi recunoaşterea limbajului vorbit .............................................................. 16
4.3. Problema evaluării unui HMM ............................................................................. 17
4.4. Problema decodării unui HMM ............................................................................ 18
5. Recunoasterea vorbirii ................................................................................................. 19
5.1. Gramatici Context-free (bazate pe reguli) ............................................................ 20
5.2. Gramatici de Dictare ............................................................................................. 21
5.3. Limitari in recunoasterea de vorbire ..................................................................... 21
5.4. Modul de abordare a aplicatiilor de vorbire .......................................................... 23
5.5. Tehnologia de recunoaștere a vocală .................................................................... 23
5.6. Limitări și potențialele ale recunoașterea a vocală ............................................... 25
5.7. Viitorul ale Recunoașterea Vocală ....................................................................... 26
5.8. Aplicații ale Recunoașterii vocale: ....................................................................... 27
6. Formalismul recunoașterii automate limbii (vorbirii) ................................................ 32
7. Arhitectura unui sistem de recunoaştere automată a vorbirii ...................................... 32
8. Dezvoltarea aplicației .................................................................................................. 35
8.1. API în limbaje de procedură ................................................................................. 35
8.2. API în limbaje orientate pe obiect ........................................................................ 36
8.3. Arhitectura si biblioteci API ................................................................................. 38
8.4. API si protocoale .................................................................................................. 38
8.5. Obiect API de schimb și protocoale ..................................................................... 38
8.6. Obiect API de acces la distanță și protocoale ....................................................... 39
8.7. Partajarea API și reutilizarea prin mașină virtuală ............................................... 39
8.8. API-uri Web .......................................................................................................... 40
8.9. Utilizarea Web pentru a partaja conținut .............................................................. 40
8.10. Implementări ..................................................................................................... 41
8.11. Design API ........................................................................................................ 41
8.12. Release policies. ................................................................................................ 42
8.13. Implicații API publice ....................................................................................... 42
8.14. Deprecierea API-ului......................................................................................... 42
8.15. Exemple API ..................................................................................................... 43
8.16. Ce este JSAPI sau MSAPI? ............................................................................... 43
8.17. Scopurile a interfetei Speech API ..................................................................... 43
9. Dezvoltare versiunii Alpha/Beta ................................................................................. 43
9.1. Versiunea Alpha ................................................................................................... 43
9.2. Dezvoltare versiunii Beta ...................................................................................... 44
9.3. Rezultatele obținute in urma testelor .................................................................... 46
2
9.3.1. Limba Portugheză .......................................................................................... 46
9.3.2. Limba română ................................................................................................ 48
9.3.3. Limba engleză................................................................................................ 49
10. Concluzii................................................................................................................... 51
11. Bibliografie ............................................................................................................... 52
12. Anexe ........................................................................................................................ 53
3
1. Introducere
Recunoașterea vocală este procesul de convertire a cuvintelor vorbite în format
digital care poate fi utilizat ulterior pentru tipărire, arhivare, căutare. Termenul de
recunoaștere vocală poate însemna și recunoașterea vorbitorului. Domeniile de
aplicabilitate sunt: Medicină (transcriere medicala), Armată (comenzi vocale pentru
aparate de zbor), antrenarea controlorilor de zbor și pentru persoanele cu handicap.
Alte domenii importante în care RAV se aplică cu succes sunt sistemele de dialog
pentru call-centere şi sistemele de traducere speech-to-speech. Traducerea speech-to-
speech este în acest moment un subiect foarte „la modă” în mai multe centre de cercetare
academice și industriale.
Fiecare dintre aceste aplicaţii este de obicei mult mai restrictivă decât problema
generală care impune transcrierea automată a vorbirii naturale, continue, provenind de la
un vorbitor necunoscut, în orice mediu (zgomotos sau nu). Diferitele surse de variabilitate
în vorbire, care vor fi discutate în continuare, fac sarcina generală de RAV una foarte
dificilă. Cu toate acestea, în multe situaţii practice, variabilitatea este restricţionată.
4
tehnologia RV inca este folosita si in ziua de azi. Limita de dezvoltare ale aplicatiilor si a
resurselor de calcul, au fost costurile ridicate impreuna cu absenta standardelor comune de
a integra tehnonlogia de RV, ce implica aplicatii software.
Mediul afacerilor nu a acceptat inca RV, astfel de tehnologii au rezultat din
totalitatea veniturilor ale SUA, in valoare de 48 milioane de dolari, ce au avut loc in anul
1996. Conform spuselor lui William Meisel, din cadrul discursului numit „Actualizarea
Recunoașterii Vocală” afacerea nu a fost inca transferata la tehnologia RV, conform
calitatii prin capacitatea de a intelege cuvintele transmise, capactitatea de a diferentia
cuvintele precum: hair, here, hear, impreuna cu costurilor ridicate si a resurselor de calcul,
si lipsa standardelor comune de a integra tehnologia de RV, ce implica aplicatii software.
5
Standarde au fost dezvoltate, dar inca trebuie sa fie imbunatatite. Numeroase
motoare au fost dezvoltate cu o gamă largă de capacități. Aceste progrese au avut
ca rezultat produse cum ar fi: Interactive Voice Response systems (IVRs), inclusiv
activități de call center și sisteme de mesagerie vocală. Cyber Voice Incorporated
este una dintre multele firme care foloseste tehnologia RV pentru a îmbunătăți
operațiunile de call center pentru clienți. Voice-to-text (VTT), aplicațiile care iau
dictare de cuvinte și cifre și în mod automat le introduce în cuvânt de procesoare /
foi de calcul și sunt utilizate pentru a efectua comenzi de calcul obișnuite. IBM si
alti firme de software oferă aplicații cu caracteristici similare. O listă cu alte
aplicații RV disponibile în comerț arată potențialul tehnologiei RV.
VTT crește eficiența lucrătorilor care desfășoară activități extinse de tastare sau de
date de intrare (numere și cuvinte pot fi dictate). Acest lucru ar putea fi deosebit de
benefic în mediile juridice, medicale și de asigurare în cazul în care se produc
cantități mari de dictare și transcriere.
VTT RV aplicații au capacitatea de a preveni tulburările repetitive tulpina cauzate
de tastaturi. Se elimină necesitatea de a introduce sau de a folosi un mouse. Cu
toate acestea, incidente anecdotice de tulburări de voce cauzate de utilizarea de RV
sunt deja la suprafață în mass-media.
VTT pot fi folosite pentru a ajuta persoanele cu dizabilități.
Sistemele interactive de răspuns vocal au multe beneficii în gestionarea centrelor de
apel, prin reducerea costurilor de personal și prin selectarea apeluri telefonice și
apelurile către repartizarea furnizorul corect / corespunzătoare serviciului
(calculator sau utilizator).
6
Tehnica RV: Un utilizator mașină de spălat ar spune pur și simplu aparatul "începe
un ciclu rece". Puterea de calcul RV ar depinde de un PC central (acasă), sau pe
internet, care este conectat la aparat și execută comanda pentru el si alte
electrocasnice. PC-ul central sau internet, resurse este necesară deoarece costul
instalării puterii de calcul și a software-ului pe fiecare aparat în parte ar fi
neeconomică.
Cum face un calculator conversie discurs vorbit în date pe care le poate apoi să
manipuleze sau să execute? Ei bine, dintr-o perspectivă generală, ceea ce trebuie
făcut? Inițial, atunci când vorbim, un microfon convertește semnalul analogic al
vocii noastre în bucăți digitale de date pe care computerul trebuie să analizeze. Este
de la aceste date că computerul trebuie să extragă informații suficiente pentru a
considera cu încredere cuvântul vorbit. Aceasta nu este o sarcină mică! De fapt, la
începutul anilor 1990, cele mai bune recognizers obținândiniau o rată de eroare de
15%. Acum, însă, că procentul de eroare a scăzut la la nivelul de 1-2%, deși acest
lucru poate varia de la om la om, depinde foarte mult accentul, si cat de clar o
persoana vorbeste.
[a] amar
[e] elev
[i] iris
[o] ocol
[u] uluc
[ ə] fără
[ ɨ] vîrî
7
1.4.1.1. Accentul
În limba română fiecare cuvînt polisilabic are o anumită silabă pronunțată mai
puternic decît celelalte. În cele mai multe cazuri poziția schimbată accentului nu poate
modifica sensul unui cuvînt, putînd doar să dea acelui cuvînt un "accent" nenatural. Există
totuși situații cînd poziția accentului determină sensul cuvîntului, iar existența acestui
fenomen demonstrează că în limba română accentul este "fonemic." De exemplu, în
propozițiile silaba accentuată din lumina determină categoria gramaticală a cuvîntului
(substantiv, respectiv verb) și deci sensul acestuia. Prin comparație, în
limbile franceză, maghiară accentul este fix și deci nu poate modifica sensul cuvintelor.
Mergeam la lumina lanternei.
și
Lanterna nu lumina îndeajuns.
1.4.1.2. Cronemul
1.4.1.3. Tonuri
Unele limbi, ca de exemplu limbile cunoscute sub numele colectiv limba chineză,
dispun de foneme exprimate prin intonația dată individual fiecărei silabe. Toate limbile
folosesc un sistem sau altul de intonație (în limba română de exemplu intonația este
esențială pentru diferențierea enunțurilor de întrebări), dar numai în limbile tonale sensul
unui cuvînt separat se poate schimba o dată cu modificarea tonului. Exemplul clasic în
acest sens este cuvîntul "ma" din limba chineză, care în funcție de ton poate să aibă sensuri
complet diferite.
Foneme sunt adesea extrase prin rularea de undă printr-o transformare Fourier.
Aceasta permite forma de undă să fie analizată în domeniul de frecvență. Este, probabil,
mai ușor de înțeles acest principiu prin uita la un spectrograf. Un spectrograf este un grafic
3D a unei forme de undă de frecvență și amplitudine în funcție de timp. În multe cazuri
însă, amplitudinea frecvenței este exprimată ca o culoare (nuanțe de gri, fie, sau o culoare
gradient).
8
1.4.2. Pasul 2: Modele Markov
9
2. Scopul proiectului
Scopul proiectului consta in realizarea unei aplicații informatice capabila sa
recunoască limba in care este scris un text prin intermediul vocii. Particularitatea acestei
aplicații, fata de alte rezultate similare, consta in faptul ca limba e recunoscuta in mod
dinamic, deoarece textul nu este introdus static, ci este primit de aplicație in mod continuu,
sub forma de flux. De asemenea, textul poate fi scris in mai multe limbi, iar fragmentele de
text scrise in limbi diferite pot fi chiar si de numai câteva cuvinte.
Identificarea limbii prin metoda statistică a analizei n-gramelor este probabil ce mai
folosită metodă; în acest studiu se prezintă elementele teoretice ale metodologiei pe baza
căreia urmează să fie elaborat algoritmul aplicaţiei, ţinând cont de specificaţiile care vor fi
definite ulterior. Etapa 2 se încheie cu prezentarea altor abordări utilizate la identificarea
limbii.
În Engleză, acelaşi verb, la acelaşi timp, are doar două forme morfologice diferite:
go şi goes. Limbile Germană şi Turcă sunt două dintre aşa-numitele limbi aglutinative. În
aceste limbi se pot forma cuvinte noi prin concatenarea altor cuvinte sau morfeme. Astfel
10
dimensiunea vocabularului de cuvinte pentru o limbă aglutinativă este mult mai mare,
acest lucru complicând sarcina de recunoaştere automată a vorbirii.
Un alt factor important care influenţează dificultatea procesului de RAV este stilul
vorbirii. Stilul vorbirii se referă la cât de fluentă, naturală sau conversaţională este vorbirea
ce trebuie recunoscută. În mod evident, recunoașterea de cuvinte izolate, unde cuvintele
sunt separate de pauze de linişte, este mult mai simplă decât recunoașterea vorbirii
continue, unde cuvintele sunt pronunţate legat şi vorbirea trebuie segmentată înainte de
recunoaştere. De fapt, primele sisteme de recunoaștere automată a vorbirii puteau rezolva
problema localizării graniţelor între cuvinte numai dacă vorbitorul făcea pauze generoase
în pronunţarea lor: Dragon Dictation [Baker, 1989] este un bun exemplu de un sistem de
recunoaştere de cuvinte izolate cu vocabular extins.
Sarcinile de recunoaştere a vorbirii continue pot fi mai departe clasificate în funcţie
dificultatea lor. De exemplu, sarcina de recunoaștere a vorbirii citite este mult mai simplă
decât sarcina de recunoaștere a vorbirii conversaţionale sau spontane. Variabilitatea
acustică mai mare face ca sarcina urmă să fie mai dificilă. Această diferenţă în dificultate
între sarcinile de vorbire continue este reflectată în ratele crescute de eroare pentru
recunoașterea vorbirii spontane, comparativ cu recunoașterea vorbirii citite (a se vedea
Tabelul 1).
11
3. Scurta istorie
Încă din anul 1932, cercetători de la Bell Labs ca Harvey Fletcher investigau știința
percepției vorbirii. În 1952 trei cercetători de la Bell Labs au construit un sistem de
recunoaștere de cifre cu un singur difuzor. Sistemul lor a lucrat prin localizarea formanților
în spectrul de putere al fiecărui enunț. Tehnologia anilor 1950, era limitata la sisteme cu un
singur vorbitor cu vocabulare de aproximativ zece cuvinte.
Din păcate, finanțarea de la Bell Labs s-a anulat timp de mai mulți ani, când, în
1969, John Pierce, un om cu influența a scris o scrisoare deschisă, care a fost critic legat de
cercetare de recunoaștere a vorbirii. Scrisoare lui a comparat Pierce recunoaștere a vorbirii
cu "scheme pentru transformarea apei în benzină, extragerea aurului de la mare, in tratarea
cancerului, sau de a merge la luna." Pierce a oprit fluxul de fonduri către cercetare de
recunoaștere a vorbirii la Bell Labs.
Raj Reddy a fost prima persoană care a contiunuat recunoașterea vorbirii ca student
absolvent de la Universitatea Stanford, la sfarsitul anilor 1960. Sistemele anterioare
impuneau utilizatorii să facă o pauză după fiecare cuvânt. Sistemul lui Reddy a fost
conceput pentru a emite comenzi pentru jocul vocale de șah. De asemenea, în jurul aniilor
60 cercetătorii sovietici au inventat timp dinamic colmatare algoritm si au folosit pentru a
crea un ”recognizer” capabil să funcționeze pe un vocabular de 200 de cuvinte. Obținerea
independenței difuzorului a fost un obiectiv major al cercetătorilor nerezolvat pe parcursul
acestei perioade de timp.
Sub conducerea lui Fred Jelinek, IBM a creat o mașină voice activated de scris
numita ”Tangora”, care ar putea să se ocupe de un vocabular de 20.000 cuvânt de la
12
mijlocul anilor 1980. Abordarea statistică Jelinek a pus un accent mai puțin pe emularea
modul în care procesele de creier uman și înțelege vorbirea în favoarea utilizării tehnicilor
de modelare statistice cum ar fi HMM. (Grupul Jelinek descoperit în mod independent,
aplicarea HMM în vorbire.) Acest lucru a fost controversat cu lingviști, deoarece HMM
sunt prea simplist pentru a explica multe caracteristici comune ale limbilor umane. Cu
toate acestea, HMM s-au dovedit a fi o modalitate extrem de utilă pentru modelarea
vorbirii și a înlocuit timp dinamic urzirea pentru a deveni dominatul algoritmului de
recunoaștere a vorbirii în 1980. IBM a avut câțiva concurenți, inclusiv Dragon Systems
fondat de James si Janet Baker în 1982. 1980 a văzut, de asemenea, introducerea modelului
limbajului n-gram. Katz a introdus modelul de back-off în 1987, care a permis modele
lingvistice să utilizeze mai multe lungime n-grame. În același timp, de asemenea, a fost
CSELT (Centro Studi e Laboratori Telecomunicazioni) a folosit HMM (în special, a
diphonies) să recunoască cum ar fi limba italiană. În același timp, CSELT a condus o serie
de proiecte europene (Esprit I, II), și a rezumat state-of-the-art într-o carte, mai târziu
(2013), republicat.
Încă unul dintre foștii studenți lui Raj Reddy, Xuedong Huang, a dezvoltat sistemul
Sfinx-II la CMU. Sistemul Sphinx-II a fost primul care a făcut-difuzor independent,
vocabular mare, recunoaștere continuă vorbire și a avut cea mai bună performanță în
evaluarea DARPA 1992. Huang a continuat cu recunoaștere a vorbirii la Microsoft în
1993.
In 1990 s-a văzut prima introducere a tehnologiilor de recunoaștere a vorbirii de
succes comercial. Până la acest punct, vocabularul sistemului de recunoaștere a vorbirii
tipic comercial a fost mai mare decât vocabularul uman mediu. In anul 2000, Lernout &
Hauspie a achizitionat Dragon Systems si a fost un lider in industrie pana cand un scandal
contabil a pus capăt companiei în 2001. Tehnologia L & discurs H a fost cumpărata de
ScanSoftTM, care a devenit Nuance în 2005. În 2011 Nuance a achiziționat Loquendo,
compania de spin-off din fostul grup de tehnologie CSELT în 2001. Apple si-a inițial
software-ul de la Nuance pentru a oferi capacitatea de recunoaștere a vorbirii a asistentului
său digitală ”Siri”.
13
3.1. Secolul 21
14
În lunga istorie a recunoașterii vorbirii, atât sub formă superficială și forma
profundă (de exemplu, plasele recurente) ale rețelelor neuronale artificiale au fost explorate
de mai mulți ani, pe parcursul anilor 80, 90, și de câțiva ani, în 2000. Dar aceste metode nu
a câștigat niciodată pe non-uniform intern-gaussian model de model de împletesc amestec /
Markov ascunse (MMG-HMM), tehnologia bazată pe modele generative de vorbire
discriminativele de vorbire. O serie de dificultăți-cheie au fost bine analizate în anii 1990,
inclusiv diminuarea gradientului și structură slabă de corelare temporală în modelele
predictive neuronale. Toate aceste dificultăți au fost un plus pentru rezolvarea problemelor
de ziua de azi, din cauza puterii mare de calcul. Cei mai mulți cercetători de recunoaștere a
vorbirii care au înțeles aceste bariere, prin urmare, au schimbat plase neuronale pentru a
urmari modelarea generativă care se apropie până la recenta reapariția învățării profunde în
jurul începând cu 2009-2010, si au reusit sa depășeasca toate aceste dificultăți.
15
A={aij} – Matricea cu probabilităţiile de tranziţie, unde aij este probabilitatea de a
trece din starea i în starea j.
B={bi(k)} – Matricea de ieşire, unde bi(k) este probabilitatea să se emită simbolul
ok la starea i. Pentru cazul în care ieșirea unui HMM ia valori continue, atunci bi(k)
este o funcție de densitate de probabilitate (în particular, la această lucrare ieșirea
unei stări este modelată printr-o mixtură gaussiană).
Π = {πi} – Probabilitatea ca starea iniţială să fie starea i. Pentru ca un HMM să fie
complet, este nevoie să se specifice numărul de stări N, dimensiunea M a
alfabetului de observaţii O (dacă este cazul), şi matricile de probabilităţi A, B, Π.
Aşadar un model îl putem nota cu:
Ф=(A, B, Π)
Ca să putem aplica acest model în lumea reală trebuie rezolvate următoarele probleme:
A. Problema evaluării – Dat fiind un model Φ şi o secvenţă de observaţii
O=(O1,O2,...,OT), care este probabilitatea P(O|Φ) ca această secvenţă O să fi fost
generată de modelul Φ?
În esență, recunoașterea formelor sau a vorbirii constă în a decide care model (sau
succesiune de modele) se potrivește cel mai bine cu un set de observaţii date pe baza
probabilităţii P(O|Φ). Ceea ce înseamnă că problema recunoașterii în sine este rezolvată
dacă avem modele antrenate. Decodarea este importantă la antrenarea HMM-urilor în cazul
recunoaşterii vorbirii continue. Cea mai dificilă este problema antrenării sau a estimării.
Dintr-un set de date de antrenare trebuie estimați parametrii HMM-ului astfel încât ei să
caracterizeze cât mai bine unitatea de voce aleasă.
Cum parametrii de voce iau valori intr-un spaţiu continuu trebuie ca şi vectorul de
ieşire al HMM-ului sa aibă valori continue. Din acest motiv se folosesc mixturile gaussiene
pentru modelarea ieșirii stărilor HMM-ului. Fiecare parametru al vectorului de ieşire poate
fi modelat printr-o sumă ponderată de funcţii de distribuţie normală:
16
unde:
Trebuie observat că se sumează toate probabilitățile obținute din toate stările care în
momentul t tranzitează în starea j. Cum prima și ultima stare a HMM sunt non-emisive,
rezultă următoarele condiții inițiale și finale:
17
Mai trebuie observat că probabilitatea bj(ot), fiind valoarea unei funcții de densitate
de probabilitate într-un punct, este un scor (likelihood în limba engleză) obținut de fiecare
stare pentru un vector de observație dat. De aceea, în această lucrare se va folosi, în
continuare,noțiunea de scor.
18
Algoritmul de decodare Viterbi
5. Recunoasterea vorbirii
Recunoasterea vocii este un process de convertire a limbii vorbite intr-un text scris
sau o forma similara. Caracteristicile de baza a unui recunoscator de voce care are ca
suport Java Speech API sunt:
Suporta o singura limba specificata;
Proceseaza un singur stream audio de intrare;
Se poate optional sa adapteze vocea pentru toti useri ;
Gramatica poate fi updatata dynamic;
Are un mic set definit de propietati a unor aplicatii controlabile.
19
Generarea rezultatului : ofera aplicatiei cu informatii despre cuvinte care au fost
detectate de recunoscator in streamul audio urmator. Rezultatul informatiei este
intotdeauna dat dupa ce recunosterea propozitiei este completa, dar poate fi data si
in timpul procesului de recunoastere. Rezultatul intotdeaunea indica cea mai buna
“ghicire” a motorului de vorbire a ceea ce a spus utilizatorul, dar poate indica si o
“ghicire” alternative.
Cele mai multe procese a unui motorului de vorbire sunt automate sin u sunt
controlate de creatorul aplicatiei. De exemplu, plasarea microfonului, zgomotul de fond,
calitatea placii de sunet, performantele sistemului, puterea procesorului si sistemul de sunet
folosit , toate afecteaza performanta recunoscatorului de vorbire care este peste controlul
aplicatiei.
Modul principal cum o aplicație controleaza acivitatea motorului de vorbirei este prin
controlare gramaticii.
Gramaticile de dictatre impune cateva restrictii a cea ce se poate spune, facand mai
acesibil intrari de voce. Costul a unei libertati mai mari este aceea de a necesita un sistem
mai performant cu calitea de placi audio mai ridicata si tinde spre mai multe erori.
O gramatica de dictare este de obicei mai mare si mai complexa decat o gramatica
bazata pe reguli. Acesata gramatica este realizata pe o statistica care cuprinde o colectie de
text scris. Din fericire , creatori de aplicatii nu trebuie sa stie despre aceasta pentru ca un
motor de vorbire care suporta o gramatica de dictare prin Java Speech API are o gramatica
de dictare build-in. O aplicatie care are nevoie sa foloseasca o gramatica de dictare trebuie
simplu sa ceara o referenta la ea si se aciveaza cand un utilizator ar putea spune ceva
asemanator cu ce este in gramtica de dictare.
Stabilitatea unui motor de vorbire este de cele mai multe ori definit ca si
“acuratetea recunoasterii”. Acuratetea este deobicei dat de un procentaj si de multe ori de
procentajul corectitudinii recunoasterii cuvintelor. Pentru ca procentajul este masurat
diferit si depinde in mare masura de task si de conditiile de testare nu este in totdeauna
posibil sa comparam motorele de vorbire doar prin procentajul lor de acuratete a
recunoasterii. Un programator trebuie in acelasi timp sa considere cat de serioasa este
eroarea de recunoastere: nerecunoasterea a unei comenzi cum ar fi “delete all files” poate
avea consecinte grave.
Utilizatorii care au accente sau voci atipice pot duce la o acuratete mai mica;
21
Aplicatiile cu garmaticii mai simple au o mai buna acuratete;
Cati timp acesti factori pot fi foarte importanti, impactul lor poate varia intre
motorele de vorbire pentru ca fiecare recunostere a vorbirii optimizeaza performata lor prin
negocierea a unei criteri. De exemplu, sunt motorele de vorbire care sunt facute sa lucreze
stabil in medii cu zgomot ridicat (fabrici sau mine), dar sunt restrictionate la gramatici
foarte simple. Sitemele de dictare au gramatici foarte complexe, dar au microfoane
performante, medii silentioase, utilizatorii vorbesc clar si sisteme de calcul puternice. Sunt
recunoscatoare de voce care isi adapteaza procesele de recunoastere la o voce
particularizata pentru a inbunatatii acuratetea, dar ar fi necesar invatarea utilizatorului.
Deci, utilizatorii si aplicatia developers de multe ori beneficiaza de selesctarea unui
recunoscator de voce potrivnic pentru un task specific si mediu.
Numai cativa din acesti factori pot fi controlati prin programare. Principalul factor
de control al aplicatiei care influenteaza acuratetea recunosaterii este complexitatea
gramaticii. Performanta recunoscatorului de voce poate scadea cu cat gramatica devine din
ce in ce mai complexa, si mai poate scadea cu cat sunt mai multe gramaticii active
simultan. Dar, facand o interfata mai naturala este necesara o gramatica mai complexa si
mai flexibila.
In Tabelul de mai jos sunt cateva din cele mai intalnite cause a erorilor mentionate.
22
Microfonul utilizatorului nu este configurat corespunzator.
Misfire Sunet non-vorbire (tusire, rasete).
Sunetul de fond activeaza recunoasterea.
Utilizatorului vorbeste cu alta persona.
2. Sintactic si Analiza Symantec: Acest proces este mult mai complex decât
Keywording. Pe măsură ce datele sonor intrările difuzoarelor, programul RV
analizează zgomotul și calculează ceea ce se crede (de sistem) pentru a fi ceea
ce intrările de utilizator. Această tehnică necesită un set extins de algoritmi,
reguli și definiții. De exemplu, atunci când cuvântul "doi" se vorbește în sistem,
programul poate prezice că "2" este destinat (în loc de "prea" sau "a").
Computerul poate determina sensul corespunzătoare al acestei omonimă prin
analiza sintaxa, semantica și structura propoziții. Această metodă este aplicată
cel mai bine de procesare de text și de introducere a datelor.
23
O altă tehnologie importantă asociată cu RV este capacitatea de program pentru a
înțelege vorbirea de fluid față de vorbire nefirești, cu pauze între fiecare cuvânt. Această
capacitate se marchează diferența dintre sistemele de vorbire continuă și sisteme de vorbire
discrete. În timp ce sistemele de vorbire discrete, nu favorizează vorbirea umană naturală,
acestea sunt extrem de precise. Pe de altă parte, după cum era de așteptat, modelul de
vorbire continuu, care este mai aproape de a vorbi naturale unui om are o rată de precizie
mai mică.
O serie de companii s-au dezvoltat și distribuit "motoarele de vorbire." Aceste
"motoare" sunt, în esență, din toate posibile bănci de date cuvinte, fraze, silabe, foneme,
etc., prin care RV programele de căutare pentru a găsi un rezultat rezonabil. Fiecare motor
de vorbire oferit de fiecare dezvoltator diferit funcționează pe un principiu diferit. De
exemplu, motoarele Microsoft Speech Recognition folosi fie un "model de acustic" sau un
"model de limbă dictare." Alte companii au propriile lor caietul de sarcini.
Voice XML
24
"își propune să conducă piața de acces la Internet și voce activat de telefon prin
promovarea unei specificații standard pentru VXML, un limbaj de calculator folosit pentru
a folosit pentru a crea conținut și servicii care pot fi accesate prin telefon Web." [1] Odată
ce un standard în comunitatea de calculator este stabilit, va exista o adaptare sporită a
tehnologiei de recunoaștere a vocii de către dezvoltatorii de software terță parte. Chiar și
programe simple vor fi capabili de a încorpora tehnologia de recunoaștere a vocii, fără o
investiție mare în timp de dezvoltare și de calificare.
25
limitare cu privire la eficacitatea tehnologiei RV. Este relativ ușor pentru computer pentru
a filtra zgomotul de fond, atunci când vorbim într-un birou liniștit, dar dacă ar fi să spunem
aceeași frază pe o stradă aglomerată RV sisteme vor fi confundate.
Deja se poate folosi K.I.T.T. de la faimosul serial din anul 1980 "Knight Rider" in
ziua de azi. Fie că vrem să luam cel mai rapid traseu la birou sau întrebam la care persoana
care este lângă noi, tehnologiile similare cu cele demonstrate în această serie de televiziune
science-fiction va fi în curând caracteristici standard în automobile. De fapt, Clarion a
dezvoltat deja o primă generație AutoPC care poate răspunde la comenzi vocale. Acest
produs utilizează sistemul de operare Windows CE Microsoft pentru a efectua "mâini
libere" funcții, cum ar fi voce activat apelarea prin intermediul unui telefon mobil, asistență
cu instrucțiuni de ghidare și informații suplimentare despre vreme, știri și stocuri.
26
de a nu putea să vorbească toate gândurile într-o manieră coerentă și rațională. In schimb,
infricosator deoarece poate fi, computerele pot avea sisteme care pot primi și interpreta
datele neurologice.
O aplicatie efectiva este una care simuleaza aspecte ale conversației om-om.
Sisteme auto.
27
O problemă mai semnificativ este faptul că majoritatea EHRs nu au fost adaptate în
mod expres pentru a beneficia de capacitățile de recunoaștere vocală. O mare parte a
interacțiunii clinicianului cu EHR implică navigarea prin interfața cu utilizatorul utilizând
meniuri, și fila / clicurile pe butonul, și este puternic dependentă de tastatură și mouse-ul:
navigare pe bază de voce oferă beneficii ergonomice modeste. Prin contrast, multe sisteme
extrem de personalizate pentru radiologie sau patologie dictarea punerea în aplicare de
voce "macro-uri", în cazul în care utilizarea anumitor fraze - de exemplu, "raport normal",
se va completa automat într-un număr mare de valori implicite și / sau de a genera
șabloane, care va variază în funcție de tipul de examen - de exemplu, o radiografie toracică
vs o serie de contrast gastro-intestinale pentru un sistem de radiologie.
Utilizare terapêutica
Lucrand cu piloți suedezi care zboară în JAS-39 Gripen carlingă, Englund (2004) a
constatat recunoașterea sa deteriorat odată cu creșterea G-sarcini. De asemenea, sa
concluzionat că adaptarea îmbunătățit foarte mult rezultatele în toate cazurile și modele de
introducere pentru respirație a fost demonstrat de a imbunatati in mod semnificativ
scorurile de recunoaștere. Contrar a ceea ce s-ar putea fi de așteptat, s-au găsit nici un efect
de rupt în limba engleză a difuzoarelor. Era evident că vorbirea spontană a cauzat
probleme pentru recognizer, cum ar fi de așteptat. Un vocabular restrâns, și mai presus de
toate, o sintaxă adecvată, astfel, ar putea fi de așteptat să îmbunătățească în mod substanțial
acuratețea recunoașterii.
28
șablon. Sistemul nu este utilizat pentru sarcini critice critice sau arme de siguranță, cum ar
fi eliberarea armă sau coborârea șasiului, dar este folosit pentru o gamă largă de alte funcții
din cabină. Comenzile vocale sunt confirmate prin feedback vizual și / sau fonetica.
Sistemul este văzută ca element de design major în reducerea volumului de muncă pilot, și
chiar și permite pilotului să atribuie ținte pentru el însuși, cu două comenzi vocale simple,
sau la oricare dintre wingmen sale cu doar cinci comenzi.
Elicoptere
29
USAF, USMC, US Army, US Navy, și FAA precum și o serie de organizații
internaționale de formare ATC, cum ar fi Australian Royal Air Force și autoritățile aviației
civile din Italia, Brazilia și Canada sunt în prezent, folosind simulatoare ATC cu
recunoaștere a vorbirii de la un număr de furnizori diferiți.
Studenții care sunt cu handicap fizic sau suferă de un prejudiciu Efort / alte leziuni
la nivelul extremitatilor superioare pot fi eliberate din a fi nevoie să vă faceți griji cu
privire la scrierii de mână, dactilografiere, sau care lucrează cu scrib la misiuni școlare prin
utilizarea unor programe de vorbire în text. Ele pot utiliza, de asemenea, tehnologia de
recunoaștere a vorbirii pentru a se bucura în mod liber căutarea pe Internet sau utilizând un
computer la domiciliu, fără a fi nevoie să opereze fizic un mouse și tastatură.
30
Persoane cu dizabilități
Acest tip de tehnologie poate ajuta pe cei cu dislexie, dar alte dizabilități sunt încă
în discuție. Eficacitatea produsului este problema care împiedică a fi eficient. Cu toate că
un copil poate fi capabil să spună un cuvânt, în funcție de cât de clar au spun ca tehnologia
ar putea crede că spun un alt cuvânt și introduceți greșit. Oferindu-le mai mult de lucru
pentru a stabili, făcându-le să trebuie să ia mai mult timp cu fixare cuvântul greșit.
Alte aplicații:
31
6. Formalismul recunoașterii automate limbii (vorbirii)
Procesul recunoaşterii automate a vorbirii (RAV) vizează transformarea unui
semnal audio ce conţine vorbire într-o succesiune de cuvinte. Recunoaşterea automată a
vorbirii este unul dintre primele domenii în care tehnicile de modelare statistică (în care
modelele se creează pe baza unor catintăţi mari de date) s-au impus ca şi standard.
Platforma statistică pentru recunoaşterea automată a vorbirii a fost creată şi dezvoltată de-a
lungul a două decenii de către Baker [Baker, 1975], o echipă de cercetători de la compania
IBM [Jelinek, 1976; Bahl, 1983] şi o echipă de cercetare-dezvoltare de la compania AT&T
[Levinson, 1983; Rabiner, 1989]. Procesul de transformare a vorbirii în text poate fi
formulat într-o manieră statistică astfel: Care este cea mai probabilă secvenţă de cuvinte
W* în limba L, dat fiind mesajul vorbit X? Reprezentarea formală utilizează funcţia
argmax, care selectează argumentul ce maximizează probabilitatea secvenţei de cuvinte:
1.1
Dezvoltarea din Ecuaţia 1.1 are la bază regula Bayes şi s-a făcut ţinând cont de
faptul că probabilitatea mesajului vorbit p(X) este independentă de secvenţa de cuvinte W.
Ultimul rezultat evidenţiază doi factori care pot fi estimaţi direct. Problema iniţială (găsirea
secvenţei de cuvinte pe baza mesajului vorbit) a fost împărţită în două sub-probleme mai
simple: a) estimarea probabilităţii apriori a secvenţei de cuvinte p(W) şi b) estimarea
probabilităţii mesajului vorbit dată fiind secvenţa de cuvinte pronunţată p(X|W). Primul
factor poate fi estimat utilizând exclusiv un model de limbă, iar cel de-al doilea poate fi
estimat cu ajutorul unui model acustic.
Cele două modele pot fi construite independent aşa cum se va vedea în secţiunea
următoare, dar vor fi folosite împreună pentru a decoda un mesaj vorbit, aşa cum arată
Ecuaţia 1.1.
32
Figura 1. Arhitectura generală a unui sistem de recunoaştere a vorbirii
Modelul acustic are rolul de a estima probabilitatea unui mesaj vorbit, dată fiind o
succesiune de cuvinte. În sistemele de RVC actuale modelul acustic nu foloseşte cuvinte ca
unităţi acustice de bază pentru că: a) fiecare sarcină de RAV are un vocabular de cuvinte
diferit pentru care nu există modele deja antrenate şi nici date de antrenare disponibile şi b)
numărul de cuvinte diferite dintr-o limbă este prea mare. În locul cuvintelor, se utilizează
unităţi acustice de bază sub-lexicale, de exemplu foneme, sau, mai recent, chiar unităţi sub-
fonemice numite senone. Prin urmare, modelul acustic este format dintr-un set de modele
pentru foneme (sau senone) care se conectează în timpul procesului de decodare pentru a
forma modele pentru cuvinte şi apoi modele pentru succesiuni de cuvinte. Acestea sunt
utilizate în final pentru a estima probabilitatea ca mesajul rostit de vorbitor să fie format
dintr-o succesiune sau alta de cuvinte. Experienţa a arătat că această abordare generativă
pentru modelele acustice poate fi foarte bine implementată utilizând modele Markov
ascunse (hidden Markov models - HMM). Pentru mai multe informaţii despre modul cum
funcţionează modelele acustice consultaţi platforma „Principiile de bază ale modelării
acustice”.
33
acustic se construieşte strict pe baza unui set de clipuri audio înregistrate asociate cu
transcrierea textuală a mesajelor vorbite şi a unui dicţionar fonetic ce cuprinde toate
cuvintele din respectiva transcriere textuală. În cazul sistemelor de RVC cu vocabular
extins se folosesc modele de limbă statistice, care se construiesc utilizând corpusuri de text
de dimensiuni cât mai mari şi cât mai adaptate domeniului din care fac parte mesajele
vorbite ce trebuie decodate. În sistemele de RVC cu vocabular redus se folosesc
preponderent modele de limbă de tip gramatică cu reguli, iar pentru construcţia acestora nu
este nevoie de resurse textuale.
34
8. Dezvoltarea aplicației
Application Programming interface – API (Interfața de programare a aplicației)
Un API diferă de la o aplicație de interfață binară (ABI), prin aceea că un API este
pe bază de cod sursă în timp ce un ABI este o interfață binar. De exemplu, POSIX este un
API, în timp ce Standard Baza de Linux oferă un ABI.
API-uri sunt una dintre cele mai comune modalități de companii de tehnologie
integrează unele cu altele. Cele care furnizează și să utilizeze API-uri sunt considerate ca
fiind membri ai unui ecosistem de afaceri.
În cele mai multe limbaje de procedură, un API specifică un set de funcții sau
rutine care realizează o anumită sarcină, sau li se permite să interacționeze cu o
componentă software specific. Această specificație este prezentată într-un format care
poate fi citit uman în cărți de hârtie sau în format electronic, cum ar fi cărți electronice sau
ca pagini de om. De exemplu, API matematica pe sistemele Unix este o specificație cu
privire la modul de utilizare a funcțiilor matematice incluse în biblioteca matematică.
35
Printre aceste funcții există o funcție numită sqrt (), care poate fi folosit pentru a calcula
rădăcina pătrată a unui număr dat.
Comanda Unix man 3 sqrt prezintă semnătura funcției sqrt în forma:
SYNOPSIS
#include <math.h>
double sqrt (double X);
float sqrtf (float X);
DESCRIPTION
sqrt calculează rădăcina pătrată pozitivă a argumentului. ...
RETURNS
În caz de succes, rădăcina pătrată este returnata. În cazul în care X este real și
pozitiv…
Această descriere înseamnă că funcția sqrt () întoarce rădăcina pătrată a unui număr
în virgulă flotantă pozitiv (de precizie simplă sau dublă), ca un alt număr în virgulă mobilă.
Pagina principală, de asemenea, prevede că programul apelant trebuie să includă fișierul
antet math.h pentru a fi capabil de a face referire la funcțiile prezente în biblioteca
matematică.
In acest caz API, poate fi interpretată ca și colecția de fișiere include utilizate de un
program, scrise în limbajul C, pentru a face referire această funcție de bibliotecă și uman
descriere care poate fi citit furnizată de către paginile man.
În mod similar, alte limbi au biblioteci procedurale; de exemplu, Perl are API-uri
dedicate pentru aceeași sarcină matematică cu documentație încorporată disponibilă, care
poate fi accesat folosind utilitarul perldoc:
$ perldoc -f sqrt
sqrt EXPR
sqrt #Return the square root of EXPR. If EXPR is omitted, returns
#square root of $_. Only works on non-negative operands, unless
#you've loaded the standard Math::Complex module.
În forma sa cea mai simplă, un API obiect este o descriere a modului în care
obiectele funcționează într-un anumit limbaj orientat pe obiect - de obicei, este exprimat ca
un set de clase cu o listă asociată de metode de clasă.
De exemplu, în Java, dacă scanerul de clasă este de a fi utilizat (o clasă care citește
de intrare de la utilizator la programe bazate pe text), este necesar să se importe biblioteca
java.util.Scanner. Apoi obiecte de tip scaner pot fi folosite prin invocarea unor metode din
clasa ":
import java.util.Scanner;
public class Test {
public static void main(String[ ] args) {
System.out.println("Enter your name:");
Scanner inputScanner = new Scanner(System.in);
String name = inputScanner.nextLine();
System.out.println("Your name is " + name + ".");
inputScanner.close();
36
}
}
În exemplul de mai sus, metodele nextLine () și close () fac parte din API pentru
Scanner class, și, prin urmare, sunt descrise în documentația pentru API, de ex .:
Mai general, se poate vedea API ca și colectarea tuturor tipurilor de obiecte se pot
deriva din definițiile de clasă și comportamentele asociate lor posibile. Din nou: utilizarea
lor este mediată prin metodele publice, dar în această interpretare, metodele sunt văzute ca
un detaliu tehnic modului în care este implementat comportamentul.
De exemplu: o clasă care reprezintă o stivă poate expune pur și simplu, în mod
public două metode de a împinge () (pentru a adăuga un nou element în stivă) și pop ()
(pentru a extrage ultimul element, ideal plasat pe partea de sus a stivei).
În acest caz, API-ul poate fi interpretat ca pop două metode () și împinge (), sau,
mai general, ca și ideea că se poate utiliza un element de tip stivă care implementează
comportamentul unui stivă: un morman expune partea superioară a acesteia pentru a
adăuga / elimina elemente. Cea de a doua interpretare pare mai adecvată în spiritul
orientării obiectului.
Acest concept poate fi realizată la punctul în care o interfață de clasă într-un API nu
are metode deloc, ci numai comportamente asociate cu ea. De exemplu, API-urile de limbă
Lisp Java și includ interfața numită Serializable, care este o interfață marker care necesită
fiecare clasă de punere în aplicare să se comporte într-un mod serializate. Acest lucru nu
necesită punerea în aplicare a unei metode publice, ci necesită mai degrabă orice clasă care
implementează această interfață să se bazeze pe o reprezentare care poate fi salvat
(serializate) în orice moment.
În mod similar, comportamentul unui obiect într-un mediu concurent (multi-thread)
nu este determinată în mod necesar prin metode specifice, care fac parte din interfața pusă
în aplicare, dar încă mai face parte API pentru această clasă de obiecte, și ar trebui să fie
descrise în documentație.
37
În acest sens, în limbaje orientate obiect, API definește un set de comportamente
obiect, eventual mediate de un set de metode de clasă.
În astfel de limbi, API-ul este încă distribuit ca o bibliotecă. De exemplu,
bibliotecile de limbă Java includ un set de API-uri care sunt furnizate sub formă de JDK
utilizat de către dezvoltatorii pentru a construi noi programe Java. JDK includ
documentația API în notație JavaDoc.
Calitatea documentației asociată cu un API este de multe ori un factor determinant
pentru succesul său în ceea ce privește ușurința de utilizare.
API poate fi, de asemenea, o implementării a unui protocol. Atunci când un API
implementează un protocol poate fi bazată pe metode de Proxy pentru invocări la distanță,
care se bazează pe sub protocolul de comunicare. Rolul API poate fi exact pentru a
ascunde detaliile a protocolului de transport. Ex .: RMI este un API care pune în aplicare
protocolul JRMP sau IIOP ca RMI-IIOP.
Protocoalele sunt de obicei împărțite între diferite tehnologii (sisteme bazate pe
limbaje de programare, într-un anumit sistem de operare) și, de obicei permit diferite
tehnologii pentru a face schimb de informații, acționând ca un nivel de abstractizare /
mediere între cele două medii diferite. Protocolul prin urmare, poate fi considerat API la
distanță, API-uri locale în schimb sunt de obicei specifice unei anumite tehnologii: prin
urmare, un API pentru o anumită limbă nu poate fi utilizată în alte limbi, cu excepția
cazului când apeluri de funcții sunt împachetate cu bibliotecile de adaptare specifice.
Pentru a permite schimbul de informații între sisteme care folosesc tehnologii
diferite, atunci când un API implementează un protocol, acesta poate prescrie un format de
mesaj-limbaj neutru: de ex SOAP folosește XML ca un container general pentru mesajele
care urmează să fie schimbate, REST API în mod similar poate utiliza atât XML și JSON.
38
programare poate fi transformat într-un obiect la distanță și diferite limbaje de programare:
astfel încât, de exemplu, un program scris în Java invocă un serviciu prin intermediul
SOAP sau IIOP scrise în C # ambele programe folosesc API-uri pentru invocarea de la
distanță pentru a face schimb de informații (de la distanță), care ambele convertesc de la /
pentru un obiect în memoria locală.
In schimb, atunci când un obiect similar este schimbat printr-un API local de la o
singură mașină obiectul este schimbat în mod efectiv în memorie: de ex prin intermediul
memoriei alocate printr-un singur proces, sau între mai multe procese care utilizează
memoria partajată, un server de aplicații, sau alte tehnologii de partajare, cum ar fi spații
tuple.
Anumite limbaje, cum ar fi cele care rulează într-o mașină virtuală pot partaja un
API. În acest caz, o mașină virtuală permite interoperabilitatea limbajului, prin
abstractizarea unui limbaj de programare, folosind un cod de octet intermediar și legături
lingvistice. În aceste limbaje, compilator efectuează doar în compilare timp sau înainte de
timp de compilare transformă codul sursă, eventual scris în mai multe limbaje, în
reprezentarea sa de cod octet independent de limbaj.
De exemplu, prin reprezentarea de cod octet, un program scris în limba Groovy sau
Scala poate folosi orice clasă Java standard, și, prin urmare, orice Java API. Acest lucru
este posibil datorită faptului atât Groovy și Scala au un model de obiect care este un super
set a limbajului Java; în acest fel, orice API expus prin intermediul unui obiect Java este
accesibil prin Groovy sau Scala printr-o invocare obiect echivalent tradus în cod de octet.
Pe de altă parte, Groovy și Scala introduc entități de primă clasă, care nu sunt
prezente în Java, cum ar fi dispozitive de închidere. Aceste entități nu pot fi reprezentate în
limbajul Java nativ (Java 8 a introdus conceptul de expresie lambda); astfel, pentru a
permite funcționarea alia, o închidere este încapsulat într-un obiect standard de Java. În
acest caz, invocarea de închidere este mediată printr-un apel numit “call ()”, care este
întotdeauna prezentă într-un obiect de închidere așa cum se vede in Java, iar în Java
închiderea nu reprezintă o entitate de primă clasă.
39
8.8. API-uri Web
API-urile web sunt interfețe definite prin interacțiuni care au loc între o
întreprindere și aplicațiile care utilizează activele sale. O abordare API este o abordare
arhitecturală care se învârte în jurul furnizând interfețele programabile la un set de servicii
pentru diferite aplicații care deservesc diferite tipuri de consumatori.
Atunci când este utilizat în contextul de dezvoltare web, un API este definit în mod
obișnuit ca un set de Hypertext Transfer Protocol (HTTP) mesaje de solicitare, împreună
cu o definiție a structurii mesajelor de răspuns, care este de obicei într-un Extensible
Markup Language (XML) sau JavaScript Object Notation format (JSON). În timp ce "API-
ul web", a lungul historiei a fost practic sinonim pentru serviciul web, tendința recentă
(așa-numitul Web 2.0) a fost trecerea de la Simple Object Access Protocol (SOAP) servicii
bazate pe web si arhitectura orientata pe servicii (SOA) către mai directă prin transfer de
stat (REST) resurse web reprezentaționale stil și arhitectură orientată spre resurse (ROA).
O parte din această tendință este legată de Semantic Web Movement spre Resource
Description Framework (RDF), un concept pentru a promova tehnologiile de inginerie de
ontologie bazate pe web. API-uri web permit combinarea de mai multe API-uri în noi
aplicații cunoscut sub numele de mashup.
40
8.10. Implementări
Standardul POSIX definește un API care permite scrierea unei game largi de funcții
de calcul comune într-un mod, astfel încât acestea să poată funcționa pe mai multe sisteme
diferite (Mac OS X, și diverse Berkeley Software Distributions (BSDS) implementa
această interfață) .Cu toate, folosind aceasta interfața necesită o re-compilare pentru fiecare
platformă. Un API compatibil, pe de altă parte, permite cod obiect compilate să
funcționeze fără modificării ale sistemului care implementează acest API. Acest lucru este
benefic pentru ambele furnizori de software (în cazul în care acestea pot distribui software-
ul existent pe noi sisteme, fără a produce și / distribuirea de upgrade-uri) și de utilizatori
(în cazul în care acestea se pot instala software mai vechi pe noi sisteme lor fără a cumpăra
upgrade-uri), cu toate că acest lucru necesită, în general, că diferite biblioteci software
implementarea API-urile necesare, de asemenea.
Microsoft a demonstrat un angajament puternic față de un API compatibil înapoi, în
special în biblioteca lor Windows API (Win32), astfel încât aplicațiile mai vechi pot rula
pe versiunile mai noi de Windows, utilizând o setare executabil-specific numit "modul de
compatibilitate". Printre sistemele de operare Unix, există mai multe sisteme de operare,
dar incompatibile când este vorba de rularea la o platformă hardware comună (în special
Intel sisteme 80386 compatibile).
Au existat mai multe încercări de a standardiza API astfel încât furnizorii de
software ar putea distribui o aplicație binară pentru toate aceste sisteme; Cu toate acestea,
până în prezent, nici una dintre acestea nu a întâlnit. Standard Base Linux încearcă să facă
acest lucru pentru platforma Linux, în timp ce multe dintre BSD Unix-uri, cum ar fi
FreeBSD, NetBSD și OpenBSD, implementează diferite niveluri de compatibilitate API
pentru ambele compatibilitate (permițând programe scrise pentru versiuni mai vechi pentru
a rula pe distribuții mai noi ale sistemului) și compatibilitate cross-platform (care permite
executarea de cod externe fără recompilare).
41
organizațiilor de inginerie software. De asemenea, un grup de API ar trebui să se
structureze în funcție de ceea ce are nevoie API. Într-un studiu de 775 de ingineri software
Microsoft, Begel et al. a constatat că, în plus față de coordonare în ceea ce privește
proiectarea API, inginerii de software coordonează și in mod obișnuit în ceea ce privește
orarele și funcții. Acest lucru întărește opinia că organizațiile de software colaborează pe
scară largă și că structura organizatorică este importantă.
Mai mulți autori au creat recomandări pentru modul de a proiecta API-uri, cum ar fi
Joshua Bloch, Kin Lane, și Michi Henning. Deoarece unul dintre principiile de proiectare
API este că un API ar trebui să fie în concordanță cu alte API-uri aflate deja în uz în
sistem, detaliile de proiectare API sunt oarecum limbajul și dependente de sistem.
Un API poate fi dezvoltat pentru un grup restricționat de utilizatori, sau poate fi pus
la dispoziția publicului. Un factor important atunci când un API devine public este
stabilitatea acesteia interfață. de exemplu, prin adăugarea parametri boi la apelarea
funcției: ar putea rupe compatibilitatea cu clienții care depind de acel API.
Atunci când părțile componente ale unui API prezentat public sunt supuse
schimbării și, prin urmare, nu este stabilă, astfel de părți ale unui anumit API ar trebui să
fie documentată în mod explicit ca instabil. De exemplu, în biblioteca Google Guava
componentele care sunt considerate instabile, și care ar putea schimba într-un viitor
apropiat, sunt marcate cu adnotare Java @Beta.
Un API public poate declara, uneori, părți în sine ca depreciate. Acest lucru
înseamnă, de obicei, că o astfel de parte a unui API ar trebui să fie considerați candidați
pentru a fi eliminate, sau modificate într-un mod incompatibil înapoi.
Atunci când adoptă un API public, o terță parte de dezvoltatorii ar trebui să ia în
considerare politica de dezaprobare utilizată de către producătorul acelui API; în cazul în
care un dezvoltator eliberează în mod public o soluție bazată pe un API care devine
depreciat, el / ea ar putea fi în imposibilitatea de a garanta serviciul furnizat.
42
8.15. Exemple API
Java Speech API sau Microsoft Speech API definește o interfața pentru tehnologia
de vorbire computaționala. Exista doua sub-tehnologii de vorbire care sunt disponibile prin
SAPI: recunoasterea vorbirii si sintetizarea vorbirii. Recunoasterea vorbirii ofera
calculatoarelor abilitatea sa asculte o limba vorbita si sa deternine ceea ce a fost spus. cu
alte cuvinte, proceseaza intrarea audio continand vorbire covertind-o in text. Sintetizarea
vorbirii ofera posibilitatea calculatoarelor sa produca vorbire sintetica dintr-un text generat
de o aplicatie, care se mai numeste si tehnologia text-to-speech.
43
9.2. Dezvoltare versiunii Beta
La testarea versiunii Beta, am reușit sa introduc mai multe limbii cum se poate
vedea si in aplicația, sunt convins este un rezultat diferit fata de testarea versiunii Alpha.
In cazul versiunii Alpha, transformarea de voce in text in limba portugheza se face la
nivelul întregului cuvânt . In cazul versiunii Beta se face o analiza mai fina a testului
recunoscut, la nivel de cuvânt.
Instructiuni de utilizare:
44
In partea superioara dreapta se afla o optiune de alegere o interfata a limbii,
reprezentata prin urmatoarea imagine:
45
9.3. Rezultatele obținute in urma testelor
9.3.1. Limba Portugheză
46
Se poate observa ca butoanele din partea dreapta a imaginii se activează odată ce textul
este acceptat.
47
9.3.2. Limba română
48
9.3.3. Limba engleză
49
50
10. Concluzii
Modificarea unor algoritmi existenți, după cum s-a arătat, trebuie însoțită de analiza
performanțelor în diverse condiții, cum sunt de exemplu texte scurte dar care conțin totuşi
cuvinte din limbi diferite.
Unul dintre cei mai importanţi factori de care depinde dificultatea procesului de
transcriere este sarcina de recunoaștere. Aceasta include specificitatea limbii, numărul de
cuvinte ce pot fi pronunţate şi incertitudinea lingvistică a sarcinii de recunoaştere.
Acest proiect, mi-a dat o imagine decenta de asamblu a modului in care care
functioneaza recunoasterea vocala (vorbirii).
O aplicatie efectiva de vorbire este aceea care foloseste vorbirea pentru a sporii
performanta utilizatorului sau pentru a adauga o activitate care nu se poate face altfel. Un
studiu asupra dialogului natural asigura ca avertizarile si feedback-ul urmareste conventile
de conversatie pe care utilizatorii asteapta intr-o interactiune.
51
11. Bibliografie
Baldwin, T. and Lui M. (2010) Language Identification: The Long and the Short of
the Matter. Human Language Technologies: The 2010 Annual Conference of the
North American Chapter of the ACL, pages 229–237, Los Angeles, California
Cavnar, W., and Trenkle, J. (1994). N-gram-based text categorization. Proc. 3rd
Symp. On Document Analysis and Information Retrieval (SDAIR-94)
Churcher, G. (1994) Distinctive character sequences. Personal Communication by
Ted Dunning
Churcher, G., Hayes, J., Johnson, S. and Souter, C (1994) Bigraph and trigraph
models for language identification and character recognition. in Proceedings of
1994 AISB Workshop on Computational Linguistics for Speech and Handwriting
Recognition, University of Leeds
Devadoss, J.M. (2010) Advanced Natural Language Translation System, Global
Journal of Computer Science and Technology, Vol 9, No 5
Dunning, T. (1994) Statistical Identification of Language. Technical Report MCCS
94-273, New Mexico State University
Fogarassy-Neszly, P. (2011) Aplicaţii informatice şi dispozitive cu interfaţă vocală.
Revista Română de Interacţiune Om-calculator 4 (Numar special RoCHI 2011), 53-
58.
52
12. Anexe
Codul sursa a aplicatiei
53
var ttlt = 0;
var gtb = {
'af':"https://translate.google.co.za/?hl=af&tab=wT",
'ar':"https://translate.google.com/?hl=ar&tab=wT",
'bg':"https://translate.google.bg/?hl=bg&tab=wT",
'ca':"https://translate.google.cat/?hl=ca&tab=wT",
'zh-Hans':"https://translate.google.com/?hl=zh-CN&tab=wT",
'zh-Hant':"https://translate.google.com/?hl=zh-TW&tab=wT",
'cs':"https://translate.google.com/?hl=cs&tab=wT",
'da':"https://translate.google.dk/?hl=da&tab=wT",
'nl':"https://translate.google.nl/?hl=nl&tab=wT",
'en-US':"https://translate.google.com/?hl=en&tab=wT",
'en-GB':"https://translate.google.co.uk/?hl=en&tab=wT",
'fi':"https://translate.google.fi/?hl=fi&tab=wT",
'fr':"https://translate.google.fr/?hl=fr&tab=wT",
'gl':"https://translate.google.es/?hl=gl&tab=wT",
'de':"https://translate.google.de/?hl=de&tab=wT",
'el':"https://translate.google.gr/?hl=el&tab=wT",
'he':"https://translate.google.co.il/?",
'hu':"https://translate.google.hu/?hl=hu&tab=wT",
'is':"https://translate.google.is/?hl=is&tab=wT",
'id':"https://translate.google.co.id/?hl=id&tab=wT",
'it':"https://translate.google.it/?hl=it&tab=wT",
'ja':"https://translate.google.co.jp/?hl=ja&tab=wT",
'ko':"https://translate.google.com/?hl=ko&tab=wT",
'la':"https://translate.google.com/?hl=la&tab=wT",
'ms':"https://translate.google.com.my/?hl=ms&tab=wT",
'no':"https://translate.google.no/?hl=no&tab=wT",
'pl':"https://translate.google.com/?hl=pl&tab=wT",
'pt':"https://translate.google.com/?hl=pt&tab=wT",
'ro':"https://translate.google.ro/?hl=ro&tab=wT",
'ru':"https://translate.google.com/?hl=ru&tab=wT",
'sr':"https://translate.google.rs/?hl=sr&tab=wT",
'sk':"https://translate.google.sk/?hl=sk&tab=wT",
'es':"https://translate.google.es/?hl=es&tab=wT",
'sv':"https://translate.google.se/?hl=sv&tab=wT",
'tr':"https://translate.google.com/?hl=tr&tab=wT",
'zh-yue':"https://translate.google.com.hk/?hl=zh-TW&tab=wT",
'zu':"https://translate.google.com/?hl=zu&tab=wT",
};
var glc = {
'af':0,
'ar':2,
'bg':1,
'ca':0,
'zh-Hans':1,
'zh-Hant':1,
'cs':0,
'da':0,
'nl':0,
54
'en-US':0,
'en-GB':0,
'fi':0,
'fr':0,
'gl':0,
'de':0,
'el':0,
'he':2,
'hu':0,
'is':0,
'id':0,
'it':0,
'ja':1,
'ko':1,
'la':0,
'ms':0,
'no':0,
'pl':0,
'pt':0,
'ro':0,
'ru':1,
'sr':1,
'sk':0,
'es':0,
'sv':0,
'tr':0,
'zh-yue':1,
'zu':0,
};
var bcp = {
'af':'af-ZA',
'ar':'ar-EG',
'bg':'bg',
'ca':'ca',
'zh-Hans':'cmn-Hans-CN',
'zh-Hant':'cmn-Hant-TW',
'cs':'cs-CZ',
'da':'da',
'nl':'nl-NL',
'en-US':'en-US',
'en-GB':'en-GB',
'fi':'fi',
'fr':'fr-FR',
'gl':'gl',
'de':'de-DE',
'el':'el',
'he':'he-IL',
'hu':'hu',
'is':'is',
'id':'id-ID',
55
'it':'it-IT',
'ja':'ja-JP',
'ko':'ko-KR',
'la':'la',
'ms':'ms-MY',
'no':'no',
'pl':'pl-PL',
'pt':'pt-BR',
'ro':'ro',
'ru':'ru-RU',
'sr':'sr',
'sk':'sk',
'es':'es-ES',
'sv':'sv-SE',
'tr':'tr-TR',
'zh-yue':'zh-yue',
'zu':'zu',
};
(function() {
var po = document.createElement('script'); po.type = '../../../text/javascript/index.htm';
po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
//-->
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31342981-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = '../../../text/javascript/index.htm';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-
analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<https://www.facebook.com/estison.balduino>
<div id="page">
<div id="content">
<div id="topban">
<div id="stripe1">
<div id="tb-left">
</div><!--tb-left -->
<div id="logodiv">
56
<a href="../../../index.htm"><img src="../../../common/images/voiceRecognitionLogo.png"
width="300" alt="Voice Recognition Logo" /></a><br />
<p id="slogan">Voice Recognition Application for Browser by Balduino</p>
</div><!-- logodiv -->
<div id="tb-right"><div id="globeButton"><a href="../../../international.html"><img
id="globeButtonImg" src="../../../common/images/globe_of_flags.png" title="Voice
Recognition in other languages" alt="Globe Icon" /></a><br />
<select id="pageSwap" title="Voice Recognition in other languages">
<option value="https://balduinovoice.esy.es/ar/index.html" ><ل عرب ية/option>
<option value="https://balduinovoice.esy.es/zh-hans/index.html" >中文 (简体)</option>
<option value="https://balduinovoice.esy.es/zh-hant/index.html" >中文 (繁體)</option>
<option value="https://balduinovoice.esy.es/index.html" selected="selected">English
(US)</option>
<option value="https://balduinovoice.esy.es/en-gb/index.html" >English (GB)</option>
<option value="https://balduinovoice.esy.es/fr/index.html" >Français</option>
<option value="https://balduinovoice.esy.es/de/index.html" >Deutsch</option>
<option value="https://balduinovoice.esy.es/it/index.html" >Italiano</option>
<option value="https://balduinovoice.esy.es.com/ja/index.html" >日本語</option>
<option value="https://balduinovoice.esy.es.com/pt/index.html" >Português</option>
<option value="https://balduinovoice.esy.es.com/ru/index.html" >Pyccĸий</option>
<option value="https://balduinovoice.esy.es.com/es/index.html" >Español</option>
</select>
</div>
<div id="ttiyl">Type in your language</div></div>
</div><!-- stripe1 -->
</div><!-- topban -->
<div id="aspace">
<div id="banad">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-5042118140766962";
/* banner-top */
google_ad_slot = "3110467859";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="../../../../pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div></div><!-- aspace -->
<div id="sidebar-left">
<div id="social">
<div id="sbx">
<div class="fl" >
<div class="sb">
<iframe
src="javascript:if(confirm('https://www.facebook.com/plugins/like.php?href=https%3A%2
F%2Fbalduinovoice.esy.es./index.html&layout=box_count&show_faces=false&
amp;width=70&action=like&colorscheme=light&height=65\n\nThis file
57
was not retrieved because it was filtered out by your project settings.\n\nWould you like to
open it from the
server?'))window.location='https://www.facebook.com/plugins/like.php?href=https%3A%
2F%2Fbalduinovoice.esy.es/index.html&layout=box_count&show_faces=false&
amp;width=70&action=like&colorscheme=light&height=65'"
scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:70px;
height:65px;" allowTransparency="true"></iframe>
</div>
<div class="sb"><a href="javascript:if(confirm('https://twitter.com/share\n\nThis file
was not retrieved because it was filtered out by your project settings.\n\nWould you like to
open it from the server?'))window.location='https://twitter.com/share'" class="twitter-
share-button" data-count="vertical">Tweet</a><script type="text/javascript"
src="../../../../platform.twitter.com/widgets.js"></script>
</div>
</div>
<div class="flrt" >
<div class="sb"><br style="margin-bottom:15px;" />
<a
href="javascript:if(confirm('https://pinterest.com/pin/create/button/?url=https%3A%2F%2
Fbalduinovoice.esy.es%2Findex.html&media=https%3A%2F%2Fbalduinovoice.esy.es%2
Fcommon%2Fimages%2FvoiceRecognitionLogoBox.png&description=An%20easy%20to
%20use%20web%20app%20providing%20free%20speech%20to%20text%20dictation%2
0in%20a%20browser.\n\nThis file was not retrieved because it was filtered out by your
project settings.\n\nWould you like to open it from the
server?'))window.location='https://pinterest.com/pin/create/button/?url=https%3A%2F%2F
balduinovoice.esy.es%2Findex.html&media=https%3A%2F%2Fbalduinovoice.esy.es%2F
common%2Fimages%2FvoiceRecognitionLogoBox.png&description=An%20easy%20to
%20use%20web%20app%20providing%20free%20speech%20to%20text%20dictation%2
0in%20a%20browser.'" class="pin-it-button" count-layout="vertical" always-show-
count="true"><img border="0" src="../../../../assets.pinterest.com/images/PinExt.png"
title="Pin It" /></a>
</div>
<div class="sb">
<!-- Place this tag where you want the +1 button to render -->
<g:plusone size="tall"></g:plusone>
</div>
</div>
</div>
</div>
<div id="unfortunately" style="display:none;">
<p><span class="intro-title">Unfortunately...</span> Your browser does not
support speech input. Fortunately, that problem is easy to solve. Just <a
href="javascript:if(confirm('https://support.google.com/chrome/bin/answer.py?hl=en-
US&answer=95346\n\nThis file was not retrieved because it was filtered out by your
project settings.\n\nWould you like to open it from the
server?'))window.location='https://support.google.com/chrome/bin/answer.py?hl=en-
US&answer=95346'">download Google Chrome</a> and then come back! For other
possibilities, please visit <a href="../../../alternatives.html"> our page on speech to text
options</a>.</p>
</div>
58
</div><!-- sidebar-left -->
<div id="sidebar-right">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-5042118140766962";
/* SideScraper160x600 */
google_ad_slot = "5705054648";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="../../../../pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div><!-- sidebar-right -->
<div id="container">
<div id="getspeech">
<div id="ctrlBar">
<img id="prefsButton" src="../../../common/images/settings.png" title="Edit
settings" alt="Settings" />
<select id="setLang" title="Dictate in another language">
<option value="af">Afrikaans</option>
<option value="ar"><ل عرب ية/option>
<option value="bg">български</option>
<option value="ca">català</option>
<option value="zh-Hans">中文 (简体)</option>
<option value="zh-Hant">中文 (繁體)</option>
<option value="cs">Česky</option>
<option value="da">Dansk</option>
<option value="nl">Nederlands</option>
<option value="en-US" selected="selected">English (US)</option>
<option value="en-GB">English (GB)</option>
<option value="fi">Suomi</option>
<option value="fr">Français</option>
<option value="gl">galego</option>
<option value="de">Deutsch</option>
<option value="el">ελληνικά</option>
<option value="he"><עברית/option>
<option value="hu">Magyar</option>
<option value="is">íslenska</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="ko">한국어</option>
<option value="la">Latin</option>
<option value="ms">Melayu</option>
<option value="no">Norsk</option>
<option value="pl">Polski</option>
<option value="pt">Português</option>
<option value="ro">Română</option>
59
<option value="ru">Pyccĸий</option>
<option value="sr">српски</option>
<option value="sk">Slovenčina</option>
<option value="es">Español</option>
<option value="sv">svenska</option>
<option value="tr">Tϋrkçe</option>
<option value="zh-yue">粵語</option>
<option value="zu">Zulu</option>
</select>
</div><!-- ctrlBar -->
<div id="ncd"><p>Speech input is not enabled in your browser.<br />
This page should work with Google Chrome 25 or greater.<br />
Please <a
href="javascript:if(confirm('https://support.google.com/chrome/bin/answer.py?hl=en-
US&answer=95346\n\nThis file was not retrieved because it was filtered out by your
project settings.\n\nWould you like to open it from the
server?'))window.location='https://support.google.com/chrome/bin/answer.py?hl=en-
US&answer=95346'">download Google Chrome</a> and then come back!<br
/></p></div><!-- ncd -->
<div id="speechArea">
<div id="w">Click the microphone and begin dictating!</div>
<div id="tc">Text copied</div>
<textarea id="speechBuf" type="text"></textarea>
<div id="speechBtnPanel">
<div id="optionsButton" class="vBtn" ><img id="optionsButtonImg"
src="../../../common/images/options-inactive.png" title="Choose from alternatives"
alt="Other options" /></div>
<div id="listenButton" class="vBtn" ><img id="listenButtonImg"
src="../../../common/images/spkr-inactive.png" title="Listen to the text" alt="Listen"
/></div>
<div id="micButton" class="vBtn" ><img id="micButtonImg"
src="../../../common/images/mic-active.png" title="Dictate" alt="Dictate" /></div>
</div>
</div><!-- speechArea -->
<div id="btnpanel">
<div id="btnsLeft">
</div><!-- btnsLeft -->
<div id="btnsMiddle">
<div id="mbbh"> </div><!-- mbbh -->
<div id="mbb">
</div><!-- mbb -->
</div><!-- btnsMiddle -->
<div id="btnsRight">
<div id="acceptBtnFrame" class="acceptInactive">
<div id="acceptButton" class="vBtn" ><img id="acceptButtonImg"
src="../../../common/images/accept-inactive.png" title="Accept dictated text" alt="Accept
text button" /></div>
</div>
</div><!-- btnsRight -->
</div><!-- btnPanel -->
60
<br /><div id="ct"><textarea id="collectedText">Click the microphone and speak. Your
dictated text will appear above. Edit if necessary, then click the arrow button to move the
text down here.</textarea>
<div id="textBtnPanel">
<div id="puncPanel">
<div id="addDot" class="pb">.</div>
<div id="addComma" class="pb">,</div>
<div id="addEx" class="pb">!</div>
<div id="addQ" class="pb">?</div>
<div id="addD" class="pb">-</div>
<div id="addU" class="pb">_</div>
<div id="addAt" class="pb">@</div>
<div id="addSq" class="pb">’</div>
<div id="addQt" class="pb">"</div>
<div id="addAnd" class="pb">&</div>
<div id="addOp" class="pb">(</div>
<div id="addCp" class="pb">)</div>
<div id="addCopy" class="pb">©</div>
<div id="addDol" class="pb">$</div>
<div id="addD" class="pb">£</div>
<div id="addU" class="pb">¥</div>
<div id="addEur" class="pb">€</div>
<div id="addUex" class="pb">¡</div>
<div id="addUq" class="pb">¿</div>
<div id="addLaq" class="pb">«</div>
<div id="addRaq" class="pb">»</div>
</div>
<div id="copyButton" class="vBtn" ><img id="copyButtonImg"
src="../../../common/images/copy-active.png" title="Copy text to clipboard" alt="Copy
button" /></div>
<div id="puncButton" class="vBtn" ><img id="puncButtonImg"
src="../../../common/images/punc-active.png" title="Add punctuation" alt="Add
punctuation button" /></div>
<div id="printButton" class="vBtn" ><img id="printButtonImg"
src="../../../common/images/print-inactive.png" title="Print" alt="Print button" /></div>
<div id="clearButton" class="vBtn" ><img id="clearButtonImg"
src="../../../common/images/clear-inactive.png" title="Clear text" alt="Clear button"
/></div>
<div id="mailButton" class="vBtn" ><img id="mailButtonImg"
src="../../../common/images/mail-inactive.png" title="Send an Email" alt="Email button"
/></div>
<div id="tweetButton" class="vBtn" ><img id="tweetButtonImg"
src="../../../common/images/tweet-inactive.png" title="Tweet this text" alt="Tweet button"
/></div>
<div id="transButton" class="vBtn" ><img id="transButtonImg"
src="../../../common/images/translate-inactive.png" title="Translate" alt="Translate"
/></div>
</div><!-- textBtnPanel -->
</div><!-- ct -->
</div> <!-- getSpeech -->
61
<iframe id="talkItOut" name="talkItOut"></iframe>
</div><!-- end of container -->
<div id="alternatives">
<h2>Alternatives</h2>
<div id="popOptions">
</div>
</div>
<div id="preferences">
<h2>Settings</h2>
<div id="prefPane">
<p><input type='checkbox' id="safeModePref"/> <label for="safeModePref">Safe
Mode:</label> <span id="fp"> (filter profanity from results)</span>
</p>
<p>
<input type='checkbox' id="grammarPref"/> <label for="grammarPref">Simple
Grammar</label> <span id="fg"> (Fix <em>gonna</em>, <em>wanna</em>,
etc.)</span>
</p>
<p>
<input type='checkbox' id="autosavePref"/> <label
for="autosavePref"><strong>AutoSave:</strong></label> <span id="as"> (Save
dictated text automatically)</span>
</p>
<p><label for="playbackPref">Text Playback:</label>
<select id="playbackPref">
<option value='nospeech'>None</option>
<option value='speechutil' >SpeechUtil (English)</option>
<option value='google' selected="selected">Google (*experimental*)</option>
</select>
</p>
<p><label for="fontPref">Font:</label>
<select id="fontPref">
<option value='serif' >Serif</option>
<option value='sans-serif' selected="selected">Sans-Serif</option>
<option value='monospace'>Monospace</option>
<option value='cursive'>Cartoon</option>
<option value='fantasy'>Other</option>
</select>
</p>
<p><label for="fontSizePref">Font Size:</label>
<select id="fontSizePref">
<option value='10'>10</option>
<option value='12'>12</option>
<option value='14'>14</option>
<option value='16'>16</option>
<option value='18' selected="selected">18</option>
<option value='20'>20</option>
<option value='22'>22</option>
<option value='24'>24</option>
62
<option value='26'>26</option>
<option value='28'>28</option>
<option value='30'>30</option>
<option value='32'>32</option>
<option value='34'>34</option>
<option value='36'>36</option>
<option value='38'>38</option>
<option value='40'>40</option>
</select>
</p>
</div><!-- prefPane -->
</div><!-- preferences -->
<div id="fullInstructions">
<div id="instructions" class="popped">
<p><span class="intro-title">Instructions:</span> Click the microphone icon
<img src="../../../common/images/mic-20.png" alt="Dictate Button" title="Dictate Button"
width="20"/> and begin speaking. Dictate about one sentence at a time. When the speech
is recognized, it will appear in red.</p>
<p>If it's not right, click the "Alternatives" button <img src="../../../common/images/opts-
20.png" alt="Other options button" title="Other options button" width="20"/> to view
other 'recognitions', edit the text, or just try dictating again. When the text is right, click the
button with the arrow pointing down <img src="../../../common/images/accept-30.png"
alt="Accept text button" title="Accept text button" width="30"/>, and your text will be
added to the box at the bottom.</p><p>Repeat this process until you're finished. When
you're all done, click the "Copy" button <img src="../../../common/images/copy-
active.png" alt="Copy button" title="Copy button" width="20"/> and then paste the text
into your document, email, blog, or tweet! (If the copy button doesn't work for you,
remember that the shortcut for copying is <span id="shortcut">Ctrl-C</span>.)</p>
<p>Note that you can also dictate basic punctuation by saying things like "period",
"question mark", "new paragraph", etc.</p>
</div><!-- instructions -->
</div><!-- fullInstructions -->
<div id="print">
<h2>Print</h2>
<div id="printPane">
<p>
<label for="prtT">Title:</label><input type='checkbox' id="prtT"/> <input
type="text" id="ptt"/>
</p>
<p><label for="prtSt">Subtitle:</label><input type='checkbox'
id="prtSt"/> <input type="text" id="ptst"/>
</p>
<p><label for="prtF">Footer:</label><input type='checkbox'
id="prtF"/> <span id="fttxt">balduinovoice.esy.es</span>
</p>
<p class="btnDiv"><button id="rpb" >Print</button></p>
</div><!-- printPane -->
</div><!-- print -->
<div id="mail">
<h2>E-mail</h2>
63
<div id="mailPane">
<p>
<label for="mailSub">Subject:</label> <input id="mailSub" type="text" lang="en-US" />
</p>
<p><textarea id="mailText"/></textarea>
</p>
<p><label for="mlF">Footer:</label><input type='checkbox'
id="mlF"/> <span id="mlfttxt">balduinovoice.esy.es</span>
</p>
<p class="btnDiv"><a id="eml" href="../../../index.htm">E-mail</a>
<select id="ems">
<option value='email' >E-mail</option>
<option value='gmail' selected="selected">Gmail</option>
<option value='fastmail' >FastMail</option>
</select> <button id="rmb" >Send</button></p>
</div><!-- mailPane -->
</div><!-- mail -->
<div id="tweet">
<a id="twt" href="../../../index.htm">Tweet</a>
</div><!-- tweet -->
<div id="trans">
<h2>Translate</h2>
<div id="transPane">
<p>
<label for="transLang">To:</label>
<select id="transLang" title="Translate To ...">
<option value="af">Afrikaans</option>
<option value="ar"><ل عرب ية/option>
<option value="bg">български</option>
<option value="ca">català</option>
<option value="zh-Hans">中文 (简体)</option>
<option value="zh-Hant">中文 (繁體)</option>
<option value="cs">Česky</option>
<option value="da">Dansk</option>
<option value="nl">Nederlands</option>
<option value="en-US" selected="selected">English (US)</option>
<option value="en-GB">English (GB)</option>
<option value="fi">Suomi</option>
<option value="fr">Français</option>
<option value="gl">galego</option>
<option value="de">Deutsch</option>
<option value="el">ελληνικά</option>
<option value="he"><עברית/option>
<option value="hu">Magyar</option>
<option value="is">íslenska</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="ko">한국어</option>
64
<option value="la">Latin</option>
<option value="ms">Melayu</option>
<option value="no">Norsk</option>
<option value="pl">Polski</option>
<option value="pt">Português</option>
<option value="ro">Română</option>
<option value="ru">Pyccĸий</option>
<option value="sr">српски</option>
<option value="sk">Slovenčina</option>
<option value="es">Español</option>
<option value="sv">svenska</option>
<option value="tr">Tϋrkçe</option>
<option value="zh-yue">粵語</option>
<option value="zu">Zulu</option>
</select>
</p>
<p class="btnDiv"><a id="trns" href="../../../index.htm">Translate</a>
<button id="rtb" >Translate</button></p>
</div><!-- transPane -->
</div><!-- trans -->
<!-- modal content -->
<div id='confirm'>
<div class='header'><span>Confirm</span></div>
<div class='message'></div>
<div class='buttons'>
<div class='no simplemodal-close'>No</div><div class='yes'>Yes</div>
</div>
</div>
<!-- preload the images -->
<div style='display:none'>
<img src='../../../common/js/images/confirm/header.gif' alt='' />
<img src='../../../common/js/images/confirm/button.gif' alt='' />
</div>
</div><!-- content -->
<div id="overlay"></div>
<div id='footer'>
<div><hr /></div>
<p><a href="../../../index.html">Home</a> <a
href="../../../about.html">About</a> <a
href="../../../alternatives.html">Alternatives</a> <a
href="../../../privacy.html">Privacy</a> <a
href="../../../credits.html">Credits</a></p>
<p>
<a href="../../../ar/index.html"><ل عرب ية/a>
<a href="../../../zh-hans/index.html">中文 (简体)</a>
<a href="../../../zh-hant/index.html">中文 (繁體)</a>
<a href="../../../index.html">English (US)</a>
<a href="../../index.html">English (GB)</a>
<a href="../../../fr/index.html">Français</a>
65
<a href="../../../de/index.html">Deutsch</a>
<a href="../../../it/index.html">Italiano</a>
<a href="../../../ja/index.html">日本語</a>
<a href="../../../pt/index.html">Português</a>
<a href="../../../ru/index.html">Pyccĸий</a>
<a href="../../../es/index.html">Español</a>
</p>
<p>Copyright ©2016 Voice Recognition by Balduino Camachi</p>
</div>
</div><!-- page -->
<script type="text/javascript" src="../../../../assets.pinterest.com/js/pinit.js"></script>
</body>
</html>
66