首页 > Windows开发 > 详细

WinHTK开发与使用一:软件设计

时间:2014-02-16 05:02:40      阅读:661      评论:0      收藏:0      [点我收藏+]

   WinHTK开发与使用一:软件设计

        接触语音识别的同行都会了解HTK,HTK工具包的功能很强大;但是对于习惯界面操作的很多人而言,它有一些先天不足。当然对于一开始就习惯类Unix等命令行界面开发者而言,这些都不是问题,所以本系列文章只针对习惯了可见即可及操作系统的,对于语音识别技术感兴趣的初学者。导致HTK不方便使用的原因主要以下几点:

(1) 不方便安装,随便上网上一搜,涉及HTK的基本都是问如何安装,包括本人也是琢磨了很长一段时间(本人一开始也只是对在Windows开发,故此出现类似问题);

(2) 使用麻烦,windows下可以在Cygwin软件环境下使用HTK的方法,好像看似方便了,因为可以利用windows下的工具进行一些数据处理和文本编辑,但又出现新问题,其中最主要的是,必须学会Perl脚本语言的编程,好像多学一样东西不是坏事,可问题是有些人的直接目标是语音,他们不想把过多的时间浪费在一些其它方面的学习上;

(3) 组织不方便,在unix下组织文件是一件很辛苦麻烦的事情,这也是HTK中很多关于路径搜索的处理的原因。

说白了,就一句,很多人就是一个初学者,如果连语音识别入门就很难,自然会阻碍大家对于语音识别技术的深入研究。基于以上原因,我在Windows环境下,对HTK进行再次开发,希望能够让更初入门语音识别的同行,解决最开始的障碍,后续的路还是要靠自己走的。

一、概述

    整个软件从功能上划分主要分为四部分:文件管理和文本编辑,HTK工具调用和调试,识别应用界面,语音文件录制。如图1所示。各部分设计内容和功能如下。

bubuko.com,布布扣

图1 WinHTK设计内容

(1) 文件管理和文本编辑。这部分的设计的目标是实现一个很好的文件管理系统,还有良好文本编辑环境。文件管理方式有很多种,在这里采用了最熟悉的树形文件管理方式,以项目的方式对语音识别中涉及的文件进行管理,同时实现了多种文件管理功能,比如添加删除文件夹,新建、复制、粘贴文件等等。在这里有一个重要的问题,工作路径的选择,常用方法是新建一个项目后,固定工作路径为项目所处的目录。本设计采用动态决定工作路径方式,这主要是由于HTK内在的路径处理方式所决定的,这样决定也是方便使用者选择适合自己的路径处理方式。除了文件管理,这部分的另一个功能就是,文本编辑。由于进行处理时,经常需要同时处理多个文件,因此设计了一个多文件编辑的文本编辑器。这部分设计是本软件的重点,也是难点。

(2) HTK工具调用和调试。这部分设计主要是实现HTK工具的调用。由于HTK工具多达十几个,因此要同时处理好工具的隐式调用和显示不是一件容易的事情。由于所有这些工具需要的处理是一致的,因此在本设计中对它们进行了统一管理并进行显示,将直接命令方式调用改成辅助式的命令行调用,免去了繁杂的命令行参数记忆。除了实现HTK调用,还应当能够实时观察HTK的运行结果,方便调试,以便决定下一步操作,对于这个问题,本设计也给出了很好的解答,具体在后面叙述。

(3) 识别应用界面。有时候,不仅仅需要进行理论研究,制作一些简单的识别应用也是有必要的。为此,根据HTK识别器的特点,本设计开发了一个用于实现识别应用的接口界面,既可以静态识别,即对语音文件识别,也可以动态识别,即实时录音识别。需要强调的是,这个识别界面可以显示汉语的识别结果,因此必不可少需要一个翻译文件。

(4) 语音文件录制。尽管实际中有很多录音软件,但是它们要么操作太复杂,要么就是不能胜任语音识别系统开发任务的实际需要。因此为解决这个问题,本设计附带开发用于语音文件录制的功能。该录音器的特点是,可以实现同时多个文件的录制,文件名的动态编排。录音器的难点在于波形的动态演示,本设计中对这个问题处理不太利索。

二、详细设计

1、文件管理和编辑

        开始的时候,对于Windows程序设计了解还不是很深,再就是需要考虑的问题很多,实现功能也很多。主要分为文件管理系统设计和文本编辑器的设计。

(1) 文件管理系统设计。文件管理系统设计内容包括文件的组织和管理,具体而言就是文件层次结构设计和文件夹及文件的管理。文件的组织形式有多种,常用的有列表形式,树形形式和图标形式本,列表形式简洁,但不方便管理;图表形式直观,方便管理,但是文件数目较多时,处理起来比较复杂;树形形式非常适合大量文件的组织和管理。因此本设计中采用了树形的文件组织形式,如图2所示。通过点击各个文件夹可

bubuko.com,布布扣

