Implementarea Software a Algoritmului

Cap. 1 Introducere

Până nu de mult, ideea de a purta o conversație cu un calculator părea de domeniul ”science fiction” . Însă lucrurile s-au schimbat foarte mult, în zilele noastre fiind posibilă trimiterea mailurilor sau mesajele printr-o simplă comandă vocală adresată unui telefon inteligent.

Primul sistem de recunoaștere de voce realizat in 1952 de Bell Laboratories putea recunoaste doar numere rostite de o singură voce, urmând ca 10 ani mai târziu cei de la IBM să realizeze un sistem ce recunoștea 16 cuvinte spuse în limba engleză. Odată cu creșterea puterii de calcul și a ajungerii pe piața largă a calculatoarelor cu procesoare rapide, recunoașterea de voce a început sa fie implementată și pentru aplicații sau sisteme pentru oamenii de rând.

Din dorința de a simplifica accesul la diferite echipamente,aparaturi electronice se încerca o diminuare a necesității perifericilor clasice cum ar fi tastatura, mouse-ul , tablete digitale care necesită acționarea cu ajutorul mainilor. Astfel se poate comanda PC-ul sau telefonul prin simple comenzi vocale sau se poate tranforma vorbirea naturală direct în text sau invers, transformând textul unui mail sau mesaj într-o voce electronică redată de către calculator.

Aplicații care folosesc recunoașterea de voce

Deși orice sistem sau aplicație care necesită o interacțiune cu utilizatorul poate beneficia de o interfață de control vocal cele mai importante domenii în care se folosește o astfel de interfață sunt urmatoarele :

-Automotive : pentru a reduce interacțiunea manuală a șoferului cu aplicațiile din bord în timpul condusului.

-Telefonie : diverse aplicații de recunoaștere a vocii ce permit apelarea, trimiterea mesajelor doar prin folosirea unor comenzi vocale.

-Sisteme medicale : recunoașterea dictării vorbii medicului pentru realizarea mai ușoară a documentațiilor din cadru institutiilor medicale, echiparea unor aparaturi destinate persoanelor cu dizabilități care nu iși pot folosi mâinile pentru introducerea comenzilor etc.

-Domeniu bancar : prin permiterea autentificării utilizatorului printr-o simplă parolă vocală, scăzând astfel pericolul unei autentificări frauduloase, având în vedere faptul că, deși parola s-ar putea afla usor, sistemul de recunoaștere a vocii nu va permite o autentificare cu success datorită diferențelor de parametric vocali.

-Case inteligente : controlarea vocală a diverselor echipamente cum ar fi cel de iluminare, încălzire, deschidere a geamurilor etc.

Scopul lucrării

Scopul acestei lucrări este de a realiza o aplicație funcțională de recunoaștere a vocii în Matlab, folosind metode simple de procesare de imagini. Algorimul va fi capabil să recunoscă cuvintele spuse de utilizator, în scopul identificării acestuia.

Deoarece înainte de recunoaștere propriu-zisă este nevoie de o instruire în vederea culegerii parametriilor specifici vocii de recunoscut acest algoritm va fi unul dependent de utilizator. Pentru instruire, utilizatorul va trebui sa aleaga o parolă compusă din 1-3 cuvinte pe care o va pronunța clar în aparatura de înregistrare folosită. Datorită dependenței autentificării de cuvintele folosite ca și parolă algoritmul devinde unul dependent de text.

Lucrarea este structutată în 5 mari capitole:

Cadrul teoretic : ce conține informații teoretice în legătură cu recunoșterea vocală, prelucrarea semnalului vocal, procesarea de imagini;

Descrierea algoritmului : conținând detalii privind algoritmul creat;

Implementare software a algoritmului: conținând detalii de implementare software în Matlab;

Posibililatea implementării în hardware a algoritmului : ce conține descrierea unor posibile implementări in hardware;

Concluzii

1.3. Recunoașterea vocii

Pentru recunoașterea vocii, utilizatorul trebuie să realizeze 5 întregistrări ale aceleiași parole pentru realizarea instruirii ce are ca scop extragerea de parametri caracteristici vocii utilizatorului și a cuvintelor alese.

Dupa realizarea instruirii, parola aleasă va putea fi recunoscută în cazul în care este rostită de utilizatorul care a ales-o. În cazul în care utilizatorul face o înregistrare ce conține o altă parolă sau dacă un alt utilizator încercă să folosească acestă parolă, algoritmul nu va valida înregistrarea.

Cap. 2 Cadrul teoretic

În cadrul acestui capitol vor fi prezentate generalități privind recunoașterea de voce, prelucrarea și analiza semnalului vocal, prelucrarea și analiza de imagini.

2.1. Recunoașterea vocală

Recunoașterea vocală poate fi descrisă ca pe un mod de introducere a datelor într-o mașină de calcul realizată prin recunoașterea cuvintelor rostire de vorbitor. Prin folosirea acestei metode se pot înlocui perifericele de introducere a datelor obișnuite din cadrul unor anumite tipuri de activități, cum ar fi mouse-ul, tastatura, tabletele digitale etc. Aceste aplicații pot avea caractere diferite în funcție de rolul pe care se dorește a îl îndeplini : aplicatii de securitate, în cadrul cărora utilizatorul se poate autentifica într-un sistem folosindu-și doar vocea, aplicații în case inteligente , pentru a activa anumite dispozitive electrice și pentru a le comanda modul de funcționare , în aplicațiile telefoanelor telefoanelor inteligente etc.

În funcție de tipul frazelor recunoscute, sistemele de recunoaștere se pot împărți n mai multe categorii. Aceste categorii sunt bazate pe dificultatea de determinare a momentului terminării vorbirii [Alaiba].

Cuvinte izolate – aplicațiile de acest tip necesită o pauză înainte și după cuvânt ; se pot procesa mai multe comenzi, dar cu pauze între ele.

Cuvinte conectate – aplicațiile pot procesa fraze multiple ce au o pauză minimă între ele.

Vorbirea continuă – aplicațiile determină continutul în timpul unei vorbiri naturale.

Vorbirea spontană – se procesează o vorbire naturală ce poate conține și interjecții sau mici bâlbâieli.

Verificarea vocii – reprezintă aplicațiile ce sunt capabile să recunoască diferiți utilizatori.

