使用HTK搭建大词汇量语音识别系统,这里使用的是timit语音库。
本人python小白,只学了两三天,代码写的有点菜。。希望多多包涵

一、建立抄本文件trainprompts

所使用的python版本是3.6
trainprompts文件内容为timit/train文件下所有wav的地址(注意最后文件名不带任何后缀)和文字内容,部分内容如下:

E:\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SA1 SHE HAD YOUR DARK SUIT IN GREASY WASH WATER ALL YEAR
E:\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SA2 DON’T ASK ME TO CARRY AN OILY RAG LIKE THAT
E:\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SI1027 EVEN THEN IF SHE TOOK ONE STEP FORWARD HE COULD CATCH HER
E:\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SI1657 OR BORROW SOME MONEY FROM SOMEONE AND GO HOME BY BUS

代码如下:

import os
import re# make English text clean
def clean_en_text(text):# keep English '-' ''' and spacecomp = re.compile('[^A-Z^a-z^\-^\' ]')return comp.sub('', text)for root,dirs,files in os.walk(r"E:\dataset_TIMIT\TIMIT\TRAIN"):for file in files:if file.endswith('.TXT'):root_txt=os.path.join(root,file)     #文本路径 a=root_txt.split('.',1)abs_path = os.path.join(root,file)with open(abs_path) as f:txt=clean_en_text(f.read())    #文本内容#print(root_txt+txt.upper())a1=open("E:\dataset_TIMIT\mask_trainprompts.txt",'a')a1.write(a[0]+txt.upper()+'\n')a1.close()

得到mask_trainprompts.txt,再将文件名改为不带后缀的trainprompts即可。

二、用perl工具trainprompts转换为wlist文件

perl好像要另外安装,这里默认已经安装好相关工具。
重点提示一下,如果你在建立过程中将cmd关闭了,那么打开cmd以后一定要首先执行如下两步:

path=%path%;D:\Visual Studio 2019\Professional\VC\Auxiliary\Build

然后输入VCVARS32。

path=%path%;D:\HTK\htk\bin.win32

之后输入HInit检验一下。整个过程如下所示:

之后,建议新建一个文件夹data,这个文件夹将用于存放使用HTK的各种工具生成的我们所需要的文件。
在HTK samples文件中搜索prompts2wlist,把这个文件拷贝到data/scripts文件中,然后将trainprompts文件放入data文件,执行如下命令:

perl scripts/prompts2wlist trainprompts wlist

格式为perl+prompts2wlist工具地址+trainprompts地址+生成的wlist文件的地址。
这样就得到了wlist文件,部分内容如下:

'EM

A
ABBREVIATE
ABIDES
ABILITY
ABLE
ABLY
ABOLISH
ABORIGINE
ABORIGINES

三、处理TIMIT自带的发音字典

TIMIT语音库自带的发音字典是TIMIT/DOC中的TIMITDIC.TXT。
复制一份,然后将文件中前面的说明删去,使用以下代码进行处理:

def delblankline(infile, outfile):infopen = open(infile, 'r',encoding="utf-8")outfopen = open(outfile, 'w',encoding="utf-8")db = infopen.read()outfopen.write(db.replace(';','\n'))infopen.close()outfopen.close()delblankline("TIMITDIC.TXT", "TIMITDIC_1.txt")

获得中间文件TIMITDIC_1.txt文件,打开之后发现是这样的:

把前面四个单词前的空格和换行去掉,继续用代码处理:

import re
def clean_en_text(text):# keep Englishcomp = re.compile('[^A-Z^a-z^\-^\'^\n^\~ ]')return comp.sub('', text)a1=open("E:\dataset_TIMIT\TIMITDIC_1.txt",'r+')
b=[]
txt1=a1.readlines()
a1.close()
for lines in txt1:a=linesb=a.split(' ',1)c=b[0].upper()+' '+b[1].replace('\n',' ')+'sp\n'd=clean_en_text(c)a2=open("E:\dataset_TIMIT\TIMITDIC_2.txt",'a')a2.write(d)a2.close()

