background image

Warszawa 2012 

 

 

WOJSKOWA AKADEMIA TECHNICZNA 

im. Jarosława Dąbrowskiego 

WYDZIAŁ CYBERNETYKI 

 

 

METODY I ZADANIA ROZPOZNAWANIA WZORCÓW 

 

 

Dokumentacja projektowa

 

 

 

 

Prowadzący:   

prof. dr hab. inż. Włodzimierz KWIATKOWSKI 

Autor:  

 

Mateusz SUCHOCKI 

Grupa:  

 

I1G1S4 

Data wykonania: 

12.06.2012r

background image

 

 

S t r o n a

 | 2 

1.  Założenia projektowe 

Efektem 

końcowym 

stworzonego 

projektu 

powinien 

być 

skrypt 

zaimplementowany  w  środowisku  Matlab,  który  umożliwiał  będzie  rozpoznawanie 

dźwięków.  Skrypt  powinien  dostarczać  funkcję  wczytywania  pliku  głosowego  w 

standardzie  mp3  (MPEG-1  Audio  Layer  3),  a  następnie  przekonwertowania  go  na 

format  wav  (Wave  Form  Audio  Format)  na  którym  będzie  wykonywana  analiza 

sygnału dźwiękowego. Program powinien umożliwić wczytanie sygnałów wzorcowych 

przy  pomocy  których  będzie  wykonany  proces  uczenia.  Po  wykonaniu  uczenia, 

program  powinien  dostarczać  funkcji  wczytania  sygnału  do  rozpoznania.  Dla 

wczytanego  pliku  głosowego  powinno  być  wykonane  rozpoznanie  czy  nagranie 

zawiera nazwisko  czy też  imię  użytkownika.  Po zakończeniu  procesu  rozpoznawania 

sygnału  należy  aby  program  wyświetlił  wyniki  rozpoznania,  do  którego  wzorca 

analizowany sygnał jest podobny. 

 

2.  Wykorzystana metoda rozpoznawania 

Rozpoznawania zostało zrealizowane przy pomocy ukrytych łańcuchów Markowa 

na pogrupowanych współczynnikach LPC. Projekt wykorzystuje jako wzorce nagrania 

w  formacie  mp3  od  różnych  mówców  (dwa  nagrania  dla  nazwiska  i  imienia 

użytkownika).  W  procesie  rozpoznawania  wykorzystywane  są  również  nagrania  od 

różnych mówców. 

 

3.  Realizacja   

W celu umożliwienia wczytania nagrania w formacie mp3 przez skrypt napisany w 

środowisku Matlab, pobrany został ze strony producenta odpowiedni zbiór narzędzi. 

Dostarcza  on  takie  funkcje  jak:  mp3read  oraz  mp3write.  Funkcja  mp3read  powiela 

działanie  funkcji  wavread,  z  tym  wyjątkiem,  że  wczytywany  sygnał  ma  rozszerzenie 

mp3. 

background image

 

 

S t r o n a

 | 3 

Projekt został podzielony na trzy skrypty: 

 

AnalizaPliku.m 

 

Uczenie.m 

 

Rozpoznawanie.m 

W  skrypcie  AnalizaPliku.m    znajduje  się  definicja  metody,  która  jako  jeden  z 

argumentów  przyjmuję  nazwę  pliku  z  rozszerzeniem  mp3.  Plik  o  podanej  nazwie 

zostaje wczytany przy pomocy funkcji mp3read.  Następnie dokonywane jest podział 

sygnału na ramki, każda ramka składa się z 30 próbek. Po podziale sygnału na ramki 

dokonywane  jest  wycięcie  ciszy  w  całym  sygnale.  Każda  ramka  następnie  jest 

poddawana  analizie  w  wyniku  czego  uzyskuje  się  parametry,  dzięki  którym 

dokonywane  jest  rozpoznawanie  mowy.  W  zaimplementowanym  projekcie 

parametrami takimi są współczynniki LPC (linear predictive coding). Dla każdej ramki 

wyliczane  są  dwa  współczynniki  LPC.  Ostatecznie  zbiór  obliczonych  współczynników 

dla wszystkich ramek sygnału zwracany jest przez metodę w formie macierzy. 

 

  

Rysunek nr. 1. Wybrane współczyniki LPC dla przykładowego sygnału 

 

Następny skrypt Uczenie.m odpowiedzialny jest za proces uczenia sią. Tak więc na 

samym  początku  wywoływana  jest  kilkakrotnie  zaimplementowana  metoda 

AnalizaPliku(),  która  wczytuje  podane  nagrania  i  zwraca  macierze  współczynników 

LPC.  Kolejnym  etapem  jest  wyliczanie  odległości  między  współczynnikami  dla 

background image

 

 

S t r o n a

 | 4 

