使用HTK搭建英文大词汇量连续语音识别系统(一)
在整个语音识别系统的搭建中,参考了博客https://blog.csdn.net/qq_43150721/article/details/98646889,自己动手搭建时,遇到了博客中没提到的问题,故记录下。
一、准备工作
- TIMIT语音库
本文使用TIMIT语音库对系统进行训练和测试,这里分享TIMIT语音库如下:
链接:https://pan.baidu.com/s/1Im5wSu-njmI9ci7CtIzGew
提取码:3inh
下载后,将压缩包中TIMIT文件夹解压,我在电脑D盘新建文件夹D:\HTK\dataset_TIMIT并解压至此。 - 设置环境变量,连接VCVARS32
每次打开cmd,一定要设置环境变量,执行以下两步:
path=%path%;D:\Microsoft Visual Studio\VS2019pro\VC\Auxiliary\Build
然后输入VCVARS32。
path=%path%;D:\HTK\htk\bin.win32
如果嫌每次设置环境变量麻烦,也可以一次性解决,操作如下:
进入控制面板->系统,点击高级系统设置:
点击“环境变量"->在系统变量中选中”Path“,点击编辑,新建bin.win32和VS路径:
至此环境变量设置完成,打开cmd,输入HInit检验一下,如图:
3. 在D:\HTK中创建新文件夹data1,用于存放使用HTK的各种工具生成的我们所需要的文件。
二、建立发音字典,生成dict1、monophones1、dlog文件
1.用python对timit语音库中所有的.txt文本的路径及内容进行抓取,建立训练数据集抄本文件trainprompts
用python创建抄本文件trainprompts,代码如下:
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"D:\HTK\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("D:\HTK\dataset_TIMIT\make_trainprompts.txt",'a')a1.write(a[0]+txt.upper()+'\n')a1.close()
执行后会在D:\HTK\dataset_TIMIT\中生成make_trainprompts.txt,去掉后缀修改名称即得到trainprompts文件。此文件内容为timit/train文件下所有wav的地址(注意最后文件名不带任何后缀)和文字内容,部分内容如下:
D:\HTK\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SA1 SHE HAD YOUR DARK SUIT IN GREASY WASH WATER ALL YEAR
D:\HTK\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SA2 DON’T ASK ME TO CARRY AN OILY RAG LIKE THAT
D:\HTK\dataset_TIMIT\TIMIT\TRAIN\DR1\FCJF0\SI1027 EVEN THEN IF SHE TOOK ONE STEP FORWARD HE COULD CATCH HER
2.使用HTK自带脚本prompts2wlist,将上述抄本文件trainprompts转换为wlist文件,从句子中得到排序好的单词列表
在data文件夹中新建scripts文件夹,在HTK samples文件中搜索prompts2wlist,把这个文件拷贝到data1/scripts文件中,将trainprompts文件移至data1文件夹下,依次执行如下命令:
D:
cd HTK/data
perl scripts/prompts2wlist trainprompts wlist
格式为perl+prompts2wlist工具地址+trainprompts地址+生成的wlist文件的地址。
这样在data1文件夹下生成wlist文件,部分内容如下:
'EM
–
A
ABBREVIATE
ABIDES
ABILITY
ABLE
3.处理TIMIT自带的发音字典TIMITDIC.TXT
TIMIT语音库自带的发音字典是TIMIT/DOC中的TIMITDIC.TXT,使用如下代码进行处理,得到TIMITDIC1.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("D:\HTK\dataset_TIMIT\TIMIT\DOC\TIMITDIC.TXT", "D:\HTK\dataset_TIMIT\TIMIT\DOC\TIMITDIC_1.txt")
将TIMITDIC1.TXT中前面的说明删去,得到:
再将前面4个单词的空格和换行去掉,如图:
继续用代码将前面的单词转换为大写,执行:
import re
def clean_en_text(text):# keep Englishcomp = re.compile('[^A-Z^a-z^\-^\'^\n^\~ ]')return comp.sub('', text)a1=open("D:\HTK\dataset_TIMIT\TIMIT\DOC\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("D:\HTK\dataset_TIMIT\TIMIT\DOC\TIMITDIC_2.txt",'a')a2.write(d)a2.close()
得到TIMITDIC_2.txt文件,如图:(!注意,此代码不要运行第二遍,否则得到的TIMITDIC_2.txt文件内容顺序会出错)
!注意格式:大写单词+一个空格+小写发音+结尾为sp\n,从单词A开始按字母顺序排列
将TIMITDIC_2.txt文件名称去掉后缀改为timit,并放在data1文件夹下。
用记事本分别打开wlist和timit文件,在含有“’”符号的单词前添加‘\’符号,即:
wlist中:\'EM
timit中:\'EM ax m sp
接下来对timit文件进行处理,执行以下步骤:
- 将位于“\‘EM”单词前面的所有单词按照字母顺序插入到相应位置
例如:将
BOURGEOISIE b uh r zh w aa z iy sp
插入到:
BOURGEOIS b uh r zh w aa sp和BOWL b ow l sp中
形成:
BOURGEOIS b uh r zh w aa sp
BOURGEOISIE b uh r zh w aa z iy sp
BOWL b ow l 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
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
4.调用htk生成音素文件monophones0,日志文件dlog,发音字典文件dict1
在data1文件中新建dict文件夹存放语音字典,之后在cmd中执行以下命令:
D:\HTK\data1>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
使用prompts2mlf将trainprompts文件转换成标注文件trainwords.mlf
在HTK samples文件中搜索prompts2mlf,把这个文件拷贝到data1/scripts文件中,新建data1/labels文件夹,执行如下命令:
D:\HTK\data1>perl scripts/prompts2mlf labels/trainwords.mlf trainprompts
在labels中生成trainwords.mlf,部分内容如下:
用记事本打开该文件,在所有“'EM”前加上符号“\”,即修改为“\'EM”
四、音素级标音,生成标注文件:phones0.mlf
在scripts文件夹中创建mkphones0.txt,内容为:
EX
IS sil sil
DE sp
!注意,这个文件最后一定要有一行换行,将后缀改为.led,生成mkphones0.led文件。
执行以下命令:
D:\HTK\data1>HLEd -l * -d dict/dict1 -i labels/phones0.mlf scripts/mkphones0.led labels/trainwords.mlf
在labels文件夹中得到音素级标音文件phones0.mlf,部分内容如下:
#!MLF!#
“*/SA1.lab”
sil
sh
iy
hh
ae
d
y
uh
第一部分完。
使用HTK搭建英文大词汇量连续语音识别系统(一)相关推荐
- 使用HTK搭建英文大词汇量连续语音识别系统(三)
接下来采用三音素模型进行改进. 一.绑定三音素 首先,制作一个脚本文件mktri.led,放在data/scripts文件夹中,内容为: WB sp WB sil TC 最后有一行换行 执行命令: H ...
- 使用HTK搭建英文大词汇量连续语音识别系统(二)
六.提取特征参数,生成.mfc文件 在data/configs文件中编写配置文件wav_config,内容: SOURCEFORMAT=NIST TARGETKIND=MFCC_0_D_A TARGE ...
- HTK搭建大词汇量连续语音识别系统(一)
使用HTK搭建大词汇量语音识别系统,这里使用的是timit语音库. 本人python小白,只学了两三天,代码写的有点菜..希望多多包涵 一.建立抄本文件trainprompts 所使用的python版 ...
- 一种连续语音识别系统的制作方法
本发明涉及一种连续语音识别系统,属于语音识别设备领域. 背景技术: 近五十年的时间里,自动语音识别一直是一个活跃的研究领域,它一直被认为是促进人类与机器,人类与人类通信的一个重要的桥梁.近些年,语音识 ...
- 高并发的大数据量查询导致系统频繁死机
我们的大数据量查询是数据库分页的, 但是导出和打印功能是基于全部数据的. 系统投入使用后,对于导出和打印功能的使用远远要高于我们的预期. 而我们的系统的硬件设备是有限的 不能再升级了. 抓取内存大对象 ...
- 制作在线单词测试的软件,Test Your Vocabulary:号称是最准的英语词汇量测试网站...
网站介绍 今天给大家介绍一个号称是最准的英语词汇量测试网站Test Your Vocabulary . Test your vocabulary 是一个美裔巴西联盟组织开发的在线英语词汇量自我测评系统 ...
- 小学英语词汇量测试软件好,Test Your Vocabulary:号称是最准的英语词汇量测试网站...
网站介绍 今天给大家介绍一个号称是最准的英语词汇量测试网站Test Your Vocabulary . Test your vocabulary 是一个美裔巴西联盟组织开发的在线英语词汇量自我测评系统 ...
- 【愚公系列】华为云系列之ModelArts搭建中文语音识别系统
文章目录 前言 1.ModelArts是什么 一.语音识别技术概述 1.语音识别概述 2.语音识别的一般原理 3.信号处理与特征提取方法 3.1 MFCC 4.基于深度学习的声学模型DNN-HMM 二 ...
- 语音识别维特比解码_HMM连续语音识别中Viterbi算法的优化及应用
HMM 连续语音识别中 Viterbi 算法的优化及应用 袁俊 [期刊名称] <电子技术> [年 ( 卷 ), 期] 2001(028)002 [摘要] 基于 HMM 连续语音识别系统声学 ...
最新文章
- python编程的条件语句_Python 条件语句
- 当Grid的数据源是View时,如何使用PeopleSoft自带的Save Function?
- 跨设备链路聚合_路由与交换技术(华为设备)第五讲---链路聚合
- 基于Java+SpringBoot+vue+element等动物救助平台设计和实现
- 标贝科技语音论文入选全球顶级语音学术大会INTERSPEECH2019
- LNMP环境部署----之Mysql安装部署
- oracle column的设置,SQL*PLUS的命令行——column命令 - [ORACLE]
- Sql Server临时表获取链接数据库查询结果
- 第三周阶段性小结——Object对象、String类、StringBuffer、StringBuilder、System、Runtime、Date...
- Style transfer系列论文之——Arbitrary Style Transfer in Real-time with Adaptive Instance Normali,ICCV, 2017
- python之数据处理篇
- 转载 centos CPU温度检测
- css 标点符号换行,字母汉字可以换行 标点符号不能换行_html/css_WEB-ITnose
- 树莓派用iPad做显示器
- QQ音乐 vs 网易云音乐,用户体验哪家强?
- 抖音直播带货复盘数据怎么分析?3个小技巧快速掌握直播复盘
- POI Excel行高设置
- Python-小数取整与小数四舍五入
- java随机生成姓名、电话、邮箱、时间
- python验证码识别库_Python验证码识别
热门文章
- 微信dat文件用什么软件打开方式_dat文件用什么软件打开?
- xilinx fpga xdma
- 数据可视化--饼状图
- 物料-零部件分类属性
- hbck源码系列(四)--表的完整性检查和修复Check
- python开源协议gpl_[转载]五种开源协议(GPL,LGPL,BSD,MIT,Apache)
- phpmyadmin SQL注入 (CVE-2020-5504) 复现
- 元学习与小样本学习 | (2) Few-shot Learning 综述
- MySQL安全性:防止攻击和保护数据
- 一些小小的吐槽 叽叽歪歪