Un alt tip de diferențiere a aplicațiilor de recunoaștere este după dependența de utilizator. În cazul în care se recunosc cuvinte de la orice utilizator fără o instruire înaintea recunoașterii,atunci aplicația este independentă de utilizator. Dacă este necesară acea instruire atunci aplicația devine dependentă de utilizator [Alaiba].

2.1.1 Componentele sistemului de recunoaștere vocală

Un sistem de recunoaștere este compus din următoarele componente :

-componenta de procesare a semnalului audio : care extrage din semnalul audio caracteristicile care vor fi procesate de componenta de recunoaștere

-componenta de recunoaștere vocală : care realizează recunoașterea propriu-zisă folosind algoritmii specializați

-componenta de postprocesare : este opțională , aceasta realizează o procesare adițională asupra rezultatelor obținute pentru creșterea acurateții sistemului.

Fig. 2.1. Componentele sistemului de recunoaștere vocală

Recunoaștere vocală în sisteme distribuite

Recunoașterea vocală în sisteme distribuite este realizată cu o arhitectură de tip client-server, în cadrul căreia achiziția și extragerea trăsăturilor se afla la client iar algoritmii de recunoaștere se află pe server.

Fig. 2.2. Componentele sistemului distribuit de recunoaștere vocală

Pe langă componentele de bază ale sistemuil de recunoaștere mai apar și alte componente :

-componenta de compresie a caracteristicilor vocale : care realizează codificarea caracteristicilor în vederea reducerii volumului de date , micșorând timpul necesar transferului

-componenta de transmitere a datelor : ce este reprezentată de un protocol de transport (ex: VoIP).

-componenta de decodificare a caracteristicilor : reconstruiește informația trimisă de client.

2.1.2. Algoritmi de recunoaștere de voce

Unul dintre cei mai vechi și cunoscuți algoritmi de recunoaștere vocală este DTW (Dynamic Time Warping). Acesta recunoaște un cuvânt izolat prin compararea lui cu un număr de șabloane predefinite și determinarerea șablonului cu care se potrivește cel mai bine.

Probleme care apar la aplicarea acestui algoritm sunt : dimensiunile diferite pe care le poate avea același cuvânt din punctul de vedere am semnalului audio și posibilitatea ca rata de vorbire să nu fie constantă pe toată lungimea semnalului.

DTW este un algoritm dinamic având complexitatea de timp si spațiu liniară, influențată de durata semnalului și mărimea vocabularului.

Algoritmul realizează o singură trecere prin matricea de scoruri asociată frame-urilor , ce conține pe coloane frame-urile semnalului audio și pe linii frame-urile șabloanelor predefinite și calculeaza segmentele locale optimizate ale alinierii.

Fie D(x,y) distanța euclidiană dintre frame-ul x aparținând semnalului audio și frame-ul y aparținând șablonului și fie C(x,y) scorul cumulat de-a lungul alinierii optime care duce la perechea (x,y) .

C(x, y) = MIN( C(x-1, y), C(x-1, y-1), C(x, y-1) ) + D(x, y) (2.1)

Fig. 2.3. Dynamic time warping

Se calculează o aliniere optimă pentru fiecare șablon iar cea cu scorul cel mai mic reprezinta cea mai bună alegere pentru semnalul audio respectiv.

Un alt algoritm foarte cunoscut este HMM (Hidden Markov Models/ Modele Markov Ascunse). Un model Markov ascuns este reprezentat de o colecție de stări conectate prin tranziții (Fig. 2.4) .

Starea inițială este precizată în prealabil , urmând ca la fiecare pas temporal să se activeze o tranziție care duce într-o noua stare, în care se va genera un simbol de ieșire. Alegerea tranzițiilor și a simbolurilor de ieșire este una aleatoare, aceasta fiind controlată de distribuția unor probabilități care depind de modelul acustic.

Modelele Markov ascunse sunt ca o cutie neagră, din care sunt vizibile doar simbolurile de ieșire iar secvența stărilor prin care se trece este ascunsă.

Fig. 2.4. Un model Markov ascuns, cu 2 stări și 2 simboluri de ieșire, A și B

În recunoașterea vocală, stările sunt interpretate ca modele acustice și indică ce sunete pot fi auzite pe diferite segmente de semnal audio, iar tranzițiile adaugă constrângeri temporale indicând în ce secvență se vor activa stările. Din cauza faptului că vorbirea se deplasează într-o singură direcție (înainte) din punct de vedere temporal tranzacțiile se vor activa într-un singur sens sau se va activa aceeași stare dar cu o durată variabilă.

Un model Mrkov ascuns conține următoarele elemente :

– {s} – multimea de stări

– {ai,j} – mulțimea de probabilități de tranziție, unde ai,j reprezintă probabilitatea ca tranziția să treacă din stare i în starea j

– bi(u) – mulțimea de probabilități de emisie, unde bi este distibuția probabilității peste spațiul acustic care descrie posibilitatea emiterii fiecărui sunet u , cât timp starea i este activă.

Printre algoritmii de recunoaștere de voce bazați pe HMM amintim :

Algoritmul Forward – pentru recunoaștere de cuvinte izolate;

Algoritmul Viterbi – pentru recunoaștere de vorbire continuă;

Algoritmul Forward-Backward – folosit pentru antrenarea modelelor Markov ascunse.

2.2. Metode de prelucrare numerică a semnalului vocal

Etapele premergătoare în abordarea sintezei și recunoașterii de voce sunt analiza și prelucrarea semnalului vocal. Pentru prelucrarea numerică a semnalui se folosesc anumite metode de operare cum ar fi metode de filtrare, codificare și compresie. În vederea analizei semnalului vocal obținut dupa prelucrare, se determină parametrii semnalului pe baza eșantioanelor obținute de la vorbitor, acești parametrii fiind folosiți ulterior pentru sinteza sau recunoașterea de voce.

Prelucrarea semnalului începe odata cu achiziția acestuia de la sursă, care poate fi orice aparatură electronică de înregistrare. Achiziția presupune conversia semnalului analogic într-un semnal digital și filtrarea lui pentru eliminarea zgomotelor de achiziție.

Spectrul semnalului vocal se poate întinde până la 12 kHz, iar conform teoremei de eșantionare Nyquist-Shannon, frecvența de eșantionare trebuie sa fie cel puținnoaștere de voce bazați pe HMM amintim :

