首页 语音识别技术原理及应用

语音识别技术原理及应用

举报
开通vip

语音识别技术原理及应用语音识别技术原理及应用 第 1 页 语音AgentNet 的整体实现 张宇伟 第 2 页 摘要: 本文论述了一个人机对话应用的实现(我命名它为 AgentNet)。其应用实例为 一种新的整合了语音技术的智能代理网络服务。 服务器端开发使用了 微软 SQL SERVER 7.0技术,客户端使用了微软 Agent ,微软Specch SDK5语音合成,和语音识别技术。网络连接使用了 SOCKET 技术,并论述了高层网络协议的实现。 [关键词] 人机对话,MS-AGENT,语音合成,语音识别,网络...

语音识别技术原理及应用
语音识别技术原理及应用 第 1 页 语音AgentNet 的整体实现 张宇伟 第 2 页 摘要: 本文论述了一个人机对话应用的实现(我命名它为 AgentNet)。其应用实例为 一种新的整合了语音技术的智能代理网络服务。 服务器端开发使用了 微软 SQL SERVER 7.0技术,客户端使用了微软 Agent ,微软Specch SDK5语音合成,和语音识别技术。网络连接使用了 SOCKET 技术,并论述了高层网络 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 的实现。 [关键词] 人机对话,MS-AGENT,语音合成,语音识别,网络编程 [Abstract] This paper discuss a new actualization of man-machine conversation application, which is based on a modal of network service. And I name this service with the name of AgentNet. The development of this service used Microsoft SQL SERVER 7.0. And the client used the technology of Microsoft Agent, TTS (Text To Speech),SR(Speech Recognition).Also the client and the server connect with SOCKET. On the SOCKET, the paper discuss the development of High-Level net protocol. [Key Words] Man-Machine Conversation, MS-AGENT, TTS , SR ,Net Work Programming 第 3 页 [目 录] 第一章 概述 ..................................................................................................... 5 1.1当前人机对话模型分析 ...................................................................... 5 1.2 当前网络应用分析 ............................................................................. 5 1.3 AgentNet 概念 ................................................................................. 6 第二章 语音合成及语音识别技术 .................................................................. 6 2.1 语音技术概述 ..................................................................................... 6 2.2 微软语音技术 ..................................................................................... 7 第三章 Agent 技术介绍 .................................................................................. 8 3.1 Microsoft Agent技术介绍 ................................................................ 8 3.2 Microsoft Agent技术应用原理 ........................................................ 9 第四章 开发系统介绍..................................................................................... 11 4(1 Microsoft Development Studio 6.0 ................................................... 11 3(2 Microsoft SQL SERVER 2000 .........................................................13 第五章 系统实现 ............................................................................................14 5.1 需求分析 ...........................................................................................14 5.2 模块分析 ...........................................................................................14 5.2.1 [客户端模块] ...........................................................................14 5.2.2 [服务器端模块] .......................................................................17 5.3 具体实现细节 ....................................................................................18 5.3.1 [客户端界面层] .......................................................................18 5.3.2 [客户端核心层] .......................................................................24 5.3.3 [客户端功能层] .......................................................................25 5.3.4 [客户端网络层] .......................................................................29 5.3.5 [服务器端网络层]....................................................................31 5.3.6 [服务器端核心层]....................................................................33 第 4 页 5.3.7 [服务器端功能层]....................................................................33 5.3.8 [服务器端数据层]....................................................................34 第六章 使用手册 ............................................................................................36 [操作系统要求] ........................................................................................36 [硬件要求] ...............................................................................................36 [服务器端安装] ........................................................................................36 [客户端支撑软件的安装] ........................................................................36 第七章 总结与展望 ........................................................................................37 参考文献 ..........................................................................................................38 第 5 页 第一章 概述 1.1当前人机对话模型分析 [当前研究] 人机界面正成为计算机行业的研究重点。现在的研究成果主要集中在“让电脑听懂说话”方面,IBM首先推出了语音识别技术,微软、摩托罗拉等公司也都展开了大量研究。成熟的语音平台软件包有微软的 Speech SDK 、IBM的ViaVoice,等等。 目前全球人机界面研究的重点,正从研究计算机如何运行转向研究人的行为,主要包括的领域有:语音上网、多模式对话管理、语音和视觉相结合、现有芯片结合改造等。在英特尔中国研究中心,电脑已可进行语音天气、股票查询,你只要说出股票名称,它就会告诉你现在的股价;而一位研究人员在写文章时,一边用手写板写,一边说:“填加四行 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 格”“删除两行”,而不必像过去那样自己动手画表、不停地按删除键。 “未来,人们在与电脑交流时,可能根本见不到电脑”, 出任英特尔人机界面总框架师的颜永红博士说,无论你是坐在沙发上还是躺在床上,只要手头有一个类似话筒、手写板或者遥控器之类的小玩意,就可以和电脑无线连接指挥它工作。 本文以下章节讨论了微软语音软件的应用。 1.2 当前网络应用分析 Internet自60年代出现以来蓬勃发展,近年来以惊人的速度增长——连网主机量每年翻一番,万维网站点每半年翻一番.同时伴随多媒体技术的飞速发展,Internet上多媒体应用层出不穷,多媒体信息的数量与日俱增.Internet已逐步由单一的数据传送网向数据、语音、图像等多媒体信息的综合传输网演化. 第 6 页 1.3 AgentNet 概念 正当计算机应用,尤其是网络应用不断增加的时候,计算机用户被许多操作所迷惑。对此,我们提出AgentNet 的概念。AgentNet 它是一种新的人机界面的尝试。 通过它,用户可以用语音告诉AgentNet帮你工作。比如:你说一句”喂,老头,有没有邮件呀,”(老头,是AgentNet 的客户精灵的名字,你当然可以任意设置它的名字),AgentNet 就会帮你收邮件。又比如你说:“有没有什么新闻呀,”,它就会为你通报你感兴趣的新闻,等等许多智能的功能。 要实现我们的目标,我们在智能代理(Agent)技术上,整合了语音合成和语音识别技术。同时实现了一套自己开发的网络协议,为以后增加新的智能服务提高了方便。 实现的困难在于:要把现成的许多较新的概念模型实现(如智能代理的实现等),并整合以往的各种成熟的技术(如网络模型的实现、语音技术的运用等等)。 后继章节将讨论其具体问题。 第二章 语音合成及语音识别技术 2.1 语音技术概述 语音识别技术是信息领域的标志技术,这项被科学家称为“比登月还难”的研究,在计算机飞速发展的带动下,有了重大的突破。语音识别技术日臻成熟,目前正处于向产品化迈进的转折阶段。语音识别作为人机对话的手段,在计算机日益增长的今天,愈发显得出其在IT产业中的重要地位。 [人机对话 梦想成真] 人机对话,让电脑听懂人的语言是二十世纪人类的理想之一。对于绝大多数人而言,电脑输入绝不是一件令人愉快的事情,人们心中希望计算机是个“能听会说”的工作伙伴,而不是今天这般又聋又哑毫无生气的复杂机器。直接对计算机发号施令,解放出我们的双手,在任何状态(不只限于坐在那里敲键盘)下与 第 7 页 计算机进行互动交谈式的操作是数字化生存时代的效率体现和人性化工作方式的完满结合。Microsoft公司的总裁比尔?盖茨认为:下一代的操作系统以及应用程度的用户界面将摒弃键盘和鼠标,代之以真正意义的人机对话。 从另一方面看,微电子技术发展到今天,摩尔定理仍惊人的准确,计算机和电子通信设备日益微型化。在小型化(minianturization)的趋势下,袖珍型的掌上电脑已有了“实验室产品”不久将出现在你我的手中,由此不难看到,计算机将会微缩成腕上的手表般大小。显而易见,如若仍采用键盘输入是不可能的,还有其它类似控制仪器或通讯设备的键盘,也将在微型化的潮流之中成为众矢之的遭到淘汰。由此,语音输入便成为唯一的最佳选择。人们将完全抛弃键盘,对着手表大小的腕上计算机或电话,轻声说出想要计算机完成的工作或是说出要拨打的电话号码。“一切尽在数言中。” [有限的词汇 无限的应用] 语言是人类交流的第一手段。而语言本身也正随着社会的发展而不断地更新变异,人们终其一生都在自觉或不自觉地进行着语言的学习和更新。无疑这种变化将成为计算机语音识别的重大难点。随心所欲地同计算机交谈是人类追求机器智能化的最高境界,这种“智能听写机”构成的系统是无限词汇(无限命令集)的语音识别,其技术难度远高于“有限命令集”,就目前的研究水平,研制一些有限词汇(有限命令集)的专听写用系统是尽快将语音技术扩大应用范围、推向市场的快捷途径。 2.2 微软语音技术 [Speech 概述] 微软 Speech SDK 5.0是微软公司的语音开发软件包工具。 其工具、信息、引擎和样品帮助,与微软公司API 5.0结合起来成为一个软件包。 Speech SDK也包括微软公司的先进的语音识别引擎和微软公司的Concatenative的语音合成引擎(以前代号为的“wistler”) SAPI 5.0由2个接口:应用程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 接口(API)和设备驱动程序接口(DDI)构成。SAPI的5.0 API显著地减少了使用语音识别的应用和综合的代码。 SAPI的5.0 DDI和API 除掉了许多类似在语音合成和识别引擎的多线程, 第 8 页 在声音的装置管理和方便的应用的实现细节。 [API 事件] Speech SDK 语音合成和语音识别与应用程序的接口,是通过接收API事件完成。 例如,正文的词,或通用的短语被识别的时候成生了API 事件。 [语音合成 API] 应用程序使用接口 -- ISpVoice,使 API 完成基本语音合成。 应用程序通过具有CLSID_SpVoice 的COM CoCreateInstance方法得到ISpVoice接口得到 COM 接口指针。 应用程序能通过ISpVoice:Speak 的方法合成语音,将把要合成的语音的文本通过参数传递给 Speech SDK。 [语音识别 API] 就像 IspVoice 作为语音合成 API 一样,ISpRecoContext是给语音识别的主要的接口对象指针。通过设置 NotifySink 识别事件陷阱池,应用程序可以捕获语音识别完成事件。 第三章 Agent 技术介绍 3.1 Microsoft Agent技术介绍 Microsoft Agent最早出现在Office 95中,主要用于Office 的帮助,微软称之为“Office 助手”--是在一个小窗口内播放各种幽默的卡通动画,而且这些动画是随特定的操作不同而改变,这就给使用电脑的人增添了许多乐趣。不过这种方式在现在看来是很“简陋”的,不直观也不形象生动。 第 9 页 1997年微软推出Agent 1.5版,从界面上彻底脱离了窗口的限制,而变得非常形象生动,而且其核心采用了基于COM的ActiveX控件方式,这就意味着Agent可以在Visual C++、Visual Basic、Html以及所有支持ActiveX的开发语言很方便的进行二次开发。同时其它领域的相关技术也很好的应用到Agent中来,如语音合成、语音识别等技术(这里需要特别提出的是有关中文语音合成和识别至尽尚未应用于Agent,不能不说是一种遗憾)。这样Agent就转变为新一代会说能听的智能界面,其深远意义显而易见。 伴随着新世纪的到来,微软发布的Office2000中彻底的应用了Agent的技术(应该说基于Agent 2.0,听说英文版的Office 2000可支持语音提示和语音命令识别),而且微软的新一代操作系统Windows2000完全内置了Agent的组件系统,可见微软对Agent抱有极大的兴趣的。 总之Agent是一个非常有发展前途的技术,目前国外已有不少基于Agent的软件,如TalkMail等,国内也有部分英语学习软件使用了Agent的技术。但是由于Agent的语音模块只使用到了 Speech Sdk 4.0 ,语音模块不支持中文,语音识别率低。所以,本设计没有使用Agent 自带的语音技术,而采用最新的语音 Speech Sdk 5.0 的底层调用,支持简体中文,合成和识别。而对于 Agent 界面模块使用到了动画技术,作为人机交流的界面。 3.2 Microsoft Agent技术应用原理 对Agent编程的方法主要有使用VB,VC等语言进行ActiveX调用,除此之外还有直接通过VC进行COM编程调用。在VB中调用Agent是最简单不过了,但由于VB程序本身存在诸多缺陷,很难在实际中应用。 而在VC中,由于Agent内部完全采用了UNICODE编码,同时还要处理各种繁杂的COM接口,存在一定的难度,但效率较高。 [原理介绍] 应用程序和Agent Server的连接是通过COM调用来实现的。 将一个Agent控制加载相应的动画和语音码我们称之为“角色”,一般使用COM调用创建一个Agent角色, 第 10 页 第 11 页 第四章 开发系统介绍 4(1 Microsoft Development Studio 6.0 本软件的开发使用了 微软的Microsoft Development Studio 6.0中的一员 VC++ 6.0。现大概介绍一下VC++编程的特点。 Visual C++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。 [理解VC工程] Visual C++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。 在VC中,应用程序是以Project的形式存在的,Project文件以.dsp扩展名,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。 [MFC编程特点] 近几年来,面向对象技术无论是在理论还是实践上都在飞速地发展。面向对象技术中最重要的就是“对象”的概念,它把现实世界中的气球、自行车等客观实体抽象成程序中的“对象”。这种“对象”具有一定的属性和方法,这里的属性指对象本身的各种特性参数。如气球的体积,自行车的长度等,而方法是指对象本身所能执行的功能,如气球能飞,自行车能滚动等。一个具体的对象可以有许多的属性和方法,面向对象技术的重要特点就是对象的封装性,对于外界而言,并不需要知道对象有哪些属性,也不需要知道对象本身的方法是如何实现的,而只需要调用对象所提供的方法来完成特定的功能。从这里我们可以看出,当把面向对象技术应用到程序设计中时,程序员只是在编写对象方法时才需要关心对象本身的细节问题,大部分的时间是放在对对象的方法的调用上,组织这些对象进行协同工作。 MFC的英文全称是Microsoft Fundation Classes,即微软的基本类库,MFC 第 12 页 的本质就是一个包含了许多微软公司已经定义好的对象的类库,我们知道,虽然我们要编写的程序在功能上是千差万别的,但从本质上来讲,都可以化归为用户界面的设计,对文件的操作,多媒体的使用,数据库的访问等等一些最主要的方面。这一点正是微软提供MFC类库最重要的原因,在这个类库中包含了一百多个程序开发过程中最常用到的对象。在进行程序设计的时候,如果类库中的某个对象能完成所需要的功能,这时我们只要简单地调用已有对象的方法就可以了。我们还可以利用面向对象技术中很重要的“继承”方法从类库中的已有对象派生出我们自己的对象,这时派生出来的对象除了具有类库中的对象的特性和功能之外,还可以由我们自己根据需要加上所需的特性和方法,产生一个更专门的,功能更为强大的对象。当然,你也可以在程序中创建全新的对象,并根据需要不断完善对象的功能。 正是由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需要关心对象方法的实现细节,同时类库中的各种对象的强大功能足以完成我们程序中的绝大部分所需功能,这使得应用程序中程序员所需要编写的代码大为减少,有力地保证了程序的良好的可调试性。 最后要指出的是MFC类库在提供的对象的各种属性和方法都是经过谨慎的编写和严格的测试,可靠性很高,这就保证了使用MFC类库不会影响程序的可靠性和正确性。 [程序结构剖析] 下面为一个表示程序中的主要类之间的关系的图表: 第 13 页 这个图表表示了使用MFC方式的应用程序的四个主要类之间的关系,从中可以看出,CMYAPP类主要的作用是用来处理消息的,它统一管理程序收到的所有的消息,然后把消息分配到相应的对象。CMAINFRAME是CMYVIEW的父类,也就是说视窗VIEW显示在主框窗MAINFRAME的客户区中。类CMYVIEW的作用是显示数据,而数据的来源是类CMYDOC,在MFC程序中,程序的数据是放在文档当中的,而显示数据则是利用视窗方式,文档与视窗分离带来的好处就是一个文档可以同时具有多个视窗,每个视窗只显示文档中的一部分数据,或者以特定的风格显示文档中的数据。文档与视窗分离的另一个好处就是在程序中可以处理多个文档,通过对不同的视窗的处理达到对不同的文档分别处理的目的。 使用过传统的WINDOWS编程方法的人都知道,在应用程序中有一个重要的函数WINMAIN(),这个函数是应用程序的基础,用户的操作所产生的消息正是经过这个函数的处理派送到对应的对象中进行处理。而在MFC方式的WINDOWS应用程序中,用来处理消息的是系统自动生成的MFC中的类CWINAPP的派生类CMYAPP。 3(2 Microsoft SQL SERVER 2000 使用SQL Server 2000的最新增强功能开发数据库解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。建立在SQL Server 7.0可扩展基础上的SQL Server 2000代表着下一代Microsoft .NET Enterprise Servers(企业服务器)数据库的发展趋势。SQL Server 2000是为创建可伸缩电子商务、在线商务和数据仓储解决方案而设计的真正意义上的关系型数据库管理与分析系统。 [SQL Server 2000的新特性] 安全的应用程序管理。更高的可伸缩性和可靠性。数据仓库解决方案的可伸缩性。最大的正常运行时间和可靠性。集成的和可扩展的分析服务。简单的管理和调整。增强和简化的事务处理,SQL(T,SQL)开发和调试。灵活的和可扩展的数据转换。 第 14 页 第五章 系统实现 5.1 需求分析 本设计的目标是利用语音技术和动画技术作为与用户交流的主要人机界面。用户通过语音识别控制程序运行,程序通过语音合成通知现在运行状况。而作为被控制的对象是一个网络服务模型。 用户登陆上AgentNet服务器上以后,可以要求读新闻,与同时登陆到AgentNet的其他客户通讯等等。 在客户端用户可用语音控制去完成接收电子邮件等日常工作。 [总体软硬件结构示意图] 5.2 模块分析 5.2.1 [客户端模块] 目标:用户登陆AgentNet后,出现 Agent 动画界面,所有的功能可通过语音控制,也可通过传统界面控制。功能包括:登陆、系统设置、人机聊天、读文本、邮件、看AgentNet新闻、通讯(可与同时登陆到AgentNet 的客户通讯)等。 第 15 页 [客户端模块图] [客户端模块分析] 共分3层 界面层分析: 层 模块名 模块输入 模块输出 模块输出备注 对像 界面层 语音识别用户通过命令号 核心处理命令号由 (SR) 话筒的普通话层 srgrammar.xml 语言 的xml文件定 义,核心层的接 收命令并执行。 语音合成 核心层的合成后通用户声卡默认以简 第 16 页 (TTS) 字符串 过声卡以声音所连音响 体中文合成语 流输出(sound 音。 stream) Agent 界核心层的 Agent 动用户界面 面 Agent 动作命画动作 令 传统 界面 按钮、菜单 Windows窗核心处理响应传统 口等 层 的菜单、鼠标事 件,显示窗口 核心层分析 层 模块名 模块输入 模块输出 模块输出备注 对像 核心层 核心处理 界面层的到界面层界面层功此模块处理 语音命令号,的需要语音合能层 核心调度。所有的 菜单、鼠标等成字符串、其他模块都受到 事件,功能层Agent 动作命它的控制。 动作成后的事令、Windows窗 件 口界面元素。功 能层的各功能 调度 功能层 层 模块名 模块输入 模块输出 模块输出 备注 对像 功能层 用户认证 用户名,密是否认证结果由核账号信息 码 通过 心层处理 由核心层从传 统界面获得 设置 服务器ip为核心层核心层 信息由核 第 17 页 地址、邮件账号提供必要的信心层从传统界 信息等 息 面获得, 并写到注 册表 邮件 收邮件 新邮件信结果由核语音识别 息 心层处理输出收邮件, 到界面层 语音合成 读邮件。 通讯 网络层的要显示的结果由核与网络层 其他客户登陆信息,及要合成心层处理输出交互信息, 消息、其他客户的语音信息字到界面层 信息显示 发来的讯息 符串 到界面层 新闻 网络层的要合成的结果由核与网络层 新闻信息 新闻信息字符心层处理输出交互信息, 串 到界面层 信息显示 到界面层 人机聊天核心层传要合成的结果由核有限的命 命令 来的语音识别语音信息字符心层处理输出令反映。 聊天命令 串 到界面层 5.2.2 [服务器端模块] 目标:每个客户端必须先登陆到AgentNet服务器,才能继续使用,这里需 要账号认证。每个服务器端的事件,都要被纪录,这里需要事件管理。服务器端 提供一个新闻服务。当客户端要求看最新的新闻时,发新闻给客户端。这里要有 新闻管理,用于添加、删除、修改新闻。 客户端发过来的网络讯息,以及服务器端发给客户端的讯息,都由网络层实 现。 所有具体功能的实现在功能层。 第 18 页 核心层处理各层的调度。 每个管理模块的数据,都记录在 SQL SERVER 上。这在数据层上实现。 由于本设计主要目标体现在整个结构的架设。到现在为止,实现的是基本的服务。但以后可以很方便的在其基本结构上增加新服务功能。 相对于客户端,服务器端模块结构不具体展开。详细信息可到具体实现小节察看。 5.3 具体实现细节 5.3.1 [客户端界面层] [语音识别(SR)模块] 第 19 页 SR 中 定义的成员变量有: CComPtr m_cpEngine; //SR engine 接口 CComPtr m_cpRecoCtxt; //recognize context 接口 CComPtr m_cpCmdGrammar; //grammar 接口 成员函数: InitSR(); 初始化 ProcessRecoEvent(); 事件响应函数 ExecuteSRCommand(); 执行语音命令 ReleaseSR(); 释放接口 InitSR() 函数中初始化了 COM 接口、SR engine 接口、recognize context 接口、grammar 接口,这些都是COM 接口指针。其中m_cpEngine 为主 SR Engine 接口,程序使用它作为与其他模块的连接。 m_cpRecoCtxt 为 recongnize 事件上下文,通过它,当识别事件发生的时候,可以获得具体识别出来的文字或命令号。m_cpCmdGrammar 为命令接口。由于本设计的语音识别只涉及到有限命令词汇,所以在这里定义了命令接口。对于一些其它需要口述板的应用可以定义口述接口,以识别无限命令集既自然语言识别。当然定义有限命令可以大大提高识别率。 m_cpCmdGrammar 命令接口的初始化是通过载入一个名为 srgrammar.cfg 语法规则文件而完成。这个文件由一个名为 srgrammar.xml 的XML 文件通过专用的语法产生程序产生。在srgrammar.xml 内具体定义了需要识别的中文命令。如:

你好

在这里定义了一些用户自定义事件 #define WM_RECOEVENT WM_USER+100 并在 MESSAGE_MAP 内定义处理函数 //语音识别事件消息处理 第 20 页 ON_MESSAGE(WM_RECOEVENT,ProcessRecoEvent) 当识别结束时,程序主线程接收到此WM_RECOEVENT 消息,运行 处理函数ProcessRecoEvent()。 此函数在确定是语音识别事件成生后,运行ExecuteSRCommand() 函数。 ExecuteSRCommand()分辨哪个命令被识别,并执行响应命令处理函数。 当初始化成功完成后,用户说‘你好’这个单词后:程序流程如下: [语法规则与语法树] 语法规则是SAPI 5.0 的一个重要的元素。它限制了在语音识别处理中,可能的被识别的字或句子成分。 短语或句用每个语法规则成分来决定识别通路。 例如,核查在描述旅行 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 的句子:“我想开车从北京到上海。”请注意这里有决定结果的信息元素存在。 就这个例子来说,有个人在计划从北京开车到上海。 这个非常简单的例子说明了一个可能非常复杂的问题。 不限制方法、方向和旅行目的地,产生的旅行计划将是任选的无限数。 作为结果产生的有效信息能通过加以限制的方法选择决定。 第 21 页 下为这个例子的具体分析: 第 22 页 第 23 页 [语音合成(TTS)模块] 语音合成模块相对简单。 它定义的变量有: //tts 语音合成接口 ISpVoice *m_cpTTSVoice; 成员函数: InitTTS(); 初始化 AgentSpeak(Cstring strSpeak); 合成 ReleaseTTS(); 释放接口 先使用 InitTTS() 初始化,它初始化了COM 接口,并设置了合成的男声 的语速,默认把它设为,,,语速快一点,相对觉得自然一点。 然后核心层关心的就是 AgentSpeak(CString strSpeak) 这个函数了。 核心层把欲合成的字符串作为参数提交给AgentSpeak,即合成了语音。 [Agent 界面模块, 第 24 页 Agent 界面是人机对话的图形接口。这里主要目的是让 Agent 随着核心层的命令调用,显示各种动画。譬如,合成语音时,在动画人物上弹出 气球(Balloon),上面显示了合成的字符串。 主要成员变量有: //agent 指针 IAgentEx* m_pAgentEx; IAgentCharacterEx* m_pCharacterEx; AgentNotifySink* m_pSink; long m_lCharID; long m_lRequestID; m_pAgentEx 是主接口指针,m_pCharacterEx 是具体的 Agent 动画人物指针。m_pSink 是消息陷阱池指针,用于捕获用户在Agent 动画上点击鼠标右健,用于动态弹出菜单。 主要成员函数: InitAgent() 初始化 AgentSpeak(CString strSpeak) 语言合成并弹出气球(这里集成了语音合成) AgentPlay(CString strAnimation) 表演动画 AgentStop() 停止任何表演 ReleaseAgent() 释放接口 5.3.2 [客户端核心层] 核心层是整个程序的主线程。 它处理各种数据,完成其他各层的初始化、调用。处理了传统界面的处理(包括整个windows窗口)。 由于这里主要涉及到繁琐的源代码,篇幅有限,具体请看代码。 第 25 页 5.3.3 [客户端功能层] [用户认证模块] 程序弹出一个登陆对话框,要求输入用户名和密码。 这些信息传到网络层,网络层向服务器发出登陆请求,若认证通过,继续主线程。 由于篇幅有限,具体请看代码。 [设置模块] 在登陆对话框上有设置按钮,这里设置服务器ip地址、邮件账号信息等. 所有的信息写到注册表,以后可再读出来。 如: 写服务器ip地址 pApp->WriteProfileString(strServerSection,"ServerIpAddress",ServerPage.m_strServ erIpAddress); 读服务器ip地址 m_stuSetup.strServerIpAddress = pApp->GetProfileString(strServerSection,"ServerIpAddress"); 由于篇幅有限,具体请看代码。 第 26 页 [邮件模块] 这里用到了两个类 CPop3 类用于邮件处理,CMailMessage 用于邮件内容解码。 在初始化后, 用CPop3::SetServerProperties( LPCTSTR sServerHostName, UINT nPort)设定邮件服务器参数。 用CPop3::SetUserProperties( LPCTSTR sUsername, LPCTSTR sPassword )设定用户账号参数。 这些参数是从设置模块读过来的。 然后CPop3::Connect(), CPop3::GetNumMessage() 获得当前邮箱的邮件数。 CPop3::GetMessage( UINT nMsg, CMailMessage* msg) 获得邮件内容放到msg 里。 CPop3::Disconnect() 断开连接。 第 27 页 通过CMailMessage::EncodeBody() 可解码邮件内容。 邮件的具体内容在解码后放在成员变量中。 [重点—--多线程] 由于在处理收邮件功能时,若程序使单线程的,网络延时必定使主线程阻塞。所以当核心模块调用邮件模块必须开一个新线层。 [多线层编程细节] 在Windows的一个进程内,包含一个或多个线程。线程是指进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等等。一个进程内的所有线程使用同一个32位地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完任务后再执行。在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样就可使处理器的任务平衡,也提高了系统的运行效率。 Visual C++ 5.0提供了Windows应用程序的集成开发环境Developer Studio。在这个环境里,用户既可以编写C风格的32位Win32应用程序,也可以利用MFC类库编写C++风格的应用程序,二者各有其优点:基于Win32的应用程序执行代码小巧,运行效率高,但要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源;而基于MFC类库的应用程序可以快速建立起应用程序,类库为程序员提供了大量的封装类,而且Developer Studio为程序员提供了一些工具来管理用户源程序,其缺点是类库代码很庞大,应用程序的执行代码离不开这些代码。由于使用类库所带来的快速、简捷和功能强大等优越性,因此,除非有特殊的需要,否则Visual C++提倡使用MFC类库进行应用程序开发。 [收邮件线程的具体实现] 主线程和收邮件线程间通过消息互相通讯。 定义如下消息: //邮件模块消息定义 #define WM_MAIL_ACCOUNT_NOT_SET WM_USER+200 #define WM_MAIL_CANNOT_LOGIN WM_USER+201 #define WM_MAIL_PROCESS WM_USER+202 第 28 页 #define WM_MAIL_NO_NEW_MAIL WM_USER+203 #define WM_MAIL_PROCESS_DONE WM_USER+204 消息的具体含义可在消息名上看出,不再赘述。具体请参看源代码。 定义消息响应函数如下: //邮件账号没设定事件消息处理 ON_MESSAGE(WM_MAIL_ACCOUNT_NOT_SET,ProcessMailAccountNotSet) //邮件账号没设定事件消息处理 ON_MESSAGE(WM_MAIL_CANNOT_LOGIN,ProcessMailCannotLogin) //有邮件要处理事件消息处理 ON_MESSAGE(WM_MAIL_PROCESS,ProcessReadMail) //没有新邮件要处理事件消息处理 ON_MESSAGE(WM_MAIL_NO_NEW_MAIL,ProcessNoMail) //邮件处理完成事件消息处理 ON_MESSAGE(WM_MAIL_PROCESS_DONE,ProcessMailDone) 当核心层调用收邮件模块时,开新线程如下; AfxBeginThread(GetMailThread,&m_stuThreadInfo,THREAD_PRIORITY_NO RMAL); UINT GetMailThread(LPVOID pParam) 是一个全局函数。其参数中是一个定义 的,线程必须用到的信息结构。 当GetMailThread 执行完,发消息到主线程,主线程处理响应动作。 由于篇幅有限,具体请看代码。 [通讯模块] 发送一般消息到好友。 这个函数把讯息送到网络层。 在选定对方好友后,提出一个对话框,输入讯息。 ProcessSendGeneralMsg(CString strToUserName, CString strText) StrToUserName 为好友名, 第 29 页 StrText 为发送的消息字符串。 对方网络层收到消息,调用 //处理好友信息 ProcessReceiveGeneralMsg(msg.m_strUser,msg.m_strText); 其中参数 msg 为网络层消息类。 这里与网络层的内容紧密相关,请参看网络层内容。 [新闻模块] 这里是网络 C/S 结构的具体体现。 本设计到现在只实现了一个服务器端的具体服务,即新闻服务。但结构已架 设好,扩展方便。 ProcessReadNews();向网络层发出读邮件命令。 网络层收到,服务器端的新闻后,调用 ProcessRequestReadNews(CString strNews) 再提升到界面层。 这里与网络层的内容紧密相关,请参看网络层内容。 [人机聊天模块] 此模块现在非常不成熟,由于时间紧迫,能力有限。现在只是简单的预定义 的有限命令回答。目标是有一定的人工智能,有一定的推理机制,一定的自学习 机制。要以后进一步完成。 5.3.4 [客户端网络层] 网络层是具体的网络通讯的具体实现,它负责与服务器的通讯。 使用到了 SOCKET 类来具体实现。 这里,定义了一个继承了 CSocket 的CToServerSocket类。 第 30 页 InitSocket(); 初始化了网络连接,其中的对方服务器 ip 地址等信息,由 设置模块获得。 SendMsg(CMsg *pMsg) 发送消息,参数为 一个 CMsg 对像。 ReceiveMsg()接受消息,并进行响应处理,上升到核心层处理。 CMsg 是定义网络消息的类,服务器端有一个同样定义的类。 处理具体消息 其成员变量有: CString m_strText; //通信字符串 CString m_strCommand; //命令字符串 CString m_strUser; //用户名字符串 CString m_strToUser; //目的用户 CString m_strPassword; //用户字符串 [网络通讯高层协议] 为了处理不同消息,定义了高层的通讯协议: CMsg::m_strCommand 字符串装载了这个协议。 第 31 页 由于篇幅有限,具体请看代码。 5.3.5 [服务器端网络层] 服务器端的网络层用了 socket 同客户端的网络层连接。 不过服务器端比客户端多一个类,这里建了一个继承 CSocket 的类:ClisteningSocket。这个类的实例将绑定服务器端的 ip 地址,和固定端口号:5040。ClisteningSocket 用于监听客户端的连接。 若发现有客户端的连接,产生一个CClientSocket 类的实例。 CClientSocket 类是继承了 CSocket 的类,处理对客户端的网络信息。 现联系客户端网络层,实现的基本算法如下: 服务器方(SERVER) 客户方(CLIENT) 1、构造一个套接字 1、构造一个套接字 CSocket ser_s1; CSocket cli_s; 2、创建该套接字 2、创建该套接字 ser_s1.Create (port) ; cli_s.Create ( ) ; 其中,port为服务器方 第 32 页 打开的通信通道号 3、开始监听来自客户机的连接 3、客户机方套接字cli_s向服务器方 ser_s1.Listen( ); 套接字ser_s1发出连接请求 cli_s .Connect (Addr,port); (其中,Addr是欲连接服务器方 套接字地址结构指针,可采用IP地 址或机器名。port即打开的通道号, 其值与服务器方的一致。) 4、构造一个新的套接字 Csocket ser_s2 ; 5、服务器等待从ser_s2上 接受客户连接请求 ser_s1.Accept (ser_s2) ; 6、构造一个类CSocketFile的对象 4、构造一个类CSocketFile的对象 CSocketFile file(&ser_s2) ; CSocketFile file(&cli_s) ; 7、构造类CArchive的对象arIn、arOut 5、构造类CArchive的对象arIn、arOut, ,以用于数据的收和发。 以用于数据的收和发。 CArchive arIn(&file , CArchive ::load) ; CArchive arIn(&file , CArchive ::load) ; CArchive arOut(&file , CArchive arOut(&file , CArchive ::store) ; CArchive ::store) ; 8、使用arIn和 arOut 进行收或发数据 6、使用arIn和 arOut 进行发或收数据 arIn >> value ; arOut << value ; arOut << value ; arIn >> value ; 其中,value是所传输的数据 9、摧毁所创建的CSocket、 7、摧毁所创建的CSocket、 CSocketFile 、CArchive 等类的对象 CSocketFile 、CArchive 等类的对象 第 33 页 5.3.6 [服务器端核心层] 它处理各种数据,完成其他各层的初始化、调用。完成传统界面的处理(包 括windows窗口)。 界面上出现的 windows 元素有,一个树控件,一个 List 控件。 由于这里主要涉及到一些繁琐的源代码,篇幅有限,具体请看代码。 5.3.7 [服务器端功能层] [事件管理模块] 事件管理的所有数据来自数据层。 主有以下几个函数: AddEvent(CString strType, CString strEvent); 添加一个事件 ShowEvent(); 显示所有事件 ClearEvent(); 清空所有事件 所有的动作由核心层接收的菜单命令激发。 当进行添加、删除、更新命令时,会弹出相应对话框,与管理员交流。 [账号管理模块] 所有数据来自数据层。 主有以下函数 OnMenuAddNewAccount(); OnMenuitemAccountDelete(); OnMenuitemAccountUpdate(); [新闻管理模块] 所有数据来自数据层。 有以下函数 OnMenuitemAddNewNews(); 第 34 页 OnMenuitemNewsDelete(); OnMenuitemNewsUpdate(); 所有的动作由核心层接收的菜单命令激发。 当进行添加、删除、更新命令时,会弹出相应对话框,与管理员交流。 [客户通信模块] 核心层从网络层传来的所有有关客户通讯的数据,在这里处理。 有以下函数:(已简化) ProcessLogin(); ProcessLogout(); ProcessSendGeneralMessage(); ProcessSendNews(); ProcessListOnlineBuddy(); 具体含义可在函数名上看出,不再赘述。具体请参看源代码。 5.3.8 [服务器端数据层] 其他层的所有的数据来自数据层。 数据层的所有数据以及处理方法都保存在 SQL SERVER上。 C++ 端有以下几个函数: InitConnectSqlServer(); 用于连接 数据库 ExecuteStoredProc(_bstr_t storedProc) 用于执行数据库的存储过程 第 35 页 [SQL SERVER 开发] 数据库设计包括:概念模型设计、关系模型设计和物理模型设计。概念模型又称为ER模型,抽象地表示对象间的联系,及对象所拥有的属性。关系模型直接表示对象间的关系(1:1、1:n、n:m),及关系所拥有的属性。物理模型,关系表的物理存储形式。 [表结构] [存储过程] 列基本存储过程如下: TestIsUser 用户认证 AddNewAccount,DeleteAccount,UpdateAccount,ShowAccount 用户管理 AddEvent,ShowEvent,ClearEvent 事件管理 AddXw,ShowXw,DeleteXw,UpdateXw 新闻管理 由于篇幅有限,以及本设计的数据库端开发相对简单,具体从略。 第 36 页 第六章 使用手册 [操作系统要求] 本软件在 WIN2000 Advanced server 上开发,客户端和服务器端在 WIN2000 上调试通过。但由于所用 API 函数,在其他 windows 操作系统上通 用。在 WIN98,WIN NT 上也运行。 [硬件要求] 本软件开发时所用硬件为,赛扬600 ,128M 内存,6.4 G 。 由于本软件所用支撑软件较多,对运行环境要求较高。基本配置:CPU:300, 内存:128M。 同时,本软件需要网络支持,应用 TCP/IP 协议。 服务器端需要静态 IP 地址。 [服务器端安装] 服务器的操作系统必须为 Winnt4.0 Server ,或 Win2000 server。 必须安装 Microsoft SQL SERVER 7.0 或以上版本。 初始化如下: 在 SQL SERVER 上新建一个 名为 AgentNet 的数据库。 使用 SQL Query Analyzer 打开 名为 AgentNet.sql 的文件。 运行,导入表结构,和存储过程。 [客户端支撑软件的安装] Microsoft Agent 安装:必须安装核心、中文支持等。 Microsoft Speech Sdk 5.0:安装完后,最好训练一下,可以提高识别率。 [客户端设置] 客户端不需安装,直接把软件拷到硬盘即可。 主要必须设置,服务器端的 IP 地址,用户的电子邮件账号。 第 37 页 第七章 总结与展望 由于时间有限,能力有限。本设计只是基本达到了初期开题目标。 在完成了基本功能后,有待进一步的完善。 总结开发历程,本设计涉及、使用到的技术有:Microsoft Agent 技术,Microsoft Speech SDK 5.0 语音技术,网络开发技术,数据库开发技术,以及许多系统开发的高级技术,如消息处理,多线程等等。 在开发的初始阶段,由于定义了多层开发的设计理念,对工作的进行有很大的帮助。 由于本设计的重点在于运用语音技术,以及动画技术,改善人机界面。网络服务的使用只是一个运用的实例。下一步的重点,可放在人机对话模块。由于本人人工智能方面只是有限,需要提高理论水平,现在只能做到简单命令的反应。以后可有更大的进步。 谢谢~ 第 38 页 参考文献 [01] 《Microsoft Agent Technology》 Microsoft [02] Microsoft Speech SDK online help [03] 《WINDOWS网络编程技术》作者:京京工作室 译者:Anthony Jones和Jim Ohlund 出版:机械工业出版社 [04] 《MICROSOFT VISUAL C++ 6.0技术内幕》 原名:Programming Visual C++ 作者:David J.Kruglinski 译者:希望图书创作室 出版:北京希望电子出版社 [05] 《数据结构与算法 面向对象C++设计模式 》 电子工业出版社 [06] 《深入理解COM+》清华大学出版社,翻译者潘爱民 [07] 《软件工程 实践者的研究方法》 机械工业出版社 [08] 《SQL SERVER 7.0编程技术内幕》(美)John Papa, Matthew Shepker等著 前导工作室 译 机械工业出版社 [09] 《XML实用技术》 (美)Charles F.Goldfarb ,Paul Prescod 著 张 利,王显著 译 清华大学出版社 [10] www.vckabse.com vc知识库网站。 [11] www.vchelp.net vc help 网站
本文档为【语音识别技术原理及应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_977556
暂无简介~
格式:doc
大小:343KB
软件:Word
页数:39
分类:互联网
上传时间:2017-09-26
浏览量:89