前言
本文参考自HTK BOOK,完成数字序列的连续语音识别系统搭建,数字按照中文发音,如果HTK安装存在问题,或者HTK工具、脚本存在缺失,不在本文范围内;step by step! 详细步骤! 话不多说,开始!
步骤
-  建立目标语法文件:digit.gram, 内容如下: $digit= ( one | two | three | four | five | six | seven | eight | nine | zero ); (SENT-START <$digit > SENT-END)
-  由语法文件生成词网络 : 
 执行命令HParse digit.gram digit.net 生成 digit.net 词网络,digit.net的内容大致如下:VERSION=1.0 N=15 L=33 I=0 W=SENT-END I=1 W=zero I=2 W=!NULL I=3 W=nine I=4 W=eight I=5 W=seven ... J=23 S=2 E=8 J=24 S=12 E=8 J=25 S=2 E=9 J=26 S=12 E=9 J=27 S=2 E=10 J=28 S=12 E=10 J=29 S=2 E=11 J=30 S=12 E=11 J=31 S=14 E=12 J=32 S=0 E=13
-  生成词典:dict 
 在HTK BOOK中,是使用HDMan -m -w wlist -n monophones0 -l dlog dict beep names生成词典和monophones,beep和names这两个发音词典需要用户下载、编辑,然后HDMan 将wlist中的词依次标上发音,beep词典htk book中给出了链接下载,这里可能会报order的问题,词典必须先排序。
 在本文中,并未采用该词典,而是直接手动编辑,本文采用的是中文发音(虽然符号是英文的one,two…你也可以用中文‘一’,‘二’…,但不能用阿拉伯数字12345…,会出错),不会采用beep发音词典,以下是手动编辑的dict:SENT-END sil SENT-START sil eight b a five u four s I nine j y ow one i seven q i six l y ow three s a nT two er zero l i ngmonophone.0,训练词典中的音素列表,手动编辑如下: l i ng er s a nT I u y ow q b j sil如果你有大量词汇,建议还是用HDMan来生成 
-  录音: 
 采用HTK自带的工具录音(仅windows),命令HSGen -l -n 200 digit.net dict > testprompts,生成testprompts,该文件是按照语法网络随机生成的sentence,然后按照testprompts的内容录音,testprompts文件内容大概如下:1. SENT-START one eight two SENT-END 2. SENT-START six three one two SENT-END ... n-1. SENT-START eight five three eight six nine five eight seven eight one SENT-END n. SENT-START five SENT-ENDHTK的HSLab工具,执行HSLab noname,弹出界面如下,点击rec,说话,然后点击stop,最后save: 
  
-  建立词级别标注文件 
 HTKTutorial目录下提供的prompts2mlf脚本,根据testprompts生成标注文件digit.mlf(需要根据你wav保存的文件名做适当编辑),mlf文件大致如下:#!MLF!# "*/noname_s1.lab" one eight two . "*/noname_s2.lab" six three one two . ......
-  建立音素级别标注文件 
 HLEd 工具完成音素级别标注,命令HLEd -l * -d dict -i phones0.mlf mkphones0.led digit.mlf,其中mkphones0.led文件内容编辑如下,具体含义可查看htk book:EX IS sil sil DE sp生成的phones0.mlf文件如下: #!MLF!# "*/noname_s1.lab" sil i b a er sil . "*/noname_s2.lab" sil l y ow s a nT i er sil . ......
-  wav编码 
 编码即音频特征提取,本文跟htk book保持一致,采用mfcc特征
 命令:HCopy -T 1 -C mfcc.cfg -S wav.scp
 其中mfcc.cfg内容如下:# Coding parameters 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 = Fwav.scp文件内容大致如下,根据你自己的路径和文件名来编辑,linux系统也一样: E:\htk_demo\noname_s1.wav E:\htk_demo\noname_s1.mfc E:\htk_demo\noname_s2.wav E:\htk_demo\noname_s2.mfc E:\htk_demo\noname_s4.wav E:\htk_demo\noname_s4.mfc E:\htk_demo\noname_s5.wav E:\htk_demo\noname_s5.mfc E:\htk_demo\noname_s6.wav E:\htk_demo\noname_s6.mfc ...执行完后,会生成与wav文件对应的mfcc特征文件 
-  建立Flat Start Monophones (单高斯) 
 大部分情况下,我们很难事先去做音素级别的标注,所以采用Flat Start 的方式初始化。
 命令HCompV -C mfcc.cfg -f 0.01 -m -S wav.scp -M hmm0 proto, 记得手动创建hmm0文件夹,同时需要先定义HMM模型,proto文件如下:~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

 
                   
                   
                   
                   本文详细介绍了如何利用HTK工具从头构建一个针对中文发音的数字连续语音识别系统。步骤包括:创建语法文件、生成词网络、制作词典、录音、创建标注文件、提取音频特征、进行HMM模型训练、确定静音模型、建立三音素模型、模型绑定及结果验证。通过这个过程,作者实现了对数字序列的准确识别。
本文详细介绍了如何利用HTK工具从头构建一个针对中文发音的数字连续语音识别系统。步骤包括:创建语法文件、生成词网络、制作词典、录音、创建标注文件、提取音频特征、进行HMM模型训练、确定静音模型、建立三音素模型、模型绑定及结果验证。通过这个过程,作者实现了对数字序列的准确识别。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   9110
					9110
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            