Algoritmul Forward – pentru recunoaștere de cuvinte izolate;

Algoritmul Viterbi – pentru recunoaștere de vorbire continuă;

Algoritmul Forward-Backward – folosit pentru antrenarea modelelor Markov ascunse.

2.2. Metode de prelucrare numerică a semnalului vocal

Etapele premergătoare în abordarea sintezei și recunoașterii de voce sunt analiza și prelucrarea semnalului vocal. Pentru prelucrarea numerică a semnalui se folosesc anumite metode de operare cum ar fi metode de filtrare, codificare și compresie. În vederea analizei semnalului vocal obținut dupa prelucrare, se determină parametrii semnalului pe baza eșantioanelor obținute de la vorbitor, acești parametrii fiind folosiți ulterior pentru sinteza sau recunoașterea de voce.

Prelucrarea semnalului începe odata cu achiziția acestuia de la sursă, care poate fi orice aparatură electronică de înregistrare. Achiziția presupune conversia semnalului analogic într-un semnal digital și filtrarea lui pentru eliminarea zgomotelor de achiziție.

Spectrul semnalului vocal se poate întinde până la 12 kHz, iar conform teoremei de eșantionare Nyquist-Shannon, frecvența de eșantionare trebuie sa fie cel puțin dublul frecvenței maxime a semnalului, rezultând astfel o frecvență de eșantionare de 24 kHz care implică costuri mari de filtrare,transmisie și înregistrare.

În cazul transmisiilor telefonice spectrul semnalului vocal este limitat la 3.4kHz, alegânduse astfel o frecvență de eșantionare de 8kHz. Însă în cazul aplicațiilor de sinteză sau recunoaștere de voce valoarea acestei frecvențe crește (ex : 16kHz, 22kHz etc).

2.2.1. Metode de codare a semnalului vocal

Cea mai utilizată tehnică de codare a semnalului audio este tehnica modulării impulsurilor în cod (PCM – Pulse Code Modulation). Fiecare eșantion va fi cuantizat

(atribuindu-i-se o valoare numerică) independent de celelalte eșantioane. Un codificator PCM determină nivelul de cuantizare al fiecărui eșantion în parte și apoi atribuie acestui nivel un cod binar (cuvânt de cod) ce reprezintă forma codată a semnalului. Există mai multe forme de cuantizare și codare utilizate in PCM , cele mai utilizate fiind codarea liniară și codarea logaritmică [Vlaicu].

Atât în cazul codării liniare cât și a codării logaritmice cuvântul de cod este reprezentat pe un număr fix de cifre binare, însă există și metode care generează coduri de lungime variabilă. Codarea entropică este o astfel de metodă, care realizează codarea în grupuri de eșantioane care au valori apropiate, situate într-o subclasă a valorilor totale posibile, un exemplu de codare entropica de lungime variabilă este codarea Huffman.

O tehnică ce realizează eliminarea redundanței semnalului este codarea predictivă [Feher]. Această metodă se utilizează în vederea transimiei informațiilor la distanță, urmărind eliminarea din semnal a ceea ce poate fi prezis despre el la receptor. Cea mai utilizată tehnică bazată pe metoda predicției este modulația diferențială a impulsurilor de cod (DPCM – Differential Pulse Code Modulation).

2.3. Metode de analiză a semnalului vocal

Din punctul de vedere al domeniului de analiză, există două tipuri de analiză a semnalului vocal: analiza în domeniul timp și cea în domeniul frecvență. Analiza în domeniul timp se face studiind forma de undă a semnalului , văzută ca variația valorilor eșantioanelor în funcție de timp și extragerea proprietătilor semnalului. Analiza în domeniul frecvență se realizează determinând spectrul de frecvențe al semnalului și extrăgând parametrii pe baza formei acestuia.

2.3.1. Analiza semnalului vocal în domeniul timp

În urma analizei în domeniul timp se pot extrage următorii parametri: aplitudinea maximă și medie, energia semnalului, numărul trecerilor prin zero și frecvența fundamentală.

Amplitudinea semnalului oferă informații în legătură cu prezența sau absența semnalului vocal. În cazul prezenței acestuia, amplitudinea este mare, iar in cazul absenței (zgomote,consoane) amplitudinea este redusă.

Amplitudinea medie pentru N eșantioane se calculează astfel :

, (2.2)

unde: x(m) este eșantionul curent al semnalului vocal, iar

w(n-m) este fereastra utilizată în segmentul considerat.

Energia semnalului se calculează pentru a gasi informații în legătură cu puterea transportată a semnalului. Segmentele sonore (vocale) au o energie mare pe când cele nesonore (consoane) au energia scazută. Energia se concentrează de obicei pe o bandă de frecvențe 300-3000Hz.

Numărul trecerilor prin zero se utilizează pentru determinarea caracteristicilor de frecvență în interiorul unui segment de timp.

, (2.3)

unde sgn(n) este funcția semn:

. (2.4)

Această caracteristică ajută la determinarea caracterelor sonore și nesonore, fiind deci folosită în recunoașterea vorbirii. Segmentele sonore au un număr de treceri prin zero mai redus ,iar cele nesonore au acest parametru mai ridicat.

Frecvența fundamentală este o caracteristă foarte importantă ce reprezintă frecvența de oscilație a coardelor vocale. Vocalele dețin o frecvență fundamentală ce poate fi determinată , însă consoanele , ce sunt rostiri neperiodice , nu au această frecvență.

Vorbirea unui bărbat adult are o frecvență fundamentală de la 85 la 180 Hz, pe când cea a unei femeii se încadrează în 165 – 255 Hz. Cele mai utilizate metode de determinare a frecvenței fundamentale sunt : metoda autocorecției, metoda funcției diferență de amplitudine medie, metoda cu limitare centrală etc.

2.3.2. Analiza semnalului vocal în domeniul frecvență

Acest tip de analiză presupune descompunerea semnalului în componente de frecvență cunoscute sau în componente a căror comportare în frecvență este cunoscută. Cele mai cunoscute metode de analiză în domeniul frecvență sunt : analiza prin banc de filtre, analiza Fourier , analiza LPC (”Perceptual Linear Prediction”) , analiza cepstrală si analiza perceptuală. În continuare vor fi prezentate mai detaliat primele două tipuri de analiză în frecvență.

Analiza prin banc de filtre digitale

