700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python调用htk工具箱_基于HTK语音工具包进行孤立词识别的使用教程

python调用htk工具箱_基于HTK语音工具包进行孤立词识别的使用教程

时间:2022-09-22 18:10:05

相关推荐

python调用htk工具箱_基于HTK语音工具包进行孤立词识别的使用教程

1前言

最近一直在研究HTK语音识别工具包,前几天完成了工具包的安装编译和测试,这几天又按耐不住好奇,决定自己动手搞一搞,尝试一下用这个工具包,进行简单的孤立词识别,看了几天的文档,做了各种尝试,总算跌跌撞撞的实现了,把步骤记录下来,以后作为参考。

2孤立词识别系统

在本系统中我们将要实现三个词的识别系统,词汇集为:{brightness,channel,color}。

2.1搭建步骤

A:创建语料库,brightness,channel,color各录制5次。

B:声学分析,把wavform的声音文件转换为mfcc格式。

C:模型定义,为词典里面的每一个词建立一个HMM原型。

D:模型训练,HMM模型初始化和迭代。

E:问题定义,即语法定义。

F:对测试结合进行识别

G:评测

2.2工作环境搭建

创建如下目录结构:

(1)data/:存储训练和测试数据(语音文件、语音标签、特征矢量文件)。子目录:data/train/labdata/train/wavdata/train/mfccdata/test/labdata/test/wavdata/test/mfcc

(2) analysis/:存储声学分析步骤的文件

(3)training/:存储初始化和训练步骤的文件

(4)model/:存储识别系统的模型(HMMs)的相关文件。子目录:model/proto

(5)def/:存储任务定义的相关文件

(6)test:/存储测试相关文件

2.3标准HTK工具选项

一些标准选项对于每个HTK工具都是通用的。

(1)-A:显示命令行参数

(2)-D:显示配置设置

(3)-T1:显示算法动作的相关信息

完整的选项列表请参见:htkbook

3语料库的准备

我们来录制{brightness,channel,color}这个三个词的读音。同时每个录音都要进行标注,也就是有一个文

本文件与其对应描述它的内容。

3.1录音

我们将上述三个词各录制5次,保存为wav格式。并存放在data/train/wav/brightnessdata/train/wav/channeldata/train/wav/channel中。

3.2标注

我们可以用相关的语音处理软件进行标注。并把标注的文件放到data/train/lab/brightnessdata/train/lab/brightnessdata/train/lab/color中。

标注.lab文件的格式如下:

4声学分析

从原始的声音文件转换为特征矢量文件:

需要创建的文件:

(1)analysis.conf

创建目录:training/

说明:配置文件,说明了特征矢量的特性

内容:

注:参数意义详见:htkbook

(1)targetlist_train.txt

创建目录:training/

说明:列出源文件和目的的文件的位置,即声音文件和特征文件

内容:

指令:Hcopy-A-D-Ctraining/analysis.conf-Straining/targetlist_train.txt

运行结果:

我们会看到:

5HMM定义

需要创建的文件:hmm_brightnesshmm_channelhmm_colorhmm_silbhmm_sile

创建目录:model/proto

说明:用来定义单词的HMM模型

内容:

hmm_brightness:

~o39

~h"brightness"

10

2

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

3

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

4

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

5

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

6

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

7

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

8

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

9

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

10

0.01.00.00.00.00.00.00.00.00.0

0.00.50.50.00.00.00.00.00.00.0

0.00.00.50.50.00.00.00.00.00.0

0.00.00.00.50.50.00.00.00.00.0

0.00.00.00.00.50.50.00.00.00.0

0.00.00.00.00.00.50.50.00.00.0

0.00.00.00.00.00.00.50.50.00.0

0.00.00.00.00.00.00.00.50.50.0

0.00.00.00.00.00.00.00.00.50.5

0.00.00.00.00.00.00.00.00.00.0

注:hmm_channelhmm_color同hmm_brightness,不过最上面的名字要分别换成channel和color

hmm_silb:

~o39

~h"silb"

3

2

39

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

0.00.00.00.00.00.00.00.00.00.00.00.00.0

39

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

1.01.01.01.01.01.01.01.01.01.01.01.01.0

3

0.01.00.0

0.00.50.5

0.00.00.0

注:hmm_sile同hmm_silb,只修改名字就好。

6HMM训练

6.1初始化

需要创建的文件:

(1)trainlist_brightness.txttrainlist_channel.txttrainlist_color.txttrainlist_silb.txttrainlist_sile.txt