poszczególnych  ramek  sygnału  i  obliczenie  drzewa  połączeń  przy  wykorzystaniu 

wbudowanej funkcji linkage() – wynik przedstawiony na rysunku nr. 2 .  

 

Rysunek nr. 2. Obliczone drzewo połączeń 

 

Po  wyliczeniu  drzewa  połączeń  wykonana  jest  funkcja  cluster()  ograniczająca 

liczbę  grup  w  drzewie.  W  ten  sposób  odległości  między  współczynnikami  LPC  dla 

poszczególnych  ramek  przydzielone  są  w  trzy  grupy.  Na  rysunku  nr.  3  zostały 

przedstawione współczynniki LPC poszczególnych ramek dla przykładowego nagrania, 

przynależność do grupy została zobrazowana za pomocą różnych kolorów. 

Po wykonaniu grupowania współczynników LPC dla każdego nagrania  tworzona 

jest  macierz  zawierająca  sekwencję  numerów  grup  do  których  przydzielone  zostały 

kolejne ramki nagrania na postawie współczynników LPC. W dalszej części programu 

tworzona jest startowa macierz przejść (Rysunek nr. 4) wielkości 10x10, z względu na 

przyjętą  długość  ukrytego  łańcucha  Markowa  która  wynosi  10  stanów.  W  macierzy 

startowej prawdopodobieństwo przejścia z jednego stanu do następnego wynosi 0.1, 

natomiast  prawdopodobieństwo  pozostania  w  stanie  wynosi  0.9  dla  wszystkich 

stanów.  Dodatkowo  tworzona  jest  macierz  rozkładu  emisji  symboli  dla  wszystkich 

stanów.  

background image

 

 

S t r o n a

 | 5 

 

Rysunek nr. 3 Zobrazowanie przynależności do poszczególnych grup 

współczynników LPC 

 

 

Rysunek nr 4. Startowa macierz przejść  

 

Ostatnim  etapem  w  skrypcie  Uczenie.m  jest  proces  uczenia  przy  wykorzystaniu 

funkcji  hmmtrain().  Funkcja  ta  jako  argumenty  pobiera  kolejno:  wektor  zawierający 

sekwencję  numerów  grup,  jakie  zostały  przydzielone  kolejnym  ramkom  dla  danego 

sygnału;  startową  macierz  przejść  oraz  macierz  rozkładu  emisji  symboli  dla  stanów. 

Funkcja hmmtrain() jako wynik swojego działania zwraca macierz przejść (Rysunek nr 

5)  oraz  macierz  rozkładu  estymacji  dla  wszystkich  stanów  (Rysunek  nr.  6).  Na 

podstawie tych macierzy wykonywane będzie rozpoznawanie. 

background image

 

 

S t r o n a

 | 6 

 

Rysunek nr. 5. Przykładowa macierz przejść po wykonaniu procesu uczenia 

 

 

Rysunek nr. 6 Przykładowa macierz rozkładu estymacji dla poszczególnych stanów po 

wykonaniu procesu uczenia 

 

 

Ostatni  skrypt  Rozpoznawanie.m  jak  sama  nazwa  wskazuje  realizuje  funkcję 

rozpoznawania. Tak więc na początku tego skryptu wykonywane jest wczytanie pliku 

przy  pomocy  funkcji  AnalizaPliku(),  która  zwraca  współczynniki  LPC  dla  kolejnych 

ramek wskazanego nagrania. Następnie podobnie jak w przypadku skryptu Uczenie.m 

wykonywany  jest  proces  grupowania, realizowany  przez  obliczenie drzewa  połączeń 

poprzez  ograniczenie  liczby  grup  do  3  i  wygenerowania  wektora  zawierającego 

sekwencję numerów grup kolejnych ramek z nagrania. Po wykonaniu tych czynności 

wykonywana  jest  funkcja  hmmdecode(),  która  wykorzystuje  macierze  (przejść  i 

rozkładu  estymacji)  wygenerowane  w  pliku  Uczenie.m  podczas  uczenia.  Funkcja  ta 

zwraca  logarytm  prawdopodobieństwo  wystąpienia  sekwencji  symboli  dla  danego 

modelu. Po wykonaniu metody hmmdecode() porównującej ciąg symboli uzyskanych 

podczas grupowania ramek z dwoma modelami dla imienia i nazwiska, dokonywane 

jest 

rozpoznanie. 

Za 

rozpoznany 

uznajemy 

ten 

model 

dla 

którego 

background image

 

 

S t r o n a

 | 7 

prawdopodobieństwo  porównania  wyszło  większe.  Na  poniższym  rysunku  został 

przedstawiony wynik działania skryptu Rozpoznawanie.m. 

 

 

Rysunek 1. Wynik wykonania pliku Rozpoznawanie.m 

 

4.  Testowanie  