Această metode de analiză realizează descompunerea semnalului în benzi de frecvență și determină ponderile componentelor acestor benzi în semnalul de analizat, conturând astfel comportamentul în frecvență al semnalului vocal.

Fig. 2.5. Schema bloc a analizorului cu banc de filtre

Semnalul x(n) este descompus în N benzi de frecvență cu ajutorul filtrelor trece-bandă (FTB1…FTBN). Fiecare bandă este supusă apoi unei transformări neliniare în vederea deplasării spectrului către frecvențele joase. Vectorii rezultați xN(n) vor fi analizați în mod separat . De cele mai multe ori se calculează energia acestor vectori pentru a afla ponderea lor în semnalul inițial.

Analiza Fourier

Analiza Fourier reprezintă cea mai folosită metodă de analiză a semnalului vocal deoarece oferă o imagine completă a componentelor de frecvență ale acestui semnal, realizând spectrul de frecvențe asociat (spectrul Fourier). Această analiză se bazează pe proprietatea unui semnal periodic de a putea fi descompus în componente sinusoidale.

Analiza Fourier se realizează calculând transformata Fourier discretă a semnalului.

, k = 1,2,…,N , (2.5)

unde: x(n) reprezintă eșantioanele de semnal,

X(k) este valoarea componentei k din spectrul de frecvențe,

N este numărul de eșantioane considerate, iar

j este unitatea imaginară.

Calculul se face în domeniul complex, rezultând pentru fiecare componentă X(k) două valori reale corespondente:

modulul sau amplitudinea: Ak= |X(k)| , respectiv

faza: φk=arg(X(k)).

Deoarece urechea umană nu este foarte sensibilă la spectrul de fază al semnalului , multe aplicații de analiză a vocii folosesc doar spectrul amplitudinilor.

Complexitatea unui algoritm de calcul al transformatei Fourier este O(N2) deoarece pentru fiecare k este nevoie de calcului sumei cu N valori. Pentru a crește viteza de calcul a acestei tranformate au fost creați algoritmi cu decimare în frecvență sau în timp numiți și algoritmi FFT (”Fast Fourier Transform”). Aceștia sunt algoritmi recursivi de calcul cu o complexitate redusă de O(Nlog2N) [Toderean].

2.3.3 Stocarea fișierelor audio

Stocarea fișierelor audio se poate face în mai multe formate. Un format audio este un format de fișier folosit pentru stocarea digitală a datelor unui semnal audio pe o mașină de calcul. În funcție de codarea audio folosită aceste formate pot fi cu sau fară compresie. În grupul formatelor cu compresie se regăsesc metode cu pierdere de date sau fară pierdere de date. În continuare vor fi enumerate unele formate pentru fiecare categorie :

formate audio fară compresie : WAV (Waveform Audio File Format), AIFF (Audio Interchange File Format) , AU (Audio File Format) etc.

formate audio cu compresie fară pierderi : MPEG-4 SLS (Moving Picture Experts Group-Scalable to Lossless) , ALAC (Apple Lossless Audio Codec), TTA (True Audio), etc.

formate audio cu compresie și pierderi : AAC (Advanced Audio Coding), MP3 (MPEG-1 or MPEG-2 Audio Layer III) etc.

În cadrul algoritmului realizat în această lucrare s-a folosit formatul WAV. Acesta este format dintr-un antet și din datele propriu-zise reprezentate de eșantioanele individuale. Antetul are o dimensiune de 44 de octeți și păstrează informații referitoare la ID – RIFF (Resource Interchange File Format), dimensiune, format (WAV), tipul formatului (1- PCM), numărul de canale, frecvența de eșantionare etc.

Fig. 2.6. Antetul WAV

2.4. Prelucrarea și analiza imaginilor

Prelucrarea și analiza de imagini , numita pe scurt doar prelucrarea imaginilor este un domeniu de studiu foarte dezvoltat. Acesta a apărut din necesitatea înlocuirii observatorului uman cu un calculator [Vertan], însă în zilele nostre se regasește în majoritatea dispozitivelor electronice.

Procesarea de imagini reprezintă orice formă de procesare de semnal a cărei intrare este o imagine iar ieșirea reprezintă tot o imagine sau un set de caracteristici sau parametrii ai imaginii respective.

Cele două mari arii de aplicabilitate ale procesării sunt: îmbunatățirea informațiilor pictoriale pentru percepția umană și procesarea datelor din imagine în vederea stocării, transmisiei și reprezentării în cadrul mașinilor de calcul.

Un element al imaginii se numește pixel (provenit de la ”picture element”). Imaginile pot fi scalare (monocrome,în nivele de gri) sau vectoriale. Într-o imagine scalară valoarea unui pixel este intensitatea luminoasă într-un anumit punct, iar în cea vectorială valoarea pixelului este un vector.

O imagine poate fi definită ca o funcție bidimensională f(x,y) , unde x și y sunt coordonatele spațiale, iar valorile funcției f pentru oricare pereche de puncte (x,y) reprezintă valorile luminanței într-o imagine în tonuri de gri și reprezintă vectori cu 3 componente dintr-un spațiu de culoare pentru imaginile color. Când x,y și amplitudinea au valori finite, discrete, imaginea se numește imagine digitală. [Gonzales]

2.4.1 Tipuri de prelucrări ale imaginii

Procesările, conform unor autori, pot fi impărțite în trei mari categorii: de nivel mic, mediu și înalt. Printre procesările de nivel mic se enumeră operațiile primitive cum ar fi preprocesarea imaginii pentru a reduce zgomotul, îmbunătațirea contrastului, accentuarea imaginii etc. Pentru nivelul mic atât intrarea cât și ieșirea constituie o imagine [Gonzales].

Nivelul mediu consta din operații de segmentare (împărțirea imaginii în regiuni sau obiecte de interes) și clasificare (recunoașterea obiectelor). Intrările procesărilor de nivel mediu sunt imagini iar ieșirile sunt atribute extrase din acea imagine. În final, procesarea de nivel înalt presupune ”înțelegerea” ansamblului de obiecte recunoscute, îndeplinind o funcție cognitivă asociată cu ”vederea”.

Există mai multe tipuri de prelucrări ce se folosesc în procesarea de imagini printre care se enumeră :

