語音識別工具箱之HTK安裝與使用


    HTK(HMM Toolkit)一款基於hmm模型的語音處理工具,早就聽說它了,一直因為用MATLAB中的工具箱在學習,或自己寫代碼在做HMM方面的試驗,所以沒有接觸到它。現在,上海朋友家里的網速超贊,我就趁投簡歷的時間空隙,下載了它的一些資料,包括安裝文件,使用文檔(最好中英文版都要找到,有時中文版更簡潔,更節省時間,英文版則較詳細,當發現自己調試不通過時,就有參考了),並做了基本的識別實驗。下面會詳細記錄本次實驗的過程。

    資料搜集:

    HTK官方主頁:http://htk.eng.cam.ac.uk/,里面有最新版本的安裝文件,有其文檔材料htkbook.pdf,當然這是英文版的,中文版的叫HTK基礎指南。下載的時候,你需要先注冊用戶,記住你的密碼,后面在其FTP服務器上下載軟件的時候需要使用到。

    在百度文庫中搜索關鍵字 一個簡單的HTK入門參考例子 即可得到一份更簡潔的文檔;

    還有一篇博文需要用到:http://www.cnblogs.com/eboard/archive/2012/02/20/HTK.html

    ps:或許你還需要安裝 Active Perl...如果你沒有安裝的話。。。

    好了,我們開始:

    我的平台是:windows xp sp3搭配 IBM-42 配置很低很低呀

 

-------------------------------------------------------------------------------   

                                                   安裝篇