创建目录:training/

说明:特征矢量文件路径

内容:

(2)hmm0目录

创建目录:model/

说明:初始化后的HMM模型存放的位置

指令:

Hinit-A-D-T1-Straining/trainlist_brightness.txt-Mmodel/hmm0-Hmodel/proto/hmm_brightness-lbrightness-Ldata/train/lab/brightnessbrightness

Hinit-A-D-T1-Straining/trainlist_channel.txt-Mmodel/hmm0-Hmodel/proto/hmm_channel-lchannel-Ldata/train/lab/channelchannel

Hinit-A-D-T1-Straining/trainlist_color.txt-Mmodel/hmm0-Hmodel/proto/hmm_color-lcolor-Ldata/train/lab/colorcolor

Hinit-A-D-T1-Straining/trainlist_silb.txt-Mmodel/hmm0-Hmodel/proto/hmm_silb-lsilb-Ldata/train/lab/brightnesssilb

Hinit-A-D-T1-Straining/trainlist_sile.txt-Mmodel/hmm0-Hmodel/proto/hmm_sile-lsile-Ldata/train/lab/brightnesssile

初始化之后我们可以再hmm0文件夹中看到:

6.2训练

需要创建的目录:hmm1hmm2hmm3

创建位置:model/

每次,HRest迭代(即当前再估计迭代中的迭代)显示在屏幕上,通过change

量度标示收敛性。一旦这个量度值不再从一个HRest迭代到下个迭代减少(绝对值),过程就该停止了,迭代一般2-3次就可以了。

指令:

HRest-A-D-T1-Straining/trainlist_brightness.txt-Mmodel/hmm1-Hmodel/hmm0/hmm_brightness-lbrightness-Ldata/train/lab/brightnessbrightness

HRest-A-D-T1-Straining/trainlist_brightness.txt-Mmodel/hmm2-Hmodel/hmm1/hmm_brightness-lbrightness-Ldata/train/lab/brightnessbrightness

HRest-A-D-T1-Straining/trainlist_brightness.txt-Mmodel/hmm3-Hmodel/hmm2/hmm_brightness-lbrightness-Ldata/train/lab/brightnessbrightness

HRest-A-D-T1-Straining/trainlist_channel.txt-Mmodel/hmm1-Hmodel/hmm0/hmm_channel-lchannel-Ldata/train/lab/channelchannel

HRest-A-D-T1-Straining/trainlist_channel.txt-Mmodel/hmm2-Hmodel/hmm1/hmm_channel-lchannel-Ldata/train/lab/channelchannel

HRest-A-D-T1-Straining/trainlist_channel.txt-Mmodel/hmm3-Hmodel/hmm2/hmm_channel-lchannel-Ldata/train/lab/channelchannel

HRest-A-D-T1-Straining/trainlist_color.txt-Mmodel/hmm1-Hmodel/hmm0/hmm_color-lcolor-Ldata/train/lab/colorcolor

HRest-A-D-T1-Straining/trainlist_color.txt-Mmodel/hmm2-Hmodel/hmm1/hmm_color-lcolor-Ldata/train/lab/colorcolor

HRest-A-D-T1-Straining/trainlist_color.txt-Mmodel/hmm3-Hmodel/hmm2/hmm_color-lcolor-Ldata/train/lab/colorcolor

HRest-A-D-T1-Straining/trainlist_silb.txt-Mmodel/hmm1-Hmodel/hmm0/hmm_silb-lsilb-Ldata/train/lab/brightnesssilb

HRest-A-D-T1-Straining/trainlist_silb.txt-Mmodel/hmm2-Hmodel/hmm1/hmm_silb-lsilb-Ldata/train/lab/brightnesssilb

HRest-A-D-T1-Straining/trainlist_silb.txt-Mmodel/hmm3-Hmodel/hmm2/hmm_silb-lsilb-Ldata/train/lab/brightnesssilb

HRest-A-D-T1-Straining/trainlist_sile.txt-Mmodel/hmm1-Hmodel/hmm0/hmm_sile-lsile-Ldata/train/lab/brightnesssile

HRest-A-D-T1-Straining/trainlist_sile.txt-Mmodel/hmm2-Hmodel/hmm1/hmm_sile-lsile-Ldata/train/lab/brightnesssile

HRest-A-D-T1-Straining/trainlist_sile.txt-Mmodel/hmm3-Hmodel/hmm2/hmm_sile-lsile-Ldata/train/lab/brightnesssile

7.任务定义

7.1建立语法规则和字典