得到如下的TIMITDIC_2.txt文件,如图:

!!!!注意格式:大写单词+一个空格+小写发音+结尾为sp\n
将TIMITDIC_2.txt文件名称改为timit,并放在data文件。
再用记事本分别打开wlist和timit文件,在含有“’”符号的单词前添加’\'符号,即:

wlist中:\'EM
timit中:\'EM ax m sp

然后对timit文件进行处理,执行以下步骤:

  • 将位于“\‘EM”单词前面的所有单词按照字母顺序插入到相应位置
  • 搜索“~”符号,将多音词的词性连同“~”符号一起删去,再放到相应的正确位置
    示例:
    原文本为:

LIVED l ih v d sp
LIVELY l ay v l iy sp
LIVES l ih v z sp
LIVESTOCK l ay v s t aa k sp
LIVE~ADJ l ay v sp
LIVE~V l ih v sp

修改为:

LIVE l ay v sp
LIVE l ih v sp
LIVED l ih v d sp
LIVELY l ay v l iy sp
LIVES l ih v z sp
LIVESTOCK l ay v s t aa k sp

在data文件中新建dict文件夹,之后在cmd中执行以下命令:

HDMan -m -w wlist -n monophones0 -l dlog dict/dict1 timit

得到音素文件monophones0,日志文件dlog和发音字典文件dict1
用记事本打开音素文件monophones0,增添一个新的音素sil
部分内容如下:

ax
m
sp
b

zh
em
sil

共47个音素
dlog为生成字典dict1时,wlist中单词生成发音字典的产生的消息记录。
dict1就是wlist的发音字典,包含于timit中,格式与timit一致,如下:
这里我自己增添了一行“-- sp”:

四、字级别标音, 生成文件trainwords.mlf

使用HTK自带脚本prompts2mlf将trainprompts文件转换成标注文件trainwords.mlf
在HTK samples文件中搜索prompts2mlf,把这个文件拷贝到data/scripts文件中,执行如下命令:

perl scripts/prompts2mlf labels/trainwords.mlf trainprompts

trainwords.mlf文件部分内容如下:

#!MLF!#
“E:\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SA1.lab”
SHE
HAD
YOUR
DARK
SUIT
IN
GREASY
WASH
WATER
ALL
YEAR
.

再用记事本打开该文件,在所有“'EM”前加上符号“\”,即修改为“\'EM”
这步很重要,不然下面第五步可能会报错以下信息:

ERROR [+1232] NumParts: Cannot find word EM
DOWN
ON
THE
FARM
.
“E:dataset_TIMITTIMITTRAINDR2MKAJ0SI2044.lab”
WET
ALSO
WERE
THE
MARINE in dictionary
FATAL ERROR - Terminating program HLEd

五、音素级标音,生成文件:phones0.mlf

先编辑需要使用到的脚本文件mkphones0.led,内容如下:

EX
IS sil sil
DE sp

!!!!注意,这个文件最后一定要有一行换行
然后把它放在scripts文件中。
执行以下命令:

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

得到音素级标音文件phones0.mlf,其格式如下:

#!MLF!#
“*/SA1.lab”
sil
sh
iy
hh
ae
d
y
uh
r
d
aa
r
k
s
uw
t
ih
n

第一个教程结束。

