【转载+原创】HTKBook sample之dial application,拨号语音识别(正在进行,欢迎交流)

学习HTK,安装过后便进入第一个实例dial application

网上步骤写的很清楚,但是有一些没写到的,会报错的,我用红笔修改了,FYI。

整个系统分为四大部分,共有11步组成:

(一)数据准备

Step 1: The Task Grammar

Step 2: The Dictionary

Step 3: Recording the Data

Step 4: Creating theTranscription Files

Step 5: Coding the Data

(二)建立单音素的HMM模型

Step 6: Creating Flat Start Monophone

Step 7: Fixing the Silence Models

Step 8: Realigning the TrainingData

(三)创建绑定状态的三音素HMM模型

Step 9: Making Triphones fromMonophones

Step 10: Making Tied-StateTriphones

(四)识别器的评估

Step 11: Recognizing the TestData

下面是详细的实验步骤:


0.HTK的安装

网上很多教程了,可以参考http://blog.sina.com.cn/s/blog_436992740102uw1j.html

不过,额外需要做的是:

x11 在window下不能用,不能用HGraf.X.c 和 HGraf.null.c,用HGraf_WIN32.c 

于是乎,自己动手,修改htk_htklib_nt.mkf(两处),将HGraf.null.obj替换为HGraf_WIN32.obj,HGraf.null.olv替换为 HGraf_WIN32.olv。
再按照README的步骤安装即可。


1.数据准备

需要录制训练数据和测试数据。为进行校准,还需要数据的标注文本。这里用任务语法(task grammar)产生真值文本(ground truth)。为了处理训练数据,需要定义一个语音集合和一个字典用以涵盖训练和测试数据中涉及的单词。

[step 1]任务语法定义

创建文件:gram

创建位置:根目录下

文件内容:

\

上面的语法是高层表示,必须通过HParse转成HTK可用的底层表示。

运行:

HParse gram wdnet

生成:wdnet

生成位置:根目录

生成内容:

\

[step 2]字典定义

创建文件夹:dict lists

创建文件:BEEP语音字典(网上可以下载)beep beep.ded(空) names(手工制作的专有人名的发音,包括SEND-START,SEND-END) name.ded

放入位置:dict

创建文件:global.ded

创建位置:根目录下

文件内容:

\

此例中利用BEEP语音字典,除去其中的重音符,并在每个发音后加入sp(short pause,小停顿)。如果有哑音标志,就用MP命令把sil和sp合并成sil。

创建文件:wlist

创建位置:lists

创建内容:

\

执行:

HDMan -m -w .\lists\wlist -g global.ded -n .\lists\monophones1 -l dlog .\dict\dict1 .\dict\beep .\dict\names

执行此句命令之前需要做到:

1、已下载beep词典,且已利用perl脚本将其排序

2、手写好names词典(因为beep不包括人名这些的发音,所以要自己手写)

3、wlist写好,(wlist是所有会出现的词的列表)

4、注意:每个词典都要在最后加一行blank line,不然会出现迷之报错。(本人就在这里卡住了几个小时,FYI)


生成文件:monophones1 (用于用到的音素列表)

生成位置:lists 

生成文件:dlog(参数文件记录过程)

生成位置:根目录

生成文件:dict1

生成位置:dict

注1 :实际上,这里应该手工修改 dict1 ,为SENT-END 和SENT-START 加上无输出标志,
为了展示队后面步骤地影响,这里故意不添加。

\

注:HDMan工具的具体详细解释以及使用可以参看HTK BOOK P262 

[step 3]录制语音数据

创建文件夹:labels

HSGen工具可以生成符合task grammar的句子,用来指导录音(HTK BOOK里叫sentence prompts):

执行:

HSGen -l -n 140 wdnet .\dict\dict1> .\labels\trainprompts(注意空格不能省略,不然会报错)

执行:

HSGen -l -n 15 wdnet .\dict\dict1> .\labels\testprompts(注意空格不能省略,不然会报错)

根据上述指令文件,录制相应的140个训练用语音数据文件和15个测试用语音数据文件。

生成文件:trainprompts testprompts

一个录制的例子如下: 
HSLab .\data\Train\speech\S0001 

[step 4]标注数据,得到真值文件

创建文件夹:scripts labels 

创建文件:prompts2mlf(HTK scripts目录下自带)

创建位置:scripts

Perl脚本prompts2mlf(在scripts目录下HTK自带)可以把录音文本截成单词级真值文件。

执行:

perl .\scripts\prompts2mlf .\labels\trainwords.mlf .\labels\trainprompts

perl .\scripts\prompts2mlf .\labels\testwords.mlf .\labels\testprompts

注:要在每个lab路径之前加上“*/”

生成文件:trainwords.mlf testwords.mlf

生成位置:labels

标注编辑器HLEd可把单词级真值文本(wordlevel MLF)转成音素级真值文本(phonelevel MLF):

创建文件:mkphones0.led(注意末尾加一行blank line,不然会报错)

创建位置:根目录

创建内容:

\

EX命令表示按照字典dict1进行展开,IS表示在每个话语的前后插入标志,DE一行表示phones0.mlf中单词间不用sp隔开。

执行:

HLEd -l * -d .\dict\dict1 -i .\labels\phones0.mlf mkphones0.led .\labels\trainwords.mlf

生成文件:phones0.mlf

生成位置:labels

注:HLEd工具的详细讲解可以参考HTK BOOK P284

Step 5: Coding the Data

创建文件夹:config

创建文件:config1(要设置的参数)

创建位置:config



这一步搞了好久,下面写几点理解:

1.step5这一步的目的是: to parameterise the raw speech waveforms into sequences of feature vectors

就是提取raw语料的mfcc特征参数,工具为:HCopy

2. wav格式的文件?

①如何得到? 如果使用Windows录音工具,那么是m4a格式的文件。注意,直接改后缀是不行的,虽然可以播放但是格式不正确,会报错not RIFF format(error6251)。所以正确的方式是使用编辑音频的软件或者转换格式的软件去改后缀,我用的是轻量级傻瓜编辑软件goldenwave,直接存为wav格式即可。

②如果input file是wav格式,那么需要在config文件中加上一行 SOURCEFORMAT = WAV ,因为默认是sig格式(也就是hslab可以录制出的一种格式)。

3.scp文件

To run HCopy, a list of each source file and its corresponding output file is needed.  -------htkbook

我新建了hcopy.scp,内容为:

./sjy/waves/mine1.wav ./sjy/train/mine1.mfc
./sjy/waves/mine2.wav ./sjy/train/mine2.mfc
./sjy/waves/mine3.wav ./sjy/train/mine3.mfc

4.运行

HCopy -C .\config\config_wav -S hcopy.scp

即可看到生成了mfc文件且无报错

(但是目前我看到的mfc文件是乱码,所以后面继续做下去才能figure out是否正确)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值