Prelucrările geometrice: în cadrul cărora se modifică doar așezarea spațială a pixelilor din imagine, nu și valorile acestora ; printre care se enumeră translația , rotirea , oglindirea etc.

Prelucrări punctuale : caracterizate de faptul că noua valoare a pixelului depinde doar de vechea valoare a acestuia ; exemple : modificarea liniară și neliniară a contrastui.

Prelucrări de vecinătate : în cadrul cărora noua valoare a pixelului depinde de valorile pixelilor dintr-o vecinătate ; exemple :filtrarea liniara( filtru trece-jos, filtru trece-sus, filtru derivativ), filtrare neliniară (filtru de ordine) etc.

Prelucrări integrale : noua valoare a pixelului depinde de toate valorile pixelilor din imagine ; exemple : transformata Fourier, tranformata cosinus, transformata sinus etc.

2.4.2 Stocarea imaginilor în fișiere

Un fișier este o entitate logică de organizare a informației înscrise în mediile de stocare și este compus dintr-un șir de octeți [Vertan]. Octeții vor conține atât informația aferentă pixelilor cât si informații în legătură cu tipul imaginii (dimensiuni, tip de comprimare, existența unei tabele de culoare). Cele mai cunoscute formate sunt : BMP,TIF,GIF,JPG etc.

BMP (Windows Bitmap) , formatul de stocare folosit și în cazul acestui proiect de diplomă este unul dintre cele mai utilizate. Un fișier BMP are 3 componente :

antetul fișierului (BITMAPFILE-HEADER);

o structură de informații a imaginii (BITMAPINFO);

codarea pixelilor.

Antetul conține informațiile asupra tipului, dimensiunii și reprezentării fișierului Bitmap independent de dispozitiv (DIB – Device Independent Bitmap) [Vertan]. Semnificațiile componentelor se găsesc in tabelul din Fig.2.4.

Tabel 2.1. Descrierea câmpurilor structurii BITMAPFILEHEADER

Structura de informații BITMAPINFO conține dimensiunile și culorile unui DIB. Aceasta este compusă la rândul ei din antetul structurii de informație (BITMAPINFOHEADER) și tabelul de culoare, format din structure RCBQUAD ce descrie o culoare prin componentele sale de roșu , verde și albastru.

Tabel 2.2. Descrierea câmpurilor structurii BITMAPINFOHEADER

Cap. 3 Descrierea algoritmului

Pentru realizarea recunoașterii de voce algoritmul va realiza înregistrarea, folosind un microfon obișnuit, a fișierelor audio, urmând preprocesarea, procesare, extragea trăsăturilor caracteristice vocii și parolei alese de utilizator și validarea înregistrării(voce recunoscută/nerecunoscută).

Fig. 3.1 Schema bloc a aplicației

Ideea centrală a acestui algoritm este de a trece înregistrarea din domeniul timp în domeniul frecvență cu ajutorul transformatei Fourier. Astfel se stochează într-o imagine componentele de aplitudine alea rezultatului transformatei aplicate pe înregistrarea vocală, acestea reprezentând amplitudinile diferitelor frecvente din care este compusă înregistrarea.

A B

Fig. 3.2 A- Imagine a înregistrării în domeniul timp ; B- imagine a aceleiași înregistrări trecută în domeniul frecvență folosind fftshift

Algoritmul va recunoște doar parola spusă de utilizatorul care a antrenat algorimul cu această parolă, iar în cazul în care parola este folosită de o altă persoană verdictul va fi unul negative, vocea nefiind recunoscută.

Acest lucru este posibil datorită faptului că vocile au component diferite de frecvențe, lucru vizibil și în figurile de mai jos, ce reprezintă imaginile componentelor de frecvență pentru trei voci diferite, doua feminine și una masculină, ce rostesc aceleași cuvinte.

3.1 Descrierea modulelor algoritmului

Prima parte a aplicației constă în realizarea înregistrărilor audio cu ajutorul oricărei aparaturi electronice de înregistrare. Acestea vor fi stocate în memorie, de unde vor fi preluate pentru preprocesare.

Modulul de preprocesare reprezentat și în figura Fig. 3.3 are ca scop :

transformarea fișierului audio într-o matrice, având ca și coloane componentele de amplitudine ale Transformatei Fourier Rapidă, ce va reprezenta mai târziu imaginea înregistrării;

decuparea liniilor redundante sau nefolositoare;

normalizarea valorilor matricii în vederea obținerii unei imagini ”curate”;

realizarea unui profil de energie;

găsirea vârfurilor din profil, folosite mai apoi la verificarea înregistrării (utilă – există semnal vocal , inutilă – nu există semnal vocal) și la decuparea semnalului util din întreaga matrice.

Modulul de procesare reprezentat și în figura Fig. 3.4 îndeplinește următoarele :

Decuparea semnalului util din imagine, prin păstrarea doar zonei în care este prezent semnalul vocal ;

O a doua decupare a liniilor nefolositoare;

Redimensionarea imaginilor, deoarece acestea trebuie sa aibe aceleași dimensiuni pentru realizarea următoarelor operații;

Sub-eșantionarea imaginilor;

Calcularea erorilor pătratice dintre o imagine de referință și noile înregistrări;

Punctul de separare dintre modulul de preprocesare și cel de procesare îl constituie caracterul înregistrării. În urma preprocesării putem verifica dacă aceasta merită sau nu să fie procesată în continuare, în cazul înregistrărilor care nu conțin semnal vocal procesarea se oprește și se va da verdictul de înregistrare nevalidă iar în cazul ca în care conține semnal vocal se va continua procesarea în vederea recunoașterii vocii.

În capitolul de Implementare în software a algoritmului se va vedea că în ambele situații: de înregistrare fară semnal vocal sau înregistrare nerecunoscută va coincide rezultatul algoritmului, înregistrarea fiind declarată nerecunoscută.

Extragerea trăsăturilor va consta în stocarea în memorie a erorilor medii pătratice calculate, erori ce vor folosi mai târziu la determinarea unor parametrii pentru recunoașterea/nerecunoașterea înregistrărilor.

3.2 Etapele principale ale algoritmului

Cele două mari etape alea algoritmului constau în etapa de instruire și etapa de verificare.

3.2.1 Etapa de instruire

Pe parcursul acestei etape se realizează cele 5 înregistrări necesare instruirii algoritmului. Acestea, este necesar sa fie realizate de aceeași persoană și conținând aceeași parolă.

