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.
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.
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
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.
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.
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
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
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
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.