HTK搭建大词汇量连续语音识别系统(一)相关推荐

  1. 使用HTK搭建英文大词汇量连续语音识别系统(一)

    在整个语音识别系统的搭建中,参考了博客https://blog.csdn.net/qq_43150721/article/details/98646889,自己动手搭建时,遇到了博客中没提到的问题,故 ...

  2. 使用HTK搭建英文大词汇量连续语音识别系统(三)

    接下来采用三音素模型进行改进. 一.绑定三音素 首先,制作一个脚本文件mktri.led,放在data/scripts文件夹中,内容为: WB sp WB sil TC 最后有一行换行 执行命令: H ...

  3. 使用HTK搭建英文大词汇量连续语音识别系统(二)

    六.提取特征参数,生成.mfc文件 在data/configs文件中编写配置文件wav_config,内容: SOURCEFORMAT=NIST TARGETKIND=MFCC_0_D_A TARGE ...

  4. 一种连续语音识别系统的制作方法

    本发明涉及一种连续语音识别系统,属于语音识别设备领域. 背景技术: 近五十年的时间里,自动语音识别一直是一个活跃的研究领域,它一直被认为是促进人类与机器,人类与人类通信的一个重要的桥梁.近些年,语音识 ...

  5. 高并发的大数据量查询导致系统频繁死机

    我们的大数据量查询是数据库分页的, 但是导出和打印功能是基于全部数据的. 系统投入使用后,对于导出和打印功能的使用远远要高于我们的预期. 而我们的系统的硬件设备是有限的 不能再升级了. 抓取内存大对象 ...

  6. 从0到1搭建大数据平台之调度系统

    目前大数据平台经常会用来跑一些批任务,跑批处理当然就离不开定时任务.比如定时抽取业务数据库的数据,定时跑hive/spark任务,定时推送日报.月报指标数据.任务调度系统已经俨然成为了大数据处理平台不 ...

  7. 语音识别系统及科大讯飞最新实践

    http://geek.csdn.net/news/detail/96948 语音作为最自然便捷的交流方式,一直是人机通信和交互最重要的研究领域之一.自动语音识别(Automatic Speech R ...

  8. 干货:科大讯飞最新语音识别系统和框架深度剖析

    雷锋网按:本文作者魏思,博士,科大讯飞研究院副院长,主要研究领域为语音信号处理.模式识别.人工智能等,并拥有多项业界领先的科研成果.张仕良,潘嘉,张致江科大讯飞研究院研究员.刘聪,王智国科大讯飞研究院 ...

  9. 语音识别系统_智能语音识别系统_第三方语音识别系统 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 腾讯云语音识别服务开放实时语音识别.一句话识别和录音文件识别三种服务形式,满足不同 ...

最新文章

  1. 用 Python 制作子弹图也这么简单,爱了~
  2. 第五十八期:AI艺术日渐繁荣,未来何去何从?
  3. redis高级命令2
  4. SAP License:MR22借贷物料一步设置可以把差异带走
  5. jdbc显示mysql的数据_JDBC链接mysql插入数据后显示问号的原因及解决办法
  6. 架构师的职责都有哪些?
  7. wifi连指定ssid和password
  8. 图书销售系统系统设计说明书
  9. BI分析工具深度测评:FineBI vs Tableau
  10. 零知开发板和红外人体感应模块使用
  11. 学习KNN(一) 图像分类与KNN原理
  12. CSDN自动回复灌水乐园帖子-httpClient篇
  13. PP相关的 bapi
  14. 联想私有云盘成功中标布丁酒店浙江股份有限公司云盘项目
  15. MongoDB-curd总结
  16. 安装程序配置服务器失败。参考服务器错误日志和C:\WINDOWS\sqlstp.log
  17. 用74HC165读8个按键状态
  18. 中文数字与阿拉伯数字的转换
  19. 考研二战日记-第40天——计算机网络:无线网络和移动网络
  20. 领扣LintCode问题答案-57. 三数之和

热门文章

  1. ABOV单片机内部看门狗WDT的代码实现讲解及示例代码-[MC96F6332D]
  2. TDSQL-C 真·秒级启停:连接断了,又没断
  3. 2k如何联网找不到服务器,NBA2K18无连接服务器怎么办 简单三步解决无法连接服务器问题...
  4. 新浪博客发表博文不同步到新浪微博
  5. 起点中文网小说文本分类项目【简易上手的nlp实战项目】
  6. java里remark是什么意思_remark是什么意思_remark在线翻译_英语_读音_用法_例句_海词词典...
  7. MySQL 算数表达式
  8. Unity材质球和静态物体导致的内存泄漏
  9. SpringAOP所需jar包(cglib、aopalliance、aspectj.weaver)
  10. 千锋教育实训day02————java