Fig. 3.5 Modulele etapei de intruire

Pe parcursul instruirii, cele 5 înregistrări vor trece pe rând prin modulele de preprocesare și procesare :

se va aplica transformata Fourier pentru obținerea matricilor ce conțin amplitudinile rezultate;

se renunță la un numar de linii din matrici, păstrând doar partea inferioară;

se normalizează valorile folosind logaritmul natural;

se realizează profilele de energie pe coloane;

se caută vârfurile profilelor, ce dau informații despre utilitatea informației din înregistrare, fișierele audio ce nu conțin nici un vârf fiind clasificate ca neavând semnal vocal;

folosind primul si ultimul vârf se decupează informația utilă;

se înlătura un nou rand de linii;

se redimensionează cele 5 matrici la aceleași dimensiuni;

se realizează sub-eșantionarea celor 5 imagini rezultate , decimând înăltimea și lățimea imaginilor; folosind o fereastră de 10×10 se mediază cate 100 de valori obținându-se din acestea doar o singură valoare, astfel o imagine de dimensiuni 450×250 va deveni de 45×25.

realizând media celor 5 imagini sub-eșantionate rezultate se va obține o imagini medie sau imagine referință.

ultimul pas al instruirii îl constituie calcularea erorilor medie pătratice; astfel se calculează erorile pe linii și pe coloane dintre imaginea referință și fiecare din cele 5 imagini sub-eșantionate; folosind erorile rezultate se pot găsi parametrii de recunoștere: numărul maxim de erori admis pe linii sau coloane, numărul minim de erori admise pe linii sau coloane.

3.2.2 Etapa de verificare

În cadrul etapei de verificarea se realizează recunoșterea ,dacă după instruire urmează o înregistrare realizată de același utilizator ce foloseste aceeași parolă, înregistrarea va putea fi recunoscută, în cazul în care parola sau utilizatorul se schimbă , vocea va fi clasată ca nerecunoscută.

Fig. 3.6 Modulele etapei de intruire

Înregistrarea va trece la rândul ei prin modulul de preprocesare , în cazul în care nu conține semnal vocal va fi clasificată direct ca nerecunoscută,iar în caz contrar aceasta va fi procesată, urmând a fi validată.

În modulul de validare , se vor folosi erorile medii calculate pe linii și coloane pentru a vedea dacă înregistrarea se încadrează în parametrii culeși la instruire . Pe langă acești parametrii, se mai verifică numărul de erori de sub un anumit prag și numărul celor de deasupra pragului respectiv. În cazul în care înregistrarea este realizată de aceeași persoană folosind aceeași parola , erorile apărute ar trebui să aibe valori mici , iar dacă este realizată de altă persoană sau se schimbă parola , erorile vor avea valori mai mari. Ținând cont de acest lucru, se alege o valoare de prag, iar valorile mai mici ca aceasta vor fi considerate erori mici, iar cele mai mari vor fi considerate erori mari. Pentru ca o înregistrare sa fie recunoscută, numărul de erori mici va fi mai mare decât numărul de erori mari.

Cap. 4 Implementarea software a algoritmului

Algoritmul realizat a fost implementat în mediul de dezvoltare Matlab, ce permite o ușoară manipulare a matricilor și a imaginilor necesare. Acesta este format din mai multe funcții conectate la o interfață grafică ce înlesnește interecțiunea cu utilizatorul.

4.1. Funcții pentru instruire

După cum a fost prezentată și în capitolul de Descriere a algoritmului modulul de instruire este compus din mai multe etape prezentate și în figura de mai jos.

Pentru înregistrarea celor 5 fișiere audio necesare instruirii algoritmului se folosește funcția Înregistrare_instruire.

function [ audio ] = Inregistrare_instruire(nr)

AR = dsp.AudioRecorder('SampleRate',22050,'NumChannels',1);

