1. Tạo cú pháp nhận dạng hay còn gọi là ngữ cảnh nhận dạng. Soạn tập tin gram.txt có nội dung như sau:
$speaker = toan | phuong;
($speaker)
nhận dạng khi người nói vào hệ thống tên Toàn hoặc tên Phương.
2. Tạo sơ đồ wdnet - word networkPhát sinh file wdnet bằng lệnh:
>HParse gram.txt wdnetNội dung của file wdnet như sau:
VERSION=1.0
N=5 L=5
I=0 W=!NULL
I=1 W=!NULL
I=2 W=toan
I=3 W=!NULL
I=4 W=phuong
J=0 S=3 E=1
J=1 S=0 E=2
J=2 S=2 E=3
J=3 S=4 E=3
J=4 S=0 E=4
3. Thu âm giọng nói: có hai cách làm a. Thu âm giọng nói rồi tạo file text tương ứng.
b. Phát ra nội dung câu nói trước sau đó thu âm theo nội dung đó.
Phát ra nội dung thu âm bằng lệnh:
>HSGen -l -n 20 wdnet dict >prompstNội dung file dict như sau:
phuong [phuong] ph uo n g
toan [toan] t o a n
File prompst chứa nội dung 50 tập tin để thu âm, thu âm 40 câu để huấn luyện, và 10 câu làm dữ liệu test.
nội dung file prompst như sau:
1. phuong
2. toan
3. toan
.........
Dùng phần mềm audacity để thu âm.
4. Trích đặc trưng mfcc dùng lệnh HCopy>HCopy -T 1 -C cfg\HCopy.cfg -S listwavmfccTrain.scpGhi chú:
+ File Hcopy.cfg có nội dung:
SOURCEKIND = WAVEFORM
SOURCEFORMAT = WAV
TARGETKIND = MFCC_0_D_A
TARGETRATE = 100000.0
SAVECOMPRESSED = T
SAVEWITHCRC = T
WINDOWSIZE = 250000.0
USEHAMMING = T
PREEMCOEF = 0.97
NUMCHANS = 26
CEPLIFTER = 22
NUMCEPS = 12
ENORMALISE = F
+ File listwavmfccTrain.scp có được bằng cách thực hiện lệnh:
>listwavmfc.pl wav\train listwavmfccTrain.scpF:\labsimple\wav\train\01.wav F:\labsimple\wav\train\01.mfc
F:\labsimple\wav\train\02.wav F:\labsimple\wav\train\02.mfc
...............
5. Khởi tạo giá trị huấn luyện>HCompV -C cfg\HCompV.cfg -f 0.01 -m -S train.scp -M hmm\hmm0 hmm\hmm0\protoGhi chú:
+ File train.scp có nội dung:
F:\labsimple\mfcc\train\01.mfc
F:\labsimple\mfcc\train\02.mfc
.............................
+ Tạo file proto trong thư mục hmm\hmm0 có nội dung:
~o <VecSize> 39 <MFCC_0_D_A>
~h "proto"
<BeginHMM>
<NumStates> 5
<State> 2
<Mean> 39
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0
<Variance> 39
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0
<State> 3
<Mean> 39
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0
<Variance> 39
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
~o <VecSize> 39 <MFCC_0_D_A>
~h "proto"
<BeginHMM>
<NumStates> 5
<State> 2
<Mean> 39
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0
<Variance> 39
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0
<State> 3
<Mean> 39
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0
<Variance> 39
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
+ tạo file hmmdefs trong thư mục hmm\hmm0, sao cho mỗi phone được thay bằng "proto"
>prompts2mlf.pl lable.mlf train+ file lable.mlf nội dung:
#!MLF!#
"*/1..lab"
phuong
.
"*/2..lab"
toan
.
....................
+ file train
1. phuong
2. toan
....................
>HLed -l '*' -d dict -i phones0.mlf mkphones.led lable.mlf+ file mkphones.led có nội dung
EX
IS sil sil
DE sp
+lệnh trên sẽ tạo ra file phones0.mlf
>HDMan -A -D -T 1 -m -w wlist -n monophones0 -i -l dlog dict lexicon+ File lexicon có nội dung:
phuong [phuong] ph uo n g
toan [toan] t o a n
silence [] sil
+ Lệnh trên sẽ tạo ra file monophones0
>mkHmmdefsFile.pl hmm\hmm0\proto monophones0 hmm\hmm0\hmmdefs+ Lệnh trên tạo file hmmdefs
+ Nội dung của File macros có được từ cách chép phần đầu ~o của file proto và nội dung của file vFloors
~o
<STREAMINFO> 1 39
<VECSIZE> 39<NULLD><MFCC_D_A_0><DIAGC>
~v varFloor1
<Variance> 39
2.909618e-001 1.896888e-001 3.646610e-001 2.376805e-001 2.649882e-001 2.794672e-001 2.323876e-001 2.089114e-001 1.858883e-001 2.667808e-001 2.119271e-001 1.591346e-001 2.950959e-001 7.393611e-003 6.921536e-003 7.833419e-003 9.061966e-003 1.120140e-002 1.136315e-002 1.120127e-002 1.078344e-002 1.207254e-002 1.367865e-002 1.039116e-002 8.883036e-003 4.715052e-003 8.632476e-004 1.064687e-003 1.218992e-003 1.529570e-003 1.798744e-003 1.806864e-003 1.898874e-003 1.988898e-003 2.171315e-003 2.347129e-003 1.784228e-003 1.629085e-003 5.131669e-004
6. Ước lượng thông số:>HERest -C cfg\HERest.cfg -I phones0.mlf -t 250.0 150.0 1000.0 -S train.scp -H hmm\hmm0\macros -H hmm\hmm0\hmmdefs -M hmm\hmm1 monophones0
>HERest -C cfg\HERest.cfg -I phones0.mlf -t 250.0 150.0 1000.0 -S train.scp -H hmm\hmm1\macros -H hmm\hmm1\hmmdefs -M hmm\hmm2 monophones0
>HERest -C cfg\HERest.cfg -I phones0.mlf -t 250.0 150.0 1000.0 -S train.scp -H hmm\hmm2\macros -H hmm\hmm2\hmmdefs -M hmm\hmm3 monophones07. Kết Quả>HVite -H hmm\hmm3\macros -H hmm\hmm3\hmmdefs -S test.scp -i kq\recout.mlf -w wdnet -p 0.0 -s 5.0 dict HmmList8. Đánh giá>HResults -I phones0test.mlf hmmlist kq\recout.mlfGhi chú:
+file phones0test.mlf
#!MLF!#
"F:/labsimple/mfcc/test/41.lab"
toan
.
"F:/labsimple/mfcc/test/42.lab"
phuong
.
...............................
====================== HTK Results Analysis =======================
Date: Sat Jul 17 15:04:02 2010
Ref : phones0test.mlf
Rec : kq\recout.mlf
------------------------ Overall Results --------------------------
SENT: %Correct=100.00 [H=10, S=0, N=10]
WORD: %Corr=100.00, Acc=100.00 [H=10, D=0, S=0, I=0, N=10]
===================================================================
=> OK tất cả đều tuyệt vời nhận dạng chính xác 100% luôn.
Download:
http://www.mediafire.com/?gqyfyrbo7h8cfg6