2  树形文件组织形式示意图

        以轻松的实现多个文件的管理,这一点非常适合语音识别设计中文件管理。需要说明一点,在本设计中根据HTK的特点将文件的最大层次设为5层,即最多允许5层文件夹管理。为了避免今后的重新修改,在设计中采用了宏变量,也就是说必要的时候,这一限制完全可以修改宏变量来解除。由于语音识别系统设计中常常涉及多种文件,显然必须给以一定得区分。在本设计中主要有两类文件需要区分,即语音文件和文本文件,它们通过不同的图标进行显示,如3所示。当然文件夹与文件也是两个不同类型,也需要区别表示。要想设计一个很好的文件管理系统,除了层次结构的设计外,还需要提供相应的文件夹或文件的操纵。在这里有一点需要说明,不同层次的文件夹能够进行的操作是不同的。如图4所示,可以看出不同层次的文件夹的操作。另外文件与文件夹

bubuko.com,布布扣

不同类型文件表示示意图

bubuko.com,布布扣

不同层次文件夹的操作

得操作也应当不同,具体如图5.8所示。如果仅仅是一个层次,要实现这些操作的功能很容易,而实际情况是存在多个层次,而恰恰是不同层次间拥有相同的却又不完全的功能。显然如果每一个层次的操作单独实现,必然导致编程的低效率,这是不希望的。因此必须合理设计不同层次间的共同操作和不同操作,这是设计的难点。

bubuko.com,布布扣

5  文件操作示意图

(2) 文本编辑器设计。文本编辑器的设计内容主要有设计一个多文本的编辑器和一些用于处理文件的编辑工具。多文本编辑器的设计主要是考虑在进行语音识别试验时需要同时编辑多个文本。显然如果每次只能编辑一个文本,意味着当要编辑新的文件,需要关闭当前文件,打开新的文件,这是一件非常烦人的事情。因此在本软件中设计了一个多文本编辑器。本设计中多文本编辑器的效果如图6 所示,图中包含四个文件。由

bubuko.com,布布扣

6 多文本编辑器效果图

API提供了标准的编辑器窗口,因此编辑器的功能设计不难,难就难在多个文件的打开和关闭。需要说明一点的是本编辑器是一个ASCII文件编辑器,仅能显示字符,不能够显示中文(因此在后面单独设计一个中文编辑工具)。除了提供一个多文本编辑窗口外,还需要添加一些辅助的功能,如列表文件生成,MLF文件生成等操作。具体包含的操作如7所示。

bubuko.com,布布扣

7 文件编辑功能示意图

2、HTK工具调用

    在这部分中设计的内容主要有HTK工具的调用接口和调试界面的设计。另外为了方便用户自己编写程序的使用,提供了一个良好的程序调用接口。

(1) HTK工具调用接口的设计。HTK中包含多个工具。这些工具都是通过命令行方式调用的,且需要的文件和设置的参数都基本相似。如果对于每一个工具单独设计调用接口,显然会导致程序量的剧增,再就是不方便设计。根据HTK工具调用特点,本设计中采用统一的框架和模式实现HTK工具的调用;另外在保留命令行调用方式的基础之上增加了辅助命令行调用方式,避免了繁杂的命令行参数的记忆,也缩短了实验所需要的时间;再就是如果需要增加工具,修改代码非常少,很容易实现。这个设计是本软件中的一个重要特点。具体效果如8和图9所示,图8显示的是HCopy 

bubuko.com,布布扣

8 HCopy工具调用界面

bubuko.com,布布扣

9 HList工具调用界面

具的调用界面,图9对应HList工具的调用界面,可以发现基本相同。有了调用HTK工具界面后,使用HTK工具非常简单。首先设置工作目录,在文件夹选项的操作中可以看到;然后设置需要的参数和文件,可以选择直接命令行方式,也可以采用辅助命令行方式;然后点击确定,再按一下执行就可以调用HTK工具。

(2) 调试界面设计。进行语音识别系统设计需要一个比较繁杂的过程,不可能不出现问题,比如路径设置错误,HTK工具出现bug或操作使用失误等等。因此必须提供一个良好的调试接口,用于观察HTK工具的操作结果,进而进行进一步的操作。HTK工具是一系列CUI程序,也就是说调用时将结果显示在控制台上,因此实际可以不需要设计调试接口,仅仅通过控制台可以观察输出结果。但是这样有一个缺点,无法方便保存调试结果,也违背本软件的设计目的,因此有必要转接到编辑器上显示。其过程大致为:首先将HTK工具输出到内存中,使用管道技术;然后将管道数据读到文本编辑器上显示。具体显示效果如10所示。 

bubuko.com,布布扣

图10 调试接口显示效果