Dla  wytworzonego  oprogramowania  zostały  wykonane  testy  weryfikujące  jego 

poprawność  działania.  Początkowo  wykonane  zostały  testy  poprawności 

rozpoznawania przy wykorzystaniu dwóch plików  wzorcowych dla nazwiska i dwóch 

plików  wzorcowych  dla  imienia  (pliki  różnych  mówców)  na  podstawie  których 

wykonywane było rozpoznawanie. Rozpoznaniu zostały poddane cztery pliki: twa pliki 

różne  od  plików  wzorcowych  (pliki  różnych  mówców)  oraz  dwa  pliki  które  zostały 

użyte  jako  wzorce.  Wyniki  wykonanych  testów  zostały  przedstawione  w  poniższej 

tabeli.  Pliki podkreślone w  tabeli  reprezentują  pliki  wzorcowe  na  podstawie  których 

wykonywane jest rozpoznawanie. 

Plik testowy 

Rozpoznano 

Faktyczna 

zawartość pliku 

nazwisko.1mp3 

Nazwisko

 

Nazwisko 

nazwisko2.mp3 

Imię

 

Nazwisko 

nazwisko3.mp3 

Nazwisko 

Nazwisko 

nazwisko4.mp3 

Nazwisko 

Nazwisko 

background image

 

 

S t r o n a

 | 8 

imie1.mp3 

Nazwisko

 

Imię 

imie2.mp3 

Imię 

Imię 

imie3.mp3 

Imię 

Imię 

imie4.mp3 

Imię 

Imię 

 

Podczas  wykonywania  kolejnego  testu  posłużono  się  tylko  jednym  plikiem 

wzorcowym  dla  imienia  i  jednym  plikiem  dla  nazwiska  na  podstawie  których 

wykonywane było rozpoznawanie. Poniższa tabela przedstawia uzyskane wyniki. Pliki 

podkreślone w tabeli reprezentują pliki wzorcowe na podstawie których wykonywane 

jest rozpoznawanie. 

Plik testowy 

Rozpoznano 

Faktyczna 

zawartość pliku 

nazwisko.1mp3 

Imię

 

Nazwisko 

nazwisko2.mp3 

Nazwisko 

Nazwisko 

nazwisko3.mp3 

Nazwisko 

Nazwisko 

nazwisko4.mp3 

Imię

 

Nazwisko 

imie1.mp3 

Nazwisko

 

Imię 

imie2.mp3 

Imię 

Imię 

imie3.mp3 

Imię 

Imię 

imie4.mp3 

Imię 

Imię 

 

W ostatnim teście wykorzystano trzy wzorce dla nazwiska i trzy dla imienia na 

podstawie  których  dokonywane  było  rozpoznawanie.  W  poniższej  tabeli 

przedstawione  zostały  wyniki  uzyskane  podczas  badania.  Pliki  podkreślone  w  tabeli 

reprezentują pliki wzorcowe na podstawie których wykonywane jest rozpoznawanie. 

Plik testowy 

Rozpoznano 

Faktyczna 

zawartość pliku 

nazwisko.1mp3 

Nie rozpoznano 

Nazwisko 

nazwisko2.mp3 

Nie rozpoznano 

Nazwisko 

nazwisko3.mp3 

Nie rozpoznano 

Nazwisko 

background image

 

 

S t r o n a

 | 9 

nazwisko4.mp3 

Imię 

Nazwisko 

imie1.mp3 

Nie rozpoznano 

Imię 

imie2.mp3 

Imię 

Imię 

imie3.mp3 

Imię 

Imię 

imie4.mp3 

Nie rozpoznano 

Imię 

 

5.  Wnioski 

Po  przeprowadzeniu  badań  można  stwierdzić,  iż  większa  liczba  plików 

wzorcowych  nie  wpływa  na  poprawienie  rozpoznawalność,  wręcz  przeciwnie 

zwiększa to zawodność rozpoznawania. Najlepszy wynik wyszedł dla rozpoznawania 

z wykorzystaniem dwóch wzorców (sześć plików na osiem rozpoznanych poprawnie), 

aczkolwiek  dla  rozpoznawania  z  wykorzystaniem  jednego  wzorca  wynik  był 

porównywalny.  Trudno  więc  stwierdzić  dla  ilu  plików  wzorcowych  wykonane 

rozpoznawanie  jest  lepsze  (jednego  czy  dwóch),  związane  jest  to  z  niewielką  liczbą 

testowanych  plików.  Należało  by  więc  wykonać  badanie  na  większej  ilości  plików 

testowych,  co  mogło  by  wyłonić  lepsze  rozwiązanie.  Wykonane  rozpoznawanie  nie 

jest  w  100%  działające,  może  to  być  spowodowane  tym,  iż  wszystkie  nagrania 

pochodziły od innych mówców.