选自:http://www.cnblogs.com/mingzhao810/archive/2012/08/03/2617674.html

这个是重点,呵呵,本部分会讨论到如下内容:

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学习2:工具使用相关推荐

  1. HTK学习笔记(一)

    HTK学习笔记(一) 一.HTK软件体系结构     HTK的软件体系结构 HTKTool各部分的功能: 所有的语音输入和输出都是通过HWAVE或HPARM HAudio:用于从音频设备输入波形 HW ...

  2. 分享五款java学习辅助工具,总有你用的上的~

    想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1. ...

  3. TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练 引

    . TensorRT是NVIDIA开发的深度学习推理工具,只支持推理,不支持训练:   目前TensorRT3已经支持Caffe.Caffe2.TensorFlow.MxNet.Pytorch等主流深 ...

  4. J2EE学习辅助工具资料列表及下载3(初学积累中)

    以下为其它二集地址: J2EE学习辅助工具资料列表及下载1(初学积累中) [url]http://soly84.blog.51cto.com/153780/41748[/url] J2EE学习辅助工具 ...

  5. 又有黑科技啦,让老照片还原成彩色!ColouriseSG深度学习上色工具

    先前给各位介绍过 AI Image Enlarger黑科技-人工智能无损放大图片素材不失真 ,相信大家都会人工智能有或多或少的了解吧-今天给大家推荐老照片修复三色工具.相信大家都曾经看过老的照片,不管 ...

  6. 前端开发学习及工具网站(持续更新)

    前端开发学习及工具网站 该文章主要是记录前端开发中好的学习网站或者工具网站 大部分实用网站来源抖音鱼皮大佬分享,这里分享给大家 1.w3cschool(编程狮) 这个网站适合0基础学前端的同学,内容简 ...

  7. 深度学习标注工具2021-07-13

    深度学习标注工具   深度学习前期需要做 Label,说实话,其实深度学习大多数就是在做 label, 本科 RS 其实做监督分类也是在做 label,只不过像素级别的 label. 常见的标注的工具 ...

  8. matlab slep,SLEP-sparse-learing-toolbox 稀疏学习算法工具,对图像进行降噪处理,有明显效果 matlab 263万源代码下载- www.pudn.com...

    文件名称: SLEP-sparse-learing-toolbox下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 2172 KB 上传时间: 2014-12 ...

  9. 猜测在学习新工具中的作用,一个实例

    1. 当年我参加李YL老师组织的Linux内核源码讨论班,大家坐教室里,人手一本厚厚的<Linux内核源代码情景分析>.多厚呢,上下册,单册800页左右.我们都把书摊在桌面上,举起来太累了 ...

  10. Markdown基本语法学习,工具Typora

    Markdown基本语法学习,工具Typora 一级标题,用一个#号,然后空格,后面填写文字回车 不能只顾着向前走,必须停下来回头看一看 二级标题,用两个#号,然后空格,后面输入文字回车 " ...

最新文章

  1. 【直播】陈信达:零基础计算机视觉之机器学习基础
  2. MathType如何设置标尺的单位
  3. 人工智能电磁车模如何入手?
  4. 提高使用比特币的匿名性
  5. mysql聚集索引可以多列吗_MySQL使用单列索引和多列索引
  6. 时代天使点燃口腔赛道,瑞尔集团离下一只“牙茅”还有多远?
  7. 【Verilog HDL】第四章 模块的端口连接规则——污水处理模型
  8. Java与.Net 在RSA加密方面能不能互相通讯操作???
  9. asp.net用url重写URLReWriter实现任意二级域名(续)
  10. ssh不能连接 提示WARNING: POSSIBLE DNS SPOOFING DETECTED!处理方法
  11. openstack 云_OpenStack作为云,CoreOS等的未来
  12. syslog传到服务器日志文件,将supervisor产生的日志通过syslog上传到服务端
  13. enityframework 已连接的当前状态为打开。_蓝牙连接有问题吗?尝试针对macOS的以下6个修复程序
  14. 第十课:栈的表示与实现
  15. CVPR 2022NTIRE 2022|首个用于高光谱图像重建的 Transformer
  16. 【空瓶识别】基于matlab灰度+二值化空瓶检测【含Matlab源码 806期】
  17. excel粘贴时出现故障_Excel常见问题及解决办法汇总
  18. r语言如何计算t分布临界值_医学统计与R语言:这个Calibration plot有点色!
  19. 【网络安全】DRIDEX木马巧用VEH混淆API调用流程
  20. 蓝桥杯单片机(八)DS18B20温度测量(整数显示)

热门文章

  1. 5、Dcoker 容器数据卷用-v命令添加
  2. nanopi基础配置
  3. Java两个列表根据属性去重_java8 如何对list操作 根据某一个字段进行判断去重对另一个字段进行累加 最终返回list?...
  4. UIProgressView的使用
  5. sysbench 压测 详解
  6. zabbix_get 命令介绍
  7. io.js 3.0发布:重写Buffer,支持PPC
  8. Android开发实例之多点触控程序
  9. CLR Via CSharp读书笔记(14):字符、字符串和文本处理
  10. Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。