基于HTK的连续语音识别系统搭建学习笔记(一)

article/2025/10/7 3:52:48

放假之前,就已经对HTK上完成连续语音识别的实验充满兴趣。于是找了很多资料,准备在放假的时候好好学习,仔细琢磨,HTK博大精深,光学习和完成孤立词识别肯定是不够。从今天开始,开始同步学习和记录基于HTK的连续语音识别系统搭建工作,这一学习笔记主要记录学习过程,具体自己的实践后面会继续,本次学习的参考资料主要以:苏统华的《应用HTK搭建语音拨号系统》为主,同时,使用HTK BOOK作为参考进行相关知识点的查阅。


言归正传:


该系统能够识别连续说出的数字串和若干组姓名。建模是针对子词(sub-word, eg. 音素),具有一定的可扩充性。当加入一个新名字时,只需修改发音字典和任务语法即可。模型为连续混合高斯输出,运用语音决策树聚类形成的绑定状态式三音素。


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

生成文件: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

创建位置:根目录

创建内容:


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







http://chatgpt.dhexx.cn/article/QgFTqFSo.shtml

相关文章

HTK在windows下的配置说明

本文档意在详细介绍在windows环境下如何配置编译HTK,是根据网上资料及自己实际操作步骤编写而成,一方面是为方便以后使用此工具的朋友们有个参考,另外一方面是给自己加深印象。 准备事项 安装Microsoft Visual Studio开发环境(以下简称VS),因为HTK代码需要通过VS来编译。…

HTK工具搭建识别器的总体框架

老早之前就学习了HTK工具,并用于搭建连续语音识别器,但是好久没有用对于一些东西又忘记了,现在由于做实验需要用到HTK,又重新看了一遍,所以把一些大致的东西记录下来,以后可以直接看这个。感觉用HTK搭建识别…

HTB-OpenKeyS