需要创建的文件:

(1)gram.txt

创建的目录:def

说明:在使用我们的单词模型之前,要定义识别器的基本结构(任务语法)。我们首先定义最简单的语法:开始停顿、接着简单单词(这里指brightness,channel,color)、结束停顿。

内容:

注:用括号{}括住START_SIL和END_SIL表示其可不存在或者重复多次(允许在单词之前或之后长时间的停顿,或者根本没有停顿)。括号[]括住$WORD表示零个或一次出现(如果没有单词,可能只是识别停顿)。

(2)dict.txt

创建的目录:def

说明:系统要知道HMM模型与语法变量BRIGHTNESS、CHANNEL、COLOR、START_SIL和END_SIL的对应关系。这种信息存储在文本文件中,命名为任务字典。

内容:

7.2网络

建立任务网络:

生成的文件:net.slf

命令:Hparse-A-D-T1def/gram.txtdef/net.slf

运行结果:

8识别

8.1准备测试数据

需要准备的文件:

(1)hmmlist.txt

创建的目录:test/

说明:列出了要使用的模型的名字(brightness,channel,color,silb,sile),每个一行,最后要加一个空行。

内容:

(2)targetlist_test.txt

创建的目录:test/

内容:

命令:

Hcopy-A-D-Ctest/analysis.conf-Stest/targetlist_test.txt

8.2识别

基本方法:

需要创建的文件:

(1)result文件夹

(2)reco.mlf

创建的目录:result/

初始内容:

#!MLF!#

(3)hmmsdef.mmf

创建的目录:test

命令等同于:-Hmodel/hmm3/hmm_brightness-Hmodel/hmm3/hmm_channel-Hmodel/hmm3/hmm_color-Hmodel/hmm_silb-Hmodel/hmm3/hmm_sile

内容:hmm3中的所有文件的内容一起粘贴。

注意:只保留一个"~O"

命令:

Hvite-A-D-T1-Htest/hmmsdef.mmf-iresult/reco.mlf-wdef/net.slfdef/dict.txttest/hmmlist.txtdata/test/mfcc/brightness/brightness1.mfcc

结果会在reco.mlf中显示:

交互方式:

需要创建的文件:

directin.conf

创建的目录:test

说明:是Hvite的配置文件,允许使用直接音频输入,为了允许从输入信号中直接提取声学系数,这个文件必须包含前面训练数据使用的声学分析配置参数。

内容:

指令:

Hvite-A-D-T1-Ctest/directin.conf-g-Htest/hmmsedf.mmf-wdef/net.mlfdef/dict.txttest/hmmlist.txt

9性能测试

9.1主标签文件

在性能评测之前,我们需要创建两个文件,命名为主标签文件,扩展名是.mlf:

·第一个文件包含整个训练集的正确副本,即是通过手工标注的副本。把ref.mlf记作参考副本。

·第二个文件包含整个测试集的识别副本,即识别器产生的假设副本。把reco.mlf记为识别副本。

通过比较每项数据的参考副本和识别假设,进行性能评测。

内容:

ref.mlf

需要创建的文件:testlist.txt

说明:测试路径

内容:

命令:

Hvite-A-D-T1-Stest/testlist.txt-Htest/hmmsdef.mmf-iresult/reco.mlf-wdef/net.slfdef/dict.txttest/hmmlist.txt

运行之后会看到:

reco.mlf中:

9.2错误率

需要创建的文件:

labellist.txt

说明:出现在副本文件中的标签列表

创建的目录:result

内容:

results.txt

创建的目录:result

说明:存放错误率结果

命令:

HResults-A-D-T1-e???sil -

Iresult/ref.mlfresult/labellist.txtresult/reco.mlf>result/results.txt

最后显示结果为:

注:由于选取的数据集很小只有9个词,非常有限,所以识别率是100%。

第一行(SENT)给出句子的识别率(%Correct=100.00),第二行(WORD)给出的是单词的识别率(%Corr=100.00)。上图中,这两个比率是相同的,这是因为我们的任务语法仅使用一个单词(除了停顿之外)作为句子。这是孤立词识别任务。这里只要考虑第一行(SENT)就够了。H=9给出的是测试数据被正确识别的数量,S=0,表示识别相反的数量。N=0表示测试数据总数。

10总结

经过了几天的学习和测试,终于完成了基于HTK工具包进行孤立词识别的工作,掌握了孤立词识别的基本使用方法,具体的细节参数使用在日后的工作中还需要再斟酌。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。