AFW = dsp.AudioFileWriter(['.\training\' num2str(nr) '.WAV'],'FileFormat','WAV');

tic;

while(toc<4)

[audio,nOverrun] = step(AR);

step(AFW,audio);

end

end

Folosind dsp.AudioRecorder din pachetul ”dsp” al Matlab se realizează înregistrarea audio timp de 4 secunde, folosind dispozitivul de înregistrare al calculatorului cu o frecvență de eșantionare de 22KHz , pe un singur canal audio. dsp.AudioFileWriter are rolul de a salva în memorie fișierul audio înregistrat în format wav.

Dupa realizarea celor 5 înregistrări se apelează funcția Procesare_înreg pentru fiecare fișier audio ce are ca scop verificarea existenței semnalului vocal în înregistrare. Înainte de orice se verifică dacă bufferul în care se încarcă fișierul audio este gol, în caz contrar se continuă preprocesarea.

Se aplica FFT de la stranga la dreapta, pe lungimea fișierului audio, pe o ferestră de 2048 de eșantioane , deplastă cu 100 de poziții. Valorile de amplitudine rezultate se trec pe coloanele unei matrici, urmând a fi reținute doar ultimile 500 de linii din matrice. Acest lucru se realizează datorită proprietății de simetrie a transformatei Fourier.

Pe matricea rezultată se realizează un profil de energie pe coloane ce va ajuta la găsirea vârfurilor necesare verificării existenței semnalului vocal.

sumaCol=Profil(matrice);

[~,indici]=findpeaks(sumaCol,'MinpeakDistance',80,'MinPeakHeight',60); [~,indici_zg]=findpeaks(sumaCol,'MinPeakHeight',30);

În cazul în care nu se gasesc vârfuri cu o înălțime minima de 40 sau numărul de vârfuri cu înălțime de minimă 30 sunt mai multe decat pragul de 80 înregistrarea este considerată invalidă, din cauza lipsei semnalului vocal.

if(numel(indici_zg) > 80 || numel(indici) < 1)

valid = 0;

else

valid = 1;

După asigurarea faptului că toate înregistrările sunt utile se apelează funcția de Instruire. Aceasta are ca scop următoarele acțiuni:

se încarcă 5 buffere cu înregistrările stocate în memorie folosind ”audioread” , ce citește datele din fișierul audio și returnează eșantionele acestuia

se aplelează funcția de Procesare_instruire ce are ca scop returnarea matricei rezultate în urma procesării.

Pentru normalizarea valorilor matricii se aplica un logaritm natural pe valorile acesteia.

Pentru a păstra doar zona cu semnal vocal, se decupează zonele nefolositoare cu ajutorul vârfurilor găsite în profilul de energie. Folosind poziția primului și al ultimului vârf se caută pe rând, pentru decuparea în stânga prima valoare mai mică decât un prag de 15% din valoarea ultimului vârf , dintre poziția primului vârf și prima poziție din profil și se reține poziția acesteia. La fel si pentru ultimul vârf, se cauta în drepta, de la poziția lui până la ultima poziție din profil, prima valoare mai mică decât 15% din valoarea sa și I se reține indexul.

[valori,indici]=findpeaks(sumaCol,'MinpeakDistance',80,'MinPeakHeight',60);

varfuri=sort(valori);

val_prag = floor(0.15 * varfuri(nr_varfuri));

loc_primului_varf = indici(1);

loc_ultimului_varf = indici(nr_varfuri);

for i = loc_primului_varf:-1:1

if(sumaCol(i)<val_prag)

inceput_info_utila=i;

break;

end

end

for i = loc_ultimului_varf:dimens

if(sumaCol(i)<val_prag)

sfarsit_info_utila=i;

break;

end

end

Se construiește matricea returnată păstrând ultimile 250 de linii și valorile cuprinse între începutul informației utile și sfarsitul acesteia:

img_decupata = matr_norm(251:500,inceput_info_utila:sfarsit_info_utila);

Decizia de a renunța în acest moment al procesării la cele 250 de linii din 500 rămase nu s-a luat mai devreme deoarece, pentru găsirea vârfurilor, profilul de energie calculate pe toate cele 500 de linii a fost mai eficient decât cel calculate doar pe 250.

următorul pas constră în redimensionarea matricilor rezultate la aceeași dimensiune de lățimea, înalțimea având o valoare implicită de 250, în urma decupărilor.

Valoarea aleasă pentru redimensiunare se calculeaza în felul următor:

dim=[s1 s2 s3 s4 s5];

dim2=sort(dim);

val_redim = dim2(1);

rest=mod(val_redim,10);

if(rest >= 5)

val_redim = val_redim + (10-rest);

else

val_redim = val_redim – rest;

end

Se sortează valorile lățimilor celor 5 matrici, se alege cea mai mare valoare și se adaugă sau scade din acesta pentru a deveni multiplu de 10, lucru necesar pentru sub-eșantionarea ce va urma. Folosind variabila ”val_redim” se redimensionează matricile și se salvează ca imagini în folderul de instruire folosind ”imwrite”, valoarea acestei variablile se va salva și în fișierul cu parametrii, deoarece va fi nevoie de ea la faza de verificare pentru a redimensiona imagininea verificată la aceeași dimensiune.

urmează sub-eșantionarea matricilor folosind funcția Sub_Eșantionare_instruire ce va returna imaginea rezultată în urma sub-eșantionării și imaginea cu valori impărțite la 5 ce va ajuta la realizarea imaginii de referință.

function [subEs_5,subEs] = Sub_Esantionare_instruire( imagine,nr )

for i = 1:10:inaltime

index_linie = index_linie + 1;

index_coloana = 0;

for j = 1:10:latime

s = 0;

for k = i:i+9

for t = j:j+9

s = s + abs(imagine(k,t));

end

end

index_coloana = index_coloana + 1;

medie = s/100;

matrice(index_linie,index_coloana) = medie;

end

end

imwrite(matrice,['.\TRAINING\' 'down' num2str(nr) '.bmp'],'bmp');

subEs = imread(['.\TRAINING\' 'down' num2str(nr) '.bmp'],'bmp');

subEs_5 = subEs / 5;

end

Sub-eșantionarea se realizeaza parcurgând matricea, mediind cate 100 de valori și păstrând noua valoare. După cum se poate observa, se aplică un modul pe valorile matricii, lucru ce ajută la o reprezentare mai clară a caracteristicilor de frecvență.

folosind cele 5 imagini sub-eșantionare rezultate se obține imaginea medie a acestora ce se stochează în folderul de instruire

următorul pas constă în calculul erorilor medii pătratice dintre fiecare din cele 5 imagini sub-eșantionate și imaginea medie folosind funcția Err_medii_instruire

Formula erorii medie pătratică:

2 (4.1)

unde A – reprezintă imaginea medie

B – imaginile sub-eșantionate

Astefel se calculează erorile atât pe linii cât și pe coloane pentru fiecare din cele 5 imagini și se salvează rezultatele în fișiere text.

for i= 1:25

a = abs( subEs_medie(i,:)- imagine(i,:)).^2;

b = sum(a)/latime;

erori_linii(i) = b;

end

for j= 1:latime

c = abs( subEs_medie(:,j)- imagine(:,j)).^2;

d = sum(c)/25;

erori_coloane(j) = d;

end

folosind vectorii cu erorile rezultate se numără pentru fiecare imagine în parte numărul maxim și minim de erori apărute pe linii și pe coloane și se salvează valorile respective în fișierul ce conține parametrii.

4.2. Funcții pentru verificare

După realizarea instruirii și popularea fișierului text cu parametrii necesari recunoașterii vocii utilizatorului se trece la etapa de verificare ce are ca scop recunoașterea propriu-zisă. Funcțiile folosite la verificare sunt asemănătoare cu cele folosite în cadrul instruirii, însă nu indentice. În timpul instruirii era nevoie să se salveze în memorie câte 5 exemplare diferite de imagini, fișiere text etc. acest lucru a dus la folosirea unor parametri în plus față de funcțiile de verificare.

Pe parcursul verificării înregistrările suferă mai multe transformări la trecerea prin fiecare din funcțiile de verificare, aceste transformări sunt prezentate și în figura Fig. 4.9 .

În continuare se vor descrie funcțiile folosite pentru verificare :

pentru realizarea înregistrării și stocării fișierului audio se folosește funcția de Înregistrare ce va salva în format wav înregistrarea sub numele ”myTestSpeech”.

urmează apelarea funcției de Procesare ce realizează matricea cu ajutorul transformatei Fourier, decupează semnalul util, salvează imaginea obținută în folder.

tot în cadrul functiei de Procesare de apeleză funția de Sub_Eșantionare ce va realiza sub-eșantionarea imaginii rezultate dupa procesare.

apoi se apelează funcția de Err_medii pentru calculul erorilor medii pătratice dintre imaginea sub-eșantionată rezultată și imaginea medie obținută în urma instruirii.

funcția specifică etapei de verificare este cea de Validare în cadrul căreia se decide daca înregistrarea este recunoscută sau nu.

Folosind parametrii salvați în timpul instruirii și cei doi vectori cu erori calculate pentru înregistrarea în cauză se verifică pe rând următoarele :

numărul de erori apărute pe linii să nu fie mai mare decât numărul maxim de erori pe linii acceptat

numărul de erori apărute pe linii sa nu fie mai mic decat numărul minim de erori acceptat

numărul de erori apărute pe coloane să nu fie mai mare decât numărul maxim de erori pe coloane acceptat

numărul de erori apărute pe coloane sa nu fie mai mic decat numărul minim de erori acceptat

numărul de erori mici (<60) să fie mai mare decât numărul de erori mari (>60)

în cazul în care una din condiții nu este îndeplinită variabila ”valid” devine 0 , iar înregistrare este nerecunoscută

4.3. Interfața grafică a aplicației

Pentru a ușura interacțiunea cu utilizatorul a fost construită o interfață grafică în Matlab cu ajutorul căreia sunt conectate toate funcțiile folosite.

Precum algoritmul și interfața este compusă din două părti:

partea folosită în instruire formată din cele 5 butoane Rec1…Rec5 și butonul de Training

partea foloită pentru recunoaștere formată din butonul de verificare Check

Modul de funcționare:

la pornirea aplicației, în timpul desenării ferestrei se deschide fișierul text ce conține parametrii, în cazul în care acesta există, sugerând o instruire anterioară și se încarcă variabilele cu parametrii respectivi : numărul maxim de erori pe linii, numărul maxim de erori pe coloane, numărul minim de erori pe linii,numărul minim de erori pe coloane și dimensiunea pentru redimensionarea imaginii.

Pentru realizarea instruirii se folosesc pe rând cele 5 butoane Rec1…Rec5. Pentru cazul în care înregistrarea nu conține semnal vocal, acestea vor căpăta culoarea roșie iar daca semnalul vocal este prezent vor avea culoarea verde. În momentul în care toate cele 5 sunt verzi se poate apasa butonul de Training ce va apela funcțiile specifice instruirii.

Odata ce instruirea a fost realizată se pot face înregistrarile pentru recunoaștere a vocii folosind butonul Check.

În cazul în care după instruire utilizatorul realizează o verificare pentru aceeași parolă folosită, vocea ii va fi recunoscută, iar butonul Check va devine verde, în caz contrat , dacă se schimbă parola sau utilizatorul butonul va devein roșu.

valid=Procesare_inreg(audio);

if(valid==1)

set(hObject, 'Backgroundcolor',uint8([172 255 172 ])); // verde

else

set(hObject, 'Backgroundcolor',uint8([253 86 86])); // roșu

end

4.4. Timpii de execuție

Comenzile tic-toc din Matlab pornesc un numărător ce măsoara performanța. La execuția comenzii tic începe măsurarea timpului de execuție până la întâlnirea comenzii toc. În tabelul de mai jos se găsesc funcțiile și operațiile folosite de algoritmul de recunoaștere de voce, timpul de execuție necesar pentru fiecare și tipul operației realizate.

Tabel 4.1. Timpi de execuție ai algoritmului

Folosind datele din tabelul 4.1deducem că, timpul necesar unei instruiri, în cadru căreia se aplică operațiile pe cele 5 înregistrări ajunge la aproximativ 685 ms, iar timpul necesar unei verificări este de aproximativ 180 ms.

Pentru a reduce acești timpi de execuție se pot aborda mai multe obțiuni cum ar fi: o implementare în paralel a operațiilor care suportă acesta variant sau o implementare totală în hardware. Pentru implementarea în hardware s-au realizat unele cercetări ce vor fi cumprinse în capitolul următor numit Posibilă implementare în Hardware.

Cap. 5 Posibililatea implementării în hardware a algoritmului

Pentru a crește performanțele algoritmului din punctul de vedere a timpului necesar execuției se poate realiza implementarea în hardware.

Majoritatea operațiilor folosite de algoritm sunt de atribuire, adunare, înmulțire, împărțire,interpolare ce se pot realiza ușor în hardware. Operația ce pune unele probleme este cea de normalizare prin aplicarea logaritmului natural.

5.1 Diferite abordări ale implementării logaritmului

Deoarece logaritmarea este o operație matematică complexă aceasta nu poate fi implementătă direct în limbajul de descriere hardware. Din acest motiv se pot folosi diferite abordări. În cadrul acestui proiect s-au cercetat două dintre acestea: aproximarea logaritmului prin folosirea a două drepte și folosirea unui look-up table.

Aproximarea prin folosirea a două drepte

Logaritmul natural se aplică pe o matrice cu valori cuprinse în intervalul (0,000012..-16,5) și are ca rezultat o matrice cu valori cuprinse între (-11,3306…-2,8) fapt vizibil și în figura de mai jos.

Pentru aproximarea valorilor matricii rezultate se aleg două drepte și câte 2 puncte pentru fiecare ce ajută la aflarea ecuațiilor acestora.

Exemplu:

Pentru dreptele din figura de mai jos se aleg punctele:

dr1 : p1(0,-11.5); p2(0.6, 1) – dreapta portocalie

dr2 : p3(0.6, 1); p4(16.5, 3) – dreapta roșie

Cunoscând două puncte de pe dreaptă aflam panta acesteia aplicând formula:

(5.1)

m1 = 20.83

m2 = 0.125

Folosind panta putem afla ecuațiile dreptelor folosind formula:

y = mx + b, (5.2)

unde m=panta și b=ordonata la origine

Înlocuind pentru fiecare dreapta valorile pentru x și y cu valorile punctelor și m cu valoarea pantei se pot calcula valorile lui b:

b1 = -11.5 și b2 = 0.93. Folosind aceste valori putem afla ecuațiile dreptelor.

dr1 : 20.83 · x – 11.5

dr2 : 0.125 · x + 0.93

Folosind aceste două ecuații putem calcula pentru fiecare valoare din matricea de intrare o valoare de ieșire:

Aproximare prin folosirea unui look-up table

Similar Posts