HTB-OpenKeyS 信息收集80端口立足于JenniferJennifer -> root 信息收集 80端口 对其进行简单的SQL注入测试和NoSQL注入测试后进行目录扫描。 auth.swp文件内容如下: 代码不是很完整,只能大致了解意思(请原谅我脑子抽了没注意是个swp交换…

HTK工具的安装

首先下载HMM 的开发包HTK,现在的版本是3.4.1.可以从CMU的官网进行下载。 http://htk.eng.cam.ac.uk/,下载后解压HTK工具包,我解压后的目录为:D:\htk\ 确保的环境变量Path包含路径:C:\Program Files\Microsoft Visual S…

HTK的使用方法

一,HTK目录结构 htk是一个开源的软件,解压之后的目录如下: [rootlocalhost htk]# ls AUTHORS config.status env HTK HTKTools Makefile.in ChangeLog config.sub FAQ HTKBook install-sh README co…

语音识别之HTK入门(一)HTK的下载配置

语音识别之HTK入门(一)HTK的下载配置 Linux环境配置VMware Tools安装必备环境 HTK下载HTK环境设置 跪拜大佬帖子: https://www.cnblogs.com/ansersion/p/4155828.html 基本按照大佬的帖子进行调试的,为表示敬意,全程跪…

HTK学习笔记(一)

HTK学习笔记(一) 一、HTK软件体系结构 HTK的软件体系结构 HTKTool各部分的功能: 所有的语音输入和输出都是通过HWAVE或HPARM HAudio:用于从音频设备输入波形 HWave:用于从文件中读取波形 HSLab:波形显示工具,可以用于采集语音…

基于htk工具包的语音识别

htk简介: HTK是一个构建隐藏马尔可夫模型(HMMs)的工具包。HMMs可以用于任何时间序列的建模建模,HTK的核心就是类似的通用目的。然而,HTK主要设计用于构建基于HMM的语音处理工具,特别是识别程序。因此,大部分HTK中的基础设施支持专门用于此任…

jQuery学习手册(15)

逐个设置 $(div).css(width, 100px)​ $(div).css(height, 100px)​ $(div).css(background, black)链式设置 注意:如果大于3步,建议分开 $(div).css(width, 100px).css(height, 100px).css(background, black)批量设置 $(div).css({ ​ …

第7章页面布局-ConstrainedBox限定宽高

防采集标记:亢少军老师的课程和资料 import package:flutter/material.dart; class LayoutDemo extends StatelessWidget {overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text(ConstrainedBox限定宽高示例),),b…

全网最详细的一篇Flutter 尺寸限制类容器总结

Flutter中尺寸限制类容器组件包括ConstrainedBox、UnconstrainedBox、SizedBox、AspectRatio、FractionallySizedBox、LimitedBox、Container。这些组件可以约束子组件的尺寸,下面一一介绍。 ConstrainedBox ConstrainedBox组件约束子组件的最大宽高和最小宽高&am…

android中各种height和width总结

1. getMeasuredWidth()和getWidth() 以这两个为例,高度与其相同。这两个是在自定义View中最常见到的,通过字面意思可以看出,前者是测量的宽度,后者是控件的实际宽度,下面看下官方文档对他们的描述: //Ret…

JavaFX布局(一)

说道GUI编程一定要谈到布局,JavaFX内置了大量的布局控件提供给我们使用。其实,JavaFX的布局控件和界面元素控件都是继承自javafx.scene.layout.Region类。我们这里只看布局控件类。布局控件我们在界面上一般是看不到的,它一个容器用于放置其它…

Android 桌面小组件 AppWidgetProvider

废话 桌面小组件,绝对是小程序中的小程序,说白了就是任何复杂一丁点的操作都不适合做成桌面小组件。 所以这里采用的演示的例子,就只有一个白色圆角背景,外加一个文本框,显示文字。 小组件的教程网上一搜一大堆&…

Android 约束布局 ConstrainLayout min max width

写一个自定义view package com.anguomob.guidelineimport android.content.Context import android.graphics.Canvas import android.graphics.Color import android.util.AttributeSet import android.view.Viewclass ZeroView constructor(context: Context?, attrs: Attri…

ConstrainLayout 基础教程2,近期想跳槽的程序员必看

特性详解 Visibility behavior (可见性的表现) ConstraintLayout对可见性被标记View.GONE的控件(后称“GONE控件”)有特殊的处理。一般情况下,GONG控件是不可见的,且不再是布局的一部分,但是在布局计算上,ConstraintLayout与传统布局有一个很重要的区别: 传统布局下,…

UGUI源码解析——LayoutElement

一:前言 继承了ILayoutElement和ILayoutIgnorer接口,作为布局元素组件 挂载了Layout Element组件的对象,布局并不会生效,它是受到实现了布局组的控制(HorizontalLayoutGroup、VerticalLayoutGroup、GridLayoutGroup) 二&#xff…

Layui框架的使用技巧

1.选中html代码块&#xff0c;ctrlshift减号- 就会全部折叠 2.加入Thymeleaf模板需要添加命名空间 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org/"></html> 2.1 替换方法 2.2添加 th:fragment 2.3主页面用一行代码替换 3.SpringBo…

UGUI源码解析——LayoutUtility

一&#xff1a;前言 布局的工具类&#xff0c;可以获取到对象的minWidth、preferredWidth、flexibleWidth、minHeight、preferredHeight、layoutPriority的属性值 二&#xff1a;源码解析 ——获取对象属性值的方法 以上方法可以获取到对象的minWidth、preferredWidth、flexi…

Flutter布局指南之深入理解BoxConstraints

点击上方蓝字关注我&#xff0c;知识会给你力量 强烈建议先看下这篇文章——Flutter你竟是这样的布局 不管你是Android开发&#xff0c;还是Flutter开发&#xff0c;当你开始使用Flutter茫茫多的Widget时&#xff0c;可能会猜测Widget在屏幕上的尺寸和位置&#xff0c;但事实上…