(3) 自定义程序调用接口。由于HTK工具并不是万能的,因此有时候需要在调用HTK工具之前或者之后进行一些预处理或者后处理。比如增加一些语音增强程序或端点检测工具等等。还有就是有时候希望像HTK工具那样调用自己编写的程序,或者HTK工具名修改等等。所有这些都需要设计一个良好的程序接口。因此本设计设计了主程序接口和自定义程序接口。主程序接口主要用于设置标准HTK工具的调用界面对应关系,换句话说,修改这里的设置将导致前面HTK工具调用发生改变,软件启动时会恢复默认设置。这个功能可以用于将自定义的程序设置为标准调用,或者修改对应调用的HTK工具,主程序接口界面如11所示。自定义程序接口用于设置在标准HTK工具的调

bubuko.com,布布扣

11 主程序接口界面

用前后设置调用的程序,可以方便自定义程序的调用,也可以减少程序的多次调用,即一次实现多个程序的运行,当然这必须在合理设置文件目录情况下实现。自定义程序接口界面如图12所示。自定义程序接口有五个设置项,即意味可以同时设置五个自定义程序。下面介绍设置过程:假如现在有一个程序test.exe,希望在执行完HCopy.exe后执行,必须如下设置,选择接口一确认按钮,接口程序设置为test.exe;激活程序是标准HTK工具,属于main类,不需要改变;激活程序设置为HCopy.exe,由于在其之后执行,选择after。这样就可以实现在HCopy.exe运行后执行test.exe程序。

bubuko.com,布布扣

12 自定义程序接口界面

 

3、识别应用界面

通过前面这些设计,完全可以进行语音识别研究。但有些时候设计一个语音识别应用程序有很多重要的意义,其中进行演示就是最重要的一点。要设计一个基于HTK语音识别应用程序,既需要考虑HTK识别器的特点,也需要提供一个良好识别应用界面。本设计中的这个语音识别应用界面充分考虑了这些因素,不仅能够演示识别英语等语言,还可以实现汉语等语言识别演示。整个识别应用界面如13所示。整个界面分为六

bubuko.com,布布扣

13 识别应用程序界面

个部分:左边三个,右边三个。左上角窗口管理识别需要的文件,主要有训练好的模型,模型列表,词典,语法约束网络,参数文件等。左边第二个窗口用于管理测试语音文件,识别输入的文件如果保存会保存到该文件夹下。左边第三个窗口用于列出可以识别语句,或者其它内容。右边第一个窗口用于简要的显示波形曲线,当然这里采样不服从采样定理,仅仅示意而已。右边第二个窗口用于显示识别输出,为了让显示更明显,所以字号设置得比较大。右边第三个窗口用于显示识别结果,主要是观察识别结果是否正确,识别设置是否正确等。另外还有两个控制区域:左上角是一个按钮,用于设置识别程序的相关文件;右边是一排按钮,包括用于录音,播放语音文件的按钮,还有用于识别控制的按钮。如果要进行识别,必须按如下步骤进行操作:

(1) 添加模型文件。在左边第一个窗口内菜单下单击右键添加模型文件;

(2) 添加测试文件。在左边第二个窗口内菜单下单击右键添加测试文件;

(3) 设置识别文件。左键单击左上角按钮,弹出对话框,依次设置相应的文件和参数;

进行识别。如果想直接录音识别,单击录音按钮进行录音,结束按确定,然后按识别就进行识别,若想保存录音可以按保存键进行保存。如果想利用测试文件进行识别,左键双击测试语音文件,右边窗口会显示波形,然后按识别进行识别。在识别输出窗口可以看到识别结果。

 

4、语音文件录制

尽管实际有很多录音软件,但是它们要么太复杂,难于操作,要么不适合语音识别系统设计的需要。因此有必要设计一个适合HTK工具需要的录音器。本设计中的录音器的设就是完全是根据HTK的特点设计的,可以同时录制多个文件,然后通过动态命名的方式给所有文件编排,最后将所有文件保存到文件管理系统中设置的文件夹下,整个操作非常简单方便。录音器的界面如14所示。

使用录音器的步骤如下:

(1) 设定工作目录。工作目录对应的文件夹实际上就是用于保存录音文件的文件夹;

(2) 打开录音界面。点击录音界面按钮打开录音界面;

(3) 设定录音参数。在工具栏有一个设置按钮,按此按钮会弹出对话框,用于设置录音参数,如果设置之后需要修改录音参数,会弹出警告;

(4) 开始录音。点击录音按钮出现一个录音栏,该栏显示录音的动态波形。点击开始按钮开始录音,点击确定结束录音;

(5) 保存文件。点击保存按钮弹出保存文件对话框,设置合适的参数可以实现文件名的动态编排。如果需要删除某个文件,点击栏右上关闭按钮可以删除该文件。如果需要关闭所有的文件可以按主工具栏的关闭按钮。

bubuko.com,布布扣

14  录音器界面

第二篇介绍工具使用,并且把工具上传上来。。。

 

 

 

WinHTK开发与使用一:软件设计

原文:http://blog.csdn.net/neustar1/article/details/19245527

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!