-------------------------------------------------------------------------------

 

    1.下載到HTK-3.4.1.ZIP后,解壓,將其中的htk文件夾整個復制到E盤根目錄下。

    2.將原來htk_htklib_nt.mkf文件中備份,然后修改下列兩處,以使其錄音軟件可在WIN32界面下運行:

        HGraf.null.obj改為HGraf_WIN32.obj
        HGraf.null.olv改為HGraf_WIN32.olv

    3. 開始\運行\cmd 回車

    4. 進入 e:\htk 目錄。這里用到兩條命令: e: 和 cd htk

    5.建立文件夾: mk bin.win32

    6.運行命令:VCVARS32。如果提示找不到命令,大概解決辦法是安裝VC++6.0 或者其后版本。然后設置好path變量,后面凡是遇到錯誤提示:找不到命令的,一般都是VC++6.0沒有安裝,或者安裝了,path變量沒有設置好,當然,你也可以在你電腦上找到VCVARS32.EXE,然后復制到當前文件夾。具體請自查。

    7.輸入如下命令,來編譯HTK Library:

       cd HTKLib
       nmake /f htk_htklib_nt.mkf all
       cd ..

   8.編譯HTK TOOLS ,輸入以下命令:

       cd HTKTools
       nmake /f htk_htktools_nt.mkf all
       cd ..
       cd HLMLibrary
       nmake /f htk_hlmlib_nt.mkf all
       cd ..
       cd HLMTools
       nmake /f htk_hlmtools_nt.mkf all
       cd ..

    9.編譯成功后,打開bin.win32文件夾,會發現剛才6,7步編譯結果就存在此文件夾中,如圖:(http://www.zhaomingming.cn/HTK語音識別/HTK工具.jpg)所示,其中, 你可以找找有沒有這些文件,在使用篇中我們用的到:

       HSLab.exe     錄音,標記工具
       Hcopy.exe     從語音提取特征參數的工具
       HInit.exe 和 HCompV.exe 對HMM模型初始化的工具,注意,這里需要對每個模型都要使用此命令進行初始化
       HRest.exe     對模型進行迭代訓練的工具
       HParse.exe    語法轉網絡的工具,發音轉本文用到的。
       HSGen.exe    語法查錯工具
       HVite.exe      解碼工具,也就是識別工具。可以用命令行方式使用,也可以用交互方式使用。
       其他命令本文將不會用的到。

    10.既然安裝好了,不妨測試一下安裝是否成功,這里需要電腦安裝有 ActivePerl,將HTK3.4.1文件夾下HTKDemo文件復制到E:\htk下,然后使用如下命令:

       cd HTKDemo
       mkdir hmms
       cd hmms
       mkdir tmp
       mkdir hmm.0
       mkdir hmm.1
       mkdir hmm.2
       mkdir hmm.3
       cd ..
       mkdir proto
       mkdir acc
       mkdir test
       perl runDemo.pl configs\monPlainM1S1.dcf

    沒有提示錯誤就看最后一步吧。

    11.將e:\htk\bin.win32路徑添加到環境變量path中。注銷重登錄,然后在命令行下輸入path回車,找到path中有e:\htk\bin.win32即可。

    好了,安裝就總結到這里。中間有紕漏的地方,一經發現,會立即更改。

        
      

-------------------------------------------------------------------------------    

                                                  使用篇

-------------------------------------------------------------------------------

     這個是重點,呵呵,本部分會討論到如下內容:

     1. 建立語音材料庫,確定識別基本元,比如一個單詞 yes no ok等,或者 聲母 b p m f 韻母 d t n l 等,確定基本元后,標記好識別基本元。

     2. 對語音材料庫中的聲音文件提取MFCC聲紋特征

     3.為每一個基本元建立一個HMM模型。

     4.利用MFCC聲紋特征對每一個HMM模型進行訓練,使模型參數與其描述的識別基本元對應。

     5.定義輸入語音的語法規則等,從發音對應到文字。

     6. 識別。

下面用一個具體的例子用以演示:一個識別YES和NO的小型語音識別系統.

     首先進入到命令行下,開始\運行\cmd 回車

     好的,開始采集語音材料,這里我們采集YES和NO兩個單詞。在命令行下輸入:

        HSLab  yes.sig 回車

     一個用於錄音的對話框就會出現。如圖:

     http://www.zhaomingming.cn/HTK語音識別/HGrap_HSLap.jpg

    下面我們開始錄音。錄音環境自己控制哈。

    1.錄制聲音。點擊rec按鈕,說:“yes",然后點擊stop按鈕。你會看到界面上出現一個語音波形,一條語音樣本就錄制完成了,你可以點擊play播放聽一下。

    2.給聲音做標記。本條語音一共需要做3個標記:yes語音段的標記和其前后各一個的靜音段標記。注意:做標記的語音段不能重復。點擊mark,用鼠標選取“yes"前面的一段靜音后,再點擊Labelas,用鍵盤輸入"sil" 表示 silence 靜音的意思,然后 回車。這樣我們就給本條語音的靜音段做了一個標記。在點擊mark,選取“yes“的發音段,然后點擊Labelas按鈕,用鍵盤輸入“yes”,回車。這樣我們就給本語句的yes做了標記,依照此方法,完成yes后面那個sil語音段的標記。完成這3個標記后,點擊save按鈕,回車。將我們的其標記文件保存。保存目錄為HSLab.exe的運行目錄。別找不到文件了哈。

   3.重命名語音文件和語音標記文件。語音文件后綴為*.sig,標記文件后綴為*.lab。因為HGraf:HSLab只能自動給出0,1的文件名序號,我們又需要至少10條的語音材料,所以就需要錄制一條語音,重命名一條。我們將yes_0.sig重命名為yes_00.sig,將yes_0.lab重命名為yes_00.lab.至此,我們完成了一個語音材料的錄制。

   4.點擊new按鈕,會發現new按鈕旁邊的set[0]變為set[1]了。然后依照1,2,3步,新建下一條語音材料,這時HSLab自動保存的文件名為,yes_1.sig,yes_1.lab,將其命名為yes_01.sig和yes_01.lab即可。

   5.再執行9次第4步,得到yes_02,yes_03...yes_10的語音材料和標記文件。

   6.依照1,2,3,4,5步的方法,完成no的語音材料和標記文件的制作,得到no_00.sig,no_00.lab...no_10.sig,no_10.lab.

   7.這樣我們就完成了本yes和no語音識別系統的語音庫的建立。然后將所有的*.lab文件放入到laber_dir文件夾中。

 以方便后面訓練操作。

   8.有了語音庫,我們就來實現特征提取。使用命令Hcopy來完成。首先需要完成兩個配置文件的編寫: 特征矢量參數的analysis.conf文件和源文件和目的文件的位置列表文件targetlist.txt。

    analysis.conf文件制作:

        用記事本新建一個文件,輸入下面內容:

       SOURCEFORMAT = HTK               #指定輸入語音文件的擱置
       TARGETKIND = MFCC_0_D_A       #定義提取神馬樣的特征參數,這里定義的是12個MFCC系數,1個nullMFCC系數c0,13個一階MFCC系數,13個二階MFCC系數。一共39個。MFCC的有關材料 百度既可。
      WINDOWSIZE = 250000.0            #定義幀長
      TARGETRATE = 100000.0             #定義取幀時的滑動長度

      NUMCEPS = 12                            #定義取到的MFCC首系數的個數。上邊的12就來源於此。
      USEHAMMING = T                        #定義取幀時用到的窗函數。這里定義使用漢寧窗。
      PREEMCOEF = 0.97                      #定義預加重系數,
      NUMCHANS = 26                         #定義美爾頻譜的頻道數量
      CEPLIFTER = 22                          #定義倒譜所用到的濾波器組內濾波器個數。

    將此文件保存為analysis.conf即可。

    然后制作targetlist.txt文件。

    用記事本新建一個文件,輸入下面內容:

       yes_00.sig yes_00.mfcc
       yes_01.sig yes_01.mfcc
       yes_02.sig yes_02.mfcc
       yes_03.sig yes_03.mfcc
       yes_04.sig yes_04.mfcc
       yes_05.sig yes_05.mfcc
       yes_06.sig yes_06.mfcc
       yes_07.sig yes_07.mfcc
       yes_08.sig yes_08.mfcc
       yes_09.sig yes_09.mfcc
       yes_10.sig yes_10.mfcc

       no_00.sig no_00.mfcc
       no_01.sig no_01.mfcc
       no_02.sig no_02.mfcc
       no_03.sig no_03.mfcc
       no_04.sig no_04.mfcc
       no_05.sig no_05.mfcc
       no_06.sig no_06.mfcc
       no_07.sig no_07.mfcc
       no_08.sig no_08.mfcc
       no_09.sig no_09.mfcc
       no_10.sig no_10.mfcc

    保存為targetlist.txt即可。這里指定了語音文件以及其輸出文件*.mfcc的名字。

    完成上面兩個文件后,運行如下命令:

    Hcopy -A -D -C  analysis.conf -S targetlist.txt

    回車,如果沒有錯誤的話,在當前文件夾(HSLab和Hcopy運行的文件夾)下,應該有*.mfcc文件出現。此步驟不容易出錯,一般都會成功。

    9.得到了特征參數,就該對每一個標記過的識別基元分別建立HMM模型,我們在1至6步中,共標記了3個識別基本元,分別是:sil,yes,no。那么我們需要建立3個HMM模型,這里還是要用到文本編輯器。

    下面我們建立sil的HMM模型,打開記事本,輸入以下內容:(#號后面是我加入的注釋,使用的時候最好去掉)

~o <VecSize> 39 <MFCC_0_D_A>  #定義輸入特征參數的維書
~h "sil"              # 定義模型名字,這里是給識別基本元sil定義的,所以需要“”內為sil
<BeginHMM>      #開始HMM參數的設置,
<NumStates> 6  #定義隱含狀態數
<State> 2         #狀態1為空,我們從狀態2開始定義
<Mean> 39        #連續HMM中的均值向量的定義
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   #連續HMM中的方差向量的定義
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 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> 4
<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> 5
<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
<TransP> 6                     #轉移概率矩陣的定義。
0.0 0.5 0.5 0.0 0.0 0.0
0.0 0.4 0.3 0.3 0.0 0.0
0.0 0.0 0.4 0.3 0.3 0.0
0.0 0.0 0.0 0.4 0.3 0.3
0.0 0.0 0.0 0.0 0.5 0.5
0.0 0.0 0.0 0.0 0.0 0.0
<EndHMM>

   保存為hmm_no即可。注意,這里沒有后綴。有人可能有疑問,HMM不是應該有個 狀態轉移矩陣A,觀測概率矩陣B么?怎么這里不見觀測概率矩陣B呢? 答:有狀態轉移矩陣的是離散HMM(DHMM),這里用的是連續型HMM(CHMM),連續性HMM的參數為:1.狀態轉移矩陣A,和高斯分布里用到的均值和方差,這里上面的HMM模型中都有定義。具體可查閱:www.zhaomingming.cn,里面論文《語音識別系統中特征提取和聲學建模的研究》里有關於HMM的詳細資料,可供查閱。

   好了,觀察狀態轉移矩陣,a11=0,a12=0.5,a13=0.5,a1x=0(x = 4,5,6),這說明由狀態1到自身的轉移概率為0,到狀態2的轉移概率為0.5,到狀態3的轉移概率為0.5,到狀態4,5,6的狀態轉移概率為0。其他行數據以此類推,由此我們便知道此HMM模型的拓撲結構,當然你也可以修改拓撲結構來試圖改善識別系統性能。

    然后,以此方法建立yes和no的HMM模型,我們保持拓撲結構無變化。新建一個文本文件,輸入如下內容:

~o <VecSize> 39 <MFCC_0_D_A>
~h "no"
<BeginHMM>
<NumStates> 6
<State> 2
<Mean> 39     #連續型HMM中的均值向量的定義
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  #連續型HMM中的方差向量的定義
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 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> 4
<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> 5
<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
<TransP> 6                 #轉移概率矩陣的定義。
0.0 0.5 0.5 0.0 0.0 0.0
0.0 0.4 0.3 0.3 0.0 0.0
0.0 0.0 0.4 0.3 0.3 0.0
0.0 0.0 0.0 0.4 0.3 0.3
0.0 0.0 0.0 0.0 0.5 0.5
0.0 0.0 0.0 0.0 0.0 0.0
<EndHMM>

     保存為hmm_no,注意無后綴。新建文本文件,輸入如下內容:

~o <VecSize> 39 <MFCC_0_D_A>
~h "yes"
<BeginHMM>
<NumStates> 6
<State> 2
<Mean> 39     #連續型HMM中的均值向量的定義
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  #連續型HMM中的方差向量的定義
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 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> 4
<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> 5
<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
<TransP> 6                 #轉移概率矩陣的定義。
0.0 0.5 0.5 0.0 0.0 0.0
0.0 0.4 0.3 0.3 0.0 0.0
0.0 0.0 0.4 0.3 0.3 0.0
0.0 0.0 0.0 0.4 0.3 0.3
0.0 0.0 0.0 0.0 0.5 0.5
0.0 0.0 0.0 0.0 0.0 0.0
<EndHMM>

保存為hmm_yes,同樣無后綴。

    關於HMM定義的更多知識,你可以參考htkbook.pdf英文資料,里面介紹的非常詳細。

    9.對模型初始化。本步是難點,因為我在實驗中總是出錯,苦惱了幾個小時才解決的問題。使用到命令為Hinit和HCompv,使用到文件為:trainlist.txt(第8步中生成的mfcc文件列表),HMM定義文件(hmm_sil,hmm_yes,hmm_no),標簽文件夾label_dir(第7步中制作),我們先准備trainlist.txt文件,將如下內容保存為trainlist.txt即可。

 

 

yes_00.mfcc
yes_01.mfcc
yes_02.mfcc
yes_03.mfcc
yes_04.mfcc

yes_06.mfcc
yes_07.mfcc
yes_08.mfcc
yes_09.mfcc
yes_10.mfcc

no_00.mfcc
no_01.mfcc
no_02.mfcc
no_03.mfcc
no_04.mfcc
no_05.mfcc

no_07.mfcc
no_08.mfcc
no_09.mfcc

     你可能會發現,我的列表中文件不全,沒有yes_05.mfcc,沒有no_06.mfcc,這是因為加上這兩個文件后,在初始化的過程中會報錯,我就把它去掉了,讀者可以全都寫上,然后有報錯的時候再去掉,然后重新生成mfcc文件即可。我在剛開始的時候,不知道是錯在這里了,經過幾個小時摸索才知道可以這樣的,問題應該出在做標記的時候,可能有重合之類的錯誤了,另外所用MFCC文件不能太少,太少也會報錯。另外要准備一個文件夾hmm0,在當前目錄下新建一個即可。trainlist.txt保存在當前文件夾下,然后運行如下命令:

    HInit -A -D -T 1 -S trainlist.txt -M hmm0 -H hmm_yes -l yes -L label_dir yes 回車
    HInit -A -D -T 1 -S trainlist.txt -M hmm0 -H hmm_no  -l no  -L label_dir no  回車
    HInit -A -D -T 1 -S trainlist.txt -M hmm0 -H hmm_sil   -l sil   -L label_dir sil 回車

    實現分別對三個模型hmm_yes,hmm_no,hmm_sil進行初始化。初始化成功后,初始化了的三個模型便被保存在了hmm0文件夾中。

    這里幾個參數比較難懂,需要解釋一下:

    -A -D -T 1 等參數,是顯示命令本身,顯示設定變量等功能,讀者可以在命令行直接輸入HInit回車,便可看到清晰的解釋,-M 后跟一個文件夾,這個文件夾用來存放初始化后的hmm文件,也就是輸出文件夾,這里我們采用hmm0文件夾;-H后跟hmm模型文件,比如hmm_yes;-l后是制定此HMM模型對應的標簽,這里hmm_yes對應的當然是yes了,還記得嘛,我們很辛苦做的標簽呢,當然如果你錯寫成no了,就會按照no標簽所指定的語音參數來初始化hmm_yes了,很影響訓練;-L 后寫上lab標簽文件所在文件夾,我們已經把所有lab文件存在了label_dir文件夾下,所以這里我們寫上label_dir;最后一個參數是

    其實到這里,初始化已經完成了,由於后面需要文件vFloors來對HMM進行訓練,所以還要使用Hcompv來進行一次訓練,以得到此文件,建立文件夾hmm0flat,運行如下命令即可:

    Hcompv -A -D -T 1 -S trainlist.txt -M hmm0flat -H hmm_yes -f 0.01 yes

    運行后在hmm0flat文件夾中有vFloors文件。復制到當前文件夾中。

    10.初始化成功后,就可以進行訓練了,想到訓練完成后,就離識別不遠了,開心呀,新建hmm1,hmm2,hmm3三個文件夾,分別保存三次訓練的結果。

    a.訓練模型hmm_yes,運行如下命令:

    HRest -A -D -T 1 -S trainlist.txt -M hmm1 -H vFloors -H hmm0\hmm_yes -l yes -L label_dir yes 回車,實現對模型yes的第一次迭代優化,使用如下命令進行第二次:

    HRest -A -D -T 1 -S trainlist.txt -M hmm2 -H vFloors -H hmm1\hmm_yes -l yes -L label_dir yes 回車,實

 現對模型yes的第二次迭代優化,使用如下命令進行第三次:

    HRest -A -D -T 1 -S trainlist.txt -M hmm3 -H vFloors -H hmm2\hmm_yes -l yes -L label_dir yes 回車。

    我們就完成了對模型hmm_yes的訓練,並保存在了hmm3文件夾中。

    b.訓練模型hmm_no,運行如下命令:

    HRest -A -D -T 1 -S trainlist.txt -M hmm1 -H vFloors -H hmm0\hmm_no -l no -L label_dir no 回車,實現對模型no的第一次迭代優化,使用如下命令進行第二次:

    HRest -A -D -T 1 -S trainlist.txt -M hmm2 -H vFloors -H hmm1\hmm_no -l no -L label_dir no 回車,實

 現對模型no的第二次迭代優化,使用如下命令進行第三次:

    HRest -A -D -T 1 -S trainlist.txt -M hmm3 -H vFloors -H hmm2\hmm_no -l no -L label_dir no 回車。

    我們就完成了對模型hmm_no的訓練,並保存在了hmm3文件夾中。

    c.訓練模型hmm_sil,運行如下命令:

    HRest -A -D -T 1 -S trainlist.txt -M hmm1 -H vFloors -H hmm0\hmm_sil -l sil -L label_dir sil 回車,實現對模型sil的第一次迭代優化,使用如下命令進行第二次:

    HRest -A -D -T 1 -S trainlist.txt -M hmm2 -H vFloors -H hmm1\hmm_sil -l sil -L label_dir sil 回車,實

 現對模型sil的第二次迭代優化,使用如下命令進行第三次:

    HRest -A -D -T 1 -S trainlist.txt -M hmm3 -H vFloors -H hmm2\hmm_sil -l sil -L label_dir sil 回車。

    我們就完成了對模型hmm_sil的訓練,並保存在了hmm3文件夾中。

    訓練完成。

   11.現在離識別只差一步了,嘿嘿,繼續跟着我做。建立句法文件gram.txt,文件內容如下:

   $WORD = YES | NO;

   ( { START_SIL } [ $WORD ] { END_SIL } )

   將上面內容保存為gram.txt即可,因我們只識別一個單詞,yes 或者 no 這里就定義了一個單詞加上前后兩個靜音。

    建立詞典文件,輸入以下內容:

    YES       [yes]  yes
    NO        [no]   no
    START_SIL [sil]  sil
    END_SIL   [sil]  sil

    保存為 dict.txt文件即可。這里將句法中的YES,輸出為[yes],定義對應模型為yes。NO的輸出設置為no,對應模型設置為no,把句法中的START_SIL和END_SIL設置為相同的參數,如文件中。此文件復制過去后,可能有看不到的不標准字符,需要你把復制過去的空格去掉再輸入一次。這樣后面才不會報錯。

   然后用如下命令將句法文件gram.txt編譯成網絡:

    HParse -A -D -T 1 gram.txt net.slf

  用如下命令查字典文件中的錯誤:

    HSGen -A -D -n 10 -s net.slf dict.txt

    12.識別。准備文件hmmlist.txt,其內容為:

yes

no

sil

保存起來。

    建立文件input.mfcc(使用1至8步生成一個待識別的MFCC文件),或者可以直接使用yes_xx.mfcc來做試驗。使用命令:

    HVite -A -D -T 1 -H hmm3\hmm_yes -H hmm3\hmm_no -H hmm3\hmm_sil -I reco.mlf -w net.slf dict.txt hmmlist.txt input.mfcc 

   然后記事本打開reco.mlf,便可看到識別結果。如果提示錯誤,沒有reco.mlf文件,不仿自己先用記事本創建一個空的reco.mlf文件。

   這里,我們的HMM模型一共有3個,所以分別寫在-H后面的辦法來使用,如果有更多的HMM模型,我們就不能這樣寫了,采用如下的命令格式:

    HVite -A -D -T 1 -C directin.conf -g -H hmmsdef.mmf -w net.slf dict.txt hmmlist.txt input.mfcc

    這里采用的是用一個后綴為mmf的主宏文件,它是由所有HMM模型文件寫在一起的文件,比如,本文的3個模型就可以用如下方法來寫一個主宏文件:

 ~o
<STREAMINFO> 1 39
<VECSIZE> 39<NULLD><MFCC_D_A_0><DIAGC>
~h "yes"
<BEGINHMM>
<NUMSTATES> 6
<STATE> 2
<MEAN> 39
 -5.560295e+000 2.467809e+000 7.543131e+000 1.205044e+000 -4.135031e+000 -6.866978e+000 -5.575079e+000 -7.244508e+000 -1.268335e+000 -1.334227e+001 -7.667554e-001 -8.828279e+000 6.305791e+001 7.854634e-001 2.438530e-001 3.313011e+000 -3.466940e-001 -2.613595e+000 -8.357538e-001 -2.488270e+000 -1.450052e+000 -8.162269e-001 -3.785841e-001 1.109608e+000 5.292199e-001 1.529532e+000 -3.840135e-001 -8.552541e-001 -2.642866e-001 -3.238665e-001 -5.276523e-001 -2.526920e-001 7.280868e-001 6.604324e-001 8.749401e-003 7.164187e-001 9.475101e-001 2.887047e-001 1.034154e-001
<VARIANCE> 39
 1.916909e+000 1.275584e+000 1.570780e+001 1.017245e+001 1.858337e+001 9.255550e+000 1.450472e+001 1.307447e+001 2.623391e+000 1.230408e+001 1.331315e+001 4.139080e+000 2.996713e+000 9.076914e-001 2.256964e+000 1.108444e+000 1.335223e+000 2.852070e+000 9.947189e-001 2.889097e+000 1.765044e+000 1.063393e+000 3.417341e+000 3.719466e+000 5.576853e-001 1.023817e-001 3.800316e-002 1.323943e-001 4.085928e-001 1.282977e-001 3.773029e-001 1.206995e-001 4.023054e-001 5.749762e-001 2.383080e-001 2.696266e-001 1.599966e-001 7.087921e-002 1.833246e-002
<GCONST> 7.612393e+001
<STATE> 3
<MEAN> 39
 -5.913797e+000 -4.365698e+000 1.418108e+001 -2.059599e+000 -1.814819e+001 -1.289064e+001 -6.513318e+000 -3.953842e+000 -4.892762e+000 -9.960979e+000 1.200297e+001 -5.096629e+000 6.967976e+001 -8.951111e-002 -1.443667e+000 -5.611101e-001 -4.399965e-001 -1.252340e+000 -1.240768e+000 3.258628e-001 2.167057e+000 -9.489894e-003 3.286855e-001 1.564566e+000 3.079422e-001 1.067209e+000 -1.662790e-002 1.044778e-001 -6.624178e-001 1.790552e-001 7.852477e-001 2.394754e-001 5.346865e-002 2.446395e-001 3.382760e-001 -2.959084e-001 -7.234101e-001 -2.515628e-001 -1.593625e-001
<VARIANCE> 39
 7.674729e+000 1.099033e+001 3.380254e+001 1.551273e+001 2.867217e+001 3.369737e+001 2.960959e+001 3.642490e+001 9.700713e+000 4.140916e+001 2.213822e+001 9.767385e+000 6.958179e+000 3.083268e-001 6.326413e-001 3.035761e+000 5.464101e-001 2.184300e+000 1.462005e+000 1.122333e+000 2.576114e+000 1.494235e+000 1.869450e+000 3.093436e+000 1.007256e+000 1.697933e-001 4.649463e-002 1.108574e-001 3.745079e-001 1.442188e-001 5.264582e-002 2.815477e-001 4.614286e-001 6.650322e-001 1.773610e-001 3.494999e-001 3.648607e-001 7.041881e-002 1.702319e-002
<GCONST> 8.693305e+001
<STATE> 4
<MEAN> 39
 -2.626779e+000 -1.006746e+001 1.324205e-001 -1.022190e+000 -1.017110e+001 -1.316895e+001 -4.377057e+000 6.441502e+000 4.007662e+000 -1.092647e+001 3.295897e+000 -1.090154e+001 7.284025e+001 1.593065e-001 1.247510e-001 -6.647451e-001 -1.154858e-001 6.535580e-001 1.681931e-001 1.093640e-001 9.567864e-002 2.888749e-001 4.096415e-001 -7.456395e-001 -4.928815e-001 -9.982761e-002 -7.972100e-002 1.492678e-001 5.516066e-002 -5.567876e-002 -2.232025e-003 -3.899807e-002 3.854467e-002 -6.564865e-002 -9.385724e-002 1.078040e-001 1.624756e-002 -2.174711e-002 -8.576453e-002
<VARIANCE> 39
 8.935842e+000 7.884045e+000 3.016536e+001 1.194977e+001 3.394068e+001 2.145726e+001 2.136157e+001 2.488684e+001 3.243732e+001 3.988887e+001 3.037219e+001 3.554942e+001 5.147613e+000 3.835949e-001 1.038611e+000 8.506106e-001 7.902109e-001 1.016173e+000 9.543892e-001 9.757534e-001 1.079207e+000 1.683750e+000 1.916537e+000 1.528188e+000 1.036401e+000 4.216504e-001 7.934329e-002 8.315724e-002 1.019701e-001 1.249232e-001 1.832933e-001 1.500916e-001 1.140296e-001 2.434811e-001 1.929354e-001 2.184601e-001 2.573351e-001 2.200356e-001 4.097395e-002
<GCONST> 8.415180e+001
<STATE> 5
<MEAN> 39
 -1.722915e+001 1.558756e+000 -6.352075e+000 -6.810540e+000 1.793851e+000 -7.542542e+000 1.001723e-001 8.047865e+000 1.059246e+000 -4.345902e+000 6.177027e-001 -1.362520e+001 6.509851e+001 -7.531838e-001 1.548218e-001 -2.277896e-001 -9.475082e-003 3.130113e-001 3.282159e-001 3.640014e-001 2.064544e-002 -7.544725e-002 -3.198811e-001 1.626379e-001 2.603270e-001 -4.557977e-001 1.115186e-001 -1.498197e-001 1.851567e-002 5.462770e-002 -6.049009e-002 4.086701e-002 -2.223603e-002 -7.436965e-002 7.085064e-002 -7.081138e-002 5.539847e-002 6.386208e-002 3.100476e-002
<VARIANCE> 39
 3.333078e+001 1.038335e+001 1.133323e+001 1.084346e+001 2.765559e+001 2.805067e+001 1.805031e+001 1.112923e+001 2.524041e+001 3.597572e+001 1.953421e+001 2.732470e+001 8.838473e+000 2.207273e+000 1.359541e+000 6.254531e-001 1.171842e+000 1.435330e+000 1.533987e+000 1.270733e+000 1.416954e+000 1.234814e+000 1.864773e+000 1.155947e+000 1.679582e+000 6.852837e-002 1.702434e-001 7.857703e-002 1.419667e-001 2.462802e-001 2.167625e-001 2.748685e-001 2.915890e-001 1.961887e-001 2.904242e-001 3.673494e-001 2.553481e-001 2.479914e-001 2.185772e-002
<GCONST> 8.837502e+001
<TRANSP> 6
 0.000000e+000 1.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000
 0.000000e+000 7.142819e-001 2.857181e-001 0.000000e+000 0.000000e+000 0.000000e+000
 0.000000e+000 0.000000e+000 8.185092e-001 1.814908e-001 0.000000e+000 0.000000e+000
 0.000000e+000 0.000000e+000 0.000000e+000 9.493426e-001 5.065738e-002 0.000000e+000
 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 9.480510e-001 5.194894e-002
 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000
<ENDHMM>

~h "sil"
<BEGINHMM>
<NUMSTATES> 6
<STATE> 2
<MEAN> 39
 -1.205055e+001 -6.071544e+000 -4.953431e+000 -2.086219e+000 -7.696532e-001 -6.180044e+000 4.428514e+000 4.089669e-001 7.677385e-001 -6.506588e+000 8.637049e-001 -8.133173e+000 5.893624e+001 1.028111e-001 -2.095059e-001 4.930916e-002 1.026503e-001 -7.224108e-002 -2.562836e-002 -1.078459e-002 -3.646078e-001 -2.352235e-003 6.649423e-002 -2.300011e-001 -1.368367e-001 -4.435970e-002 -4.705233e-002 2.732716e-002 -4.914735e-002 -5.064989e-002 2.004289e-002 4.518612e-002 1.482240e-001 8.472140e-002 8.018477e-002 6.218801e-002 -4.590823e-002 -1.713296e-001 2.698532e-003
<VARIANCE> 39
 9.995130e+000 1.285863e+001 2.555799e+001 2.054044e+001 9.829945e+000 1.024835e+001 1.871873e+001 2.378679e+001 1.472677e+001 1.326252e+001 1.081685e+001 1.696764e+001 2.495445e+000 2.721120e-001 3.311672e-001 9.093692e-001 1.297935e+000 9.627227e-001 7.321044e-001 1.502767e+000 2.155972e+000 1.592869e+000 1.370266e+000 1.524849e+000 1.053926e+000 1.374337e-001 4.785442e-002 8.618005e-002 2.562610e-001 3.408333e-001 2.088208e-001 1.607134e-001 3.452048e-001 4.799360e-001 2.922609e-001 2.281612e-001 2.726102e-001 2.110895e-001 2.339070e-002
<GCONST> 8.032516e+001
<STATE> 3
<MEAN> 39
 -1.814091e+001 2.663553e+000 -4.914350e+000 -2.317764e+000 3.008735e+000 -1.087707e+000 1.287625e+000 6.091899e+000 2.862558e+000 -9.924241e+000 1.373552e+000 -8.071694e+000 6.348404e+001 3.318730e-001 -5.278828e-001 -9.494247e-002 -1.499072e-001 -3.174666e-001 -2.823065e-001 6.108246e-002 -1.983474e-001 4.261266e-002 3.537025e-001 4.446607e-002 -2.076580e-001 -2.741475e-001 6.894246e-002 -3.391993e-002 -1.667663e-002 4.350851e-003 -1.227802e-001 -1.186949e-001 2.493934e-002 -8.243520e-003 -3.572219e-003 5.363566e-002 -2.770266e-003 2.467832e-002 1.546283e-002
<VARIANCE> 39
 1.741966e+001 9.769640e+000 7.445446e+000 3.836594e+000 5.780912e+000 1.168015e+001 4.097112e+000 1.824830e+001 7.713724e+000 1.395045e+001 1.004712e+001 8.168225e+000 2.396237e+000 3.433821e-001 2.388967e-001 5.241452e-001 3.407781e-001 8.314158e-001 5.915961e-001 3.974668e-001 9.651667e-001 1.279390e+000 1.831751e+000 8.403545e-001 1.283583e+000 3.289731e-002 2.251048e-002 3.344000e-002 5.462619e-002 4.896105e-002 9.426531e-002 7.631385e-002 1.575904e-001 1.856415e-001 2.600564e-001 3.332623e-001 1.524348e-001 2.639678e-001 1.144448e-002
<GCONST> 5.856438e+001
<STATE> 4
<MEAN> 39
 -1.248727e+001 -7.260995e+000 -6.642402e+000 -2.322764e+000 -1.222477e+000 -5.968217e+000 6.963343e+000 1.038801e+000 2.325013e+000 -5.088502e+000 1.184449e+000 -8.760984e+000 5.800127e+001 4.907846e-002 1.306961e-003 -3.865775e-002 1.567145e-002 6.507996e-002 4.037856e-002 3.564140e-002 -1.379082e-002 4.384908e-002 1.433475e-003 5.116213e-002 -1.162575e-002 -2.618222e-002 8.161297e-003 3.528028e-002 3.151031e-002 1.165633e-002 1.063840e-002 -7.419401e-003 -4.056268e-002 -2.333735e-002 -1.917983e-002 -3.858940e-002 -9.163742e-003 1.074605e-002 1.217738e-002
<VARIANCE> 39
 1.636021e+000 2.962028e+000 4.243609e+000 5.675200e+000 6.495543e+000 9.003530e+000 8.768224e+000 9.354281e+000 1.236154e+001 1.266188e+001 1.303056e+001 9.000397e+000 4.370964e-001 1.208583e-001 2.222505e-001 3.274788e-001 4.198043e-001 5.608954e-001 7.269357e-001 9.016341e-001 8.214277e-001 1.080170e+000 1.237950e+000 1.379923e+000 8.003727e-001 3.261130e-002 3.120635e-002 6.066960e-002 6.583845e-002 6.907440e-002 1.138000e-001 1.205961e-001 1.915481e-001 1.594258e-001 2.234952e-001 2.459052e-001 3.115267e-001 1.641423e-001 6.802158e-003
<GCONST> 5.376580e+001
<STATE> 5
<MEAN> 39
 -7.860916e+000 -5.552484e+000 -4.901682e+000 -7.598982e+000 -4.282944e+000 -3.838386e+000 -6.697090e+000 -2.647323e+000 7.187539e+000 -8.239985e+000 1.202350e+000 -1.147782e+001 6.722357e+001 5.913837e-001 7.170141e-001 7.908542e-001 -2.591267e-001 -1.913313e-001 4.859999e-001 -1.239970e+000 -5.252860e-001 -2.478153e-001 -6.614624e-001 1.068146e-001 -1.770269e-001 6.459577e-001 1.310726e-001 1.197230e-001 3.162154e-001 8.112387e-002 -1.617024e-002 9.388867e-002 -1.802869e-001 -2.021954e-001 -1.142057e-001 -1.215021e-001 -2.550250e-002 9.946529e-002 7.361362e-002
<VARIANCE> 39
 1.016246e+001 1.689860e+001 1.697070e+001 7.355496e+001 1.682707e+001 3.573024e+001 1.405454e+002 2.217239e+001 3.946589e+001 1.374710e+001 3.769558e+001 2.095991e+001 6.122581e+001 9.523191e-001 2.348769e+000 3.175460e+000 1.866060e+000 1.131489e+000 1.451207e+000 4.070387e+000 2.776337e+000 1.532084e+000 2.172313e+000 2.741962e+000 1.458419e+000 6.819526e-001 7.628198e-002 1.794787e-001 2.118285e-001 1.426576e-001 2.539506e-001 2.432116e-001 6.223864e-001 4.009807e-001 1.190235e-001 2.711118e-001 4.121704e-001 2.268752e-001 1.015960e-001
<GCONST> 1.031369e+002
<TRANSP> 6
 0.000000e+000 9.230768e-001 7.692318e-002 0.000000e+000 0.000000e+000 0.000000e+000
 0.000000e+000 7.490159e-001 2.091535e-002 2.300688e-001 0.000000e+000 0.000000e+000
 0.000000e+000 0.000000e+000 8.947203e-001 5.041008e-002 5.486963e-002 0.000000e+000
 0.000000e+000 0.000000e+000 0.000000e+000 9.399282e-001 2.511858e-002 3.495316e-002
 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 8.229873e-001 1.770128e-001
 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000
<ENDHMM>

    注意:~o 與 ~h之間的部分只包含一次。這里用的hmm文件是訓練好的hmm文件,按照上面的訓練步驟,最后得到的HMM文件應該是保存在hmm3文件夾中的。將此內容保存為hmm3.mmf,保存在與direction.conf等文件同一個目錄,然后運行如下命令:

    HVite -A -D -T 1 -C  directin.conf -g -H hmm3.mmf -w net.slf dict.txt hmmlist.txt yes_03.mfcc

    13.交互式識別。12步中的識別較為繁瑣,其實這里有個交互式識別的方法。輸入如下命令即可:

    HVite -A -D -T 1 -C directin.conf -g -H hmm3\hmm_yes -H hmm3\hmm_no -H hmm3\hmm_sil -w net.slf dict.txt hmmlist.txt

    或者HVite -A -D -T 1 -C directin.conf -g -H hmm3mmf -w net.slf dict.txt hmmlist.txt

   這里需要一個derectin.conf文件,內容如下:

   SOURCERATE = 625.0               #=16kHz,采樣率   
  SOURCEKIND = HAUDIO
  SOURCEFORMAT = HTK
 
  TARGETKIND = MFCC_0_D_A      #后面是參數格式,制定提取MFCC特征參數的格式,與訓練時要保持一致
  WINDOWSIZE = 250000.0
  TARGETRATE = 100000.0
  NUMCEPS = 12
  USEHAMMING = T
  PREEMCOEF = 0.97
  NUMCHANS = 26
  CEPLIFTER = 22
  AUDIOSIG = -1        #指定按鍵控制交互過程。

 

使用此命令后,會出現提示符 READY[1]> 表示開始錄音,你開始說話(說話內容當然為yes 或者 no,我們模型也只有這么兩個 ),說完后,按下回車,停止錄音,並顯示識別結果,回放錄音,然后出現READY[2]>提示符,等待下一個輸入信號...如圖所示:(http://www.zhaomingming.cn/HTK語音識別/交互式識別.jpg)(將整個超鏈接復制到地址欄中打開即可)。

    14.統計系統識別率和錯誤率。這個我還沒做,等做了就給這部分補上,應該不難。新加命令應該有個與目標數據的對比,統計部分的內容。其他識別命令什么的都已經用過了。

-------------------------------------------------------------------------------

                                                  展望篇

-------------------------------------------------------------------------------

     HTK工具的基本使用方法是知道了,那么該如何來建立復雜一點的識別系統呢?因為MFCC可用來作為說話人識別的特征參數,可以先建立一個說話人識別系統,從識別三個人試驗開始做實驗,看下最終它能識別的人數。然后建立起常用語句的識別系統,這個要選擇好的音素,剛開始試驗可以用三音子,這個工作有兩個難點:1.語音庫的整理;2,標注。都很需要細致和耐心。當然堅持到最后,相信付出會有回報的,一個連續語音識別系統建立起來了。然后你自己可以試驗其他音素,驗證其他特征,以獲得較高的識別率。另外,利用HTK貌似只能建立起聲紋識別系統,因為其字典貌似很死板,起不到語言學識別的作用,那么該怎么辦呢?如何才能做一個大規模漢語連續語音識別系統?語言學方面二元文法可以是個方向,雖然有人做過,頭一次做的話,“山寨”一下也可以。哦,用算法,不能算山寨吧,嘿嘿。

    感慨一句,感性認識中,概率的方法做識別,性能肯定好不了。因為它只是個概率呀,肯定達不到100%。但現實中,計算不復雜,識別率較高的實際應用系統,都是用的概率方法。

    

   

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM