VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta strojního inženýrství Ústav mechaniky těles, mechatroniky a biomechaniky Technická 2, Brno 616 69 RSZ Základy zpracování signálu Semestrální práce: Rozpoznání hláskované řeči a převedení na text Libor Příleský (4O/99) y125788@stud.fme.vutbr.cz liborprilesky@gmail.com Autor: Libor Příleský Datum: 25.9.2012
Obsah 1 Zadání...3 2 Rešerše...3 2.1. Metody...3 2.2. Výsledek rešerše...3 3 Vypracování...4 3.1. Rozdělení nahrávky na písmena...4 3.2. Samotný algoritmus porovnávání...4 4 Závěr...5 5 Reference...5 2
1 Zadání Úkolem tohoto semestrálního projektu je vytvořit skript v matlabu, který bude zpracovávat mluvenou řeč. Konkrétně bude fungovat tak, že si načte z disku nahrávku, na které bude vyhláskované slovo. Tuto nahrávku rozseká na jednotlivá písmena, ty porovná s uloženou abecedou, najde největší shodu a vypíše písmenka, která jsou nejpodobnější těm v nahrávce. 2 Rešerše Metoda rozpoznávání řeči je často velmi citlivá na rozdíly v intonaci i výslovnosti. Rozpoznávání řeči může být jednak závislé na mluvčím (SD - Speaker Depent) či na mluvčím nezávislé (SI - Speake Indepent). Systémy, které jsou závislé na mluvčím dosahují pro danou osobu lepších výsledků, ale jejich nevýhodou je, že mluvčí musí namluvit několik hodin nahrávek, aby bylo možné natrénovat dobré modely. 2.1. Metody Mezi základní metody adaptace patří metody MAP (Maximum a posteriori estimation - Maximální Aposteriorní Pravděpodobnost), MLLR (Maximum Likelihood Linear Regression) a jejich různé variace. Pro počítačové rozpoznání řeči se využívá algoritmu HMM (Hidden Markov Model - Skryté Markovovské Modely). Tento model je statistický Markovovský model, který obsahuje skryté stavy. HMM se používají v rozpoznávání řeči, protože řečový signál může být chápán jako po částech stacionární signál, nebo po krátkých časových úsecích stacionární signál. V krátkém čase (např. 10 ms), může být řeč aproximována jako stacionární proces. Pro rozpoznávání se často používá Viterbiho algoritmus. Další využívanou metodou je metoda DTW (Dynamic Time Warping - Dynamické Borcení Času). Tato metoda je vhodná pro rozpoznávání izolovaných slov (například pro hlasové ovládání počítače), protože je zapotřebí mít ve slovníku uloženou modelovou nahrávku každého použitého slova. Metoda měří podobnost mezi dvěma nahrávkami slov (popřípadě slovních spojení) a snaží se najít nejlepší shodu - určité úseky zkracuje či prodlužuje tak, aby byl rozdíl mezi nahrávkami co nejmenší. 2.2. Výsledek rešerše Z uvedených metod jsem si vybral metodu DTW. Ta by měla být vhodná pro rozpoznávání izolovaných hlásek. Algoritmus bude pravděpodobně dobře fungovat jen na můj hlas, protože porovnávací abeceda bude namluvena mnou a všechny konstanty budou nastaveny na můj hlas. Takže metoda bude SD speaker depent. 3
3 Vypracování 3.1. Rozdělení nahrávky na písmena Na začátku nahrávku nahrajeme a vyfilrujeme pásovou propustí, aby nám zůstaly jen frekvence odpovídající lidské řeči (cca. 300Hz 3,5 khz). [y, Fs, nbits] = wavread('raw_nahravky/bernard.wav'); y_fil = filter(bandpass, y(:,1)); Dále potřebujeme určit hranice jednotlivých písmen. To se na první pohled zdálo jednoduché, ale ve skutečnosti to tak jednoduché nebylo. V prvé řadě je důležité použít dobrý mikrofon a mít velké signal to noise ratio. Signál upravíme tak, aby byly více odlišeny jednotlivé slova a potom to projdeme cyklem, zjistíme, na kterém místě slovo začíná a končí a podle toho jej vyřízneme z vyfiltrovaných dat. index = 0.015; %hranicni index pro rozpoznavani slov for i= 2:length(Prms) if (Prms(i) > index && Prms(i-1) <= index) start = i; if (Prms(i) <= index && Prms(i-1) > index) stop = i; if (start ~= 0 && stop ~= 0) %kdyz mam vybrany zacatek a konec %Pokud je to dost dlouhe na pismeno if (length(y_fil(start:stop)) > 5000) num = num +1; unknowns{num} = y_fil(start:stop); %vyberu usek,kde si myslim, ze je pismenko start = 0; % vynuluju indexy stop = 0; 3.2. Samotný algoritmus porovnávání Nejprve si uděláme spektrogram obou vzorků. Potom sestavíme matici, která vyjadřuje lokální shodu obou vzorků. Pak najdeme cestu, která vede diagonálně přes tuto matici, která spojuje místa s největší shodou. Potom se vypočítá koeficient podobnosti, který se pak porovnává mezi vzorky a vzorek s nejmenší hodnotou se shoduje nejvíce. Tento algoritmus pak již jen vložíme do dvou vnořených cyklů a rozpoznávání písmen je hotovo. Viz. Přiložený m-file. 4
4 Závěr Při práci na tomto projektu jsem zjistil, že to s rozpoznáváním řeči není tak jednoduché, jak by se mohlo zdát. Při hláskování totiž záleží, v jaké podobě je nahrána vzorová abeceda a jak je vyhláskováno slovo, které chceme rozpoznat. Je totiž rozdíl mezí bééé a b apod. Toto má velký vliv na výsledek. Proto se musíme snažit slovo vyhláskovat stejným zpúsobem, jakým je vyhláskována abeceda. To je rozdíl oproti rozpoznávání slov, kdy to slovo řekne vždy zhruba stejně, lišit se může jen rychlost, s jakou slovo vyslovíte a s tímto algoritmus DTW počítá. Při testování algoritmu jsem dosáhl uspokojivých výsledků: AHOJ rozkódoval jako AAOJ BERNARD rozkódoval bez chyby JAK TO DE rozkódoval jako JAK KO DE Tyto výsledky předčili mé očekávání. Na rozpoznávání řeči se pracují teamy inženýrů už posledních cca. 30 let a teprve nedávno Google dosáhl uspokojivého převodu mluvené řeči na text. Proto jsem se svými výsledky spokojen. 5 Reference D. Ellis (2003). Dynamic Time Warp (DTW) in Matlab available: http://www.ee.columbia.edu/~dpwe/resources/matlab/dtw/. (15.12.2012) 5