語音識別技術原理及應用_第1頁
語音識別技術原理及應用_第2頁
語音識別技術原理及應用_第3頁
語音識別技術原理及應用_第4頁
語音識別技術原理及應用_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、語音AgentNet的整體實現(xiàn)張宇偉摘要:本文論述了一個人機對話應用的實現(xiàn)(我命名它為AgentNet)。其應用實例為 一種新的整合了語音技術的智能代理網(wǎng)絡服務。服務器端開發(fā)使用了微軟SQL SERVER 7.0技術,客戶端使用了微軟Agent,微軟Speech SDK5語音合成,和語音識別技術。網(wǎng)絡連接使用了 SOCKET技術,并論述了高層網(wǎng)絡協(xié)議的實現(xiàn)。關鍵詞人機對話,MS-AGENT,語音合成,語音識別,網(wǎng)絡編程AbstractThis paper discuss a new actualization of man-machine conversation application, w

2、hich 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

3、 SOCKET. On the SOCKET, the paper discuss the development of High-Level net protocol.Key WordsMan-Machine Conversation, MS-AGENT, TTS , SR ,Net Work Programming目錄 TOC o 1-5 h z HYPERLINK l bookmark25 o Current Document 第一章概述51.1當前人機對話模型分析5 HYPERLINK l bookmark32 o Current Document 1.2當前網(wǎng)絡應用分析5 HYPER

4、LINK l bookmark35 o Current Document 1.3 AgentNet 概念6 HYPERLINK l bookmark38 o Current Document 第二章語音合成及語音識別技術6 HYPERLINK l bookmark41 o Current Document 2.1語音技術概述62.2微軟語音技術7 HYPERLINK l bookmark57 o Current Document 第三章 Agent 技術介紹8 HYPERLINK l bookmark60 o Current Document Microsoft Agent 技術介紹8 HYP

5、ERLINK l bookmark63 o Current Document Microsoft Agent 技術應用原理9 HYPERLINK l bookmark66 o Current Document 第四章開發(fā)系統(tǒng)介紹11 HYPERLINK l bookmark69 o Current Document 4. 1 Microsoft Development Studio 6.011 HYPERLINK l bookmark81 o Current Document 3. 2 Microsoft SQL SERVER 200013 HYPERLINK l bookmark87 o C

6、urrent Document 第五章系統(tǒng)實現(xiàn)14 HYPERLINK l bookmark90 o Current Document 5.1需求分析145.2模塊分析14 HYPERLINK l bookmark93 o Current Document 客戶端模塊14 HYPERLINK l bookmark99 o Current Document 服務器端模塊175.3具體實現(xiàn)細節(jié)18 HYPERLINK l bookmark102 o Current Document 客戶端界面層18 HYPERLINK l bookmark132 o Current Document 客戶端核心層

7、24 HYPERLINK l bookmark135 o Current Document 客戶端功能層25 HYPERLINK l bookmark171 o Current Document 客戶端網(wǎng)絡層29 HYPERLINK l bookmark177 o Current Document 服務器端網(wǎng)絡層31 HYPERLINK l bookmark192 o Current Document 服務器端核心層33 HYPERLINK l bookmark195 o Current Document 服務器端功能層33 HYPERLINK l bookmark207 o Current

8、Document 服務器端數(shù)據(jù)層34 HYPERLINK l bookmark213 o Current Document 第六章使用手冊36 HYPERLINK l bookmark216 o Current Document 操作系統(tǒng)要求36 HYPERLINK l bookmark219 o Current Document 硬件要求36 HYPERLINK l bookmark222 o Current Document 服務器端安裝36 HYPERLINK l bookmark225 o Current Document 客戶端支撐軟件的安裝36 HYPERLINK l bookma

9、rk228 o Current Document 第七章總結與展望37 HYPERLINK l bookmark231 o Current Document 參考文獻38第一章概述1.1當前人機對話模型分析當前研究人機界面正成為計算機行業(yè)的研究重點?,F(xiàn)在的研究成果主要集中在“讓電 腦聽懂說話”方面,IBM首先推出了語音識別技術,微軟、摩托羅拉等公司也都 展開了大量研究。成熟的語音平臺軟件包有微軟的 Speech SDK、IBM的 ViaVoice,等等。目前全球人機界面研究的重點,正從研究計算機如何運行轉向研究人的行 為,主要包括的領域有:語音上網(wǎng)、多模式對話管理、語音和視覺相結合、現(xiàn)有 芯片

10、結合改造等。在英特爾中國研究中心,電腦已可進行語音天氣、股票查詢, 你只要說出股票名稱,它就會告訴你現(xiàn)在的股價;而一位研究人員在寫文章時, 一邊用手寫板寫,一邊說:“填加四行表格”“刪除兩行”,而不必像過去那樣自己 動手畫表、不停地按刪除鍵?!拔磥?,人們在與電腦交流時,可能根本見不到電腦”,出任英特爾人機界 面總框架師的顏永紅博士說,無論你是坐在沙發(fā)上還是躺在床上,只要手頭有一 個類似話筒、手寫板或者遙控器之類的小玩意,就可以和電腦無線連接指揮它工 作。本文以下章節(jié)討論了微軟語音軟件的應用。1.2當前網(wǎng)絡應用分析Internet自60年代出現(xiàn)以來蓬勃發(fā)展,近年來以驚人的速度增長連網(wǎng)主 機量每年

11、翻一番,萬維網(wǎng)站點每半年翻一番.同時伴隨多媒體技術的飛速發(fā)展, Internet上多媒體應用層出不窮,多媒體信息的數(shù)量與日俱增.Internet已逐步由單 一的數(shù)據(jù)傳送網(wǎng)向數(shù)據(jù)、語音、圖像等多媒體信息的綜合傳輸網(wǎng)演化.1.3 AgentNet 概念正當計算機應用,尤其是網(wǎng)絡應用不斷增加的時候,計算機用戶被許多操作 所迷惑。對此,我們提出AgentNet的概念。AgentNet它是一種新的人機界面的 嘗試。通過它,用戶可以用語音告訴AgentNet幫你工作。比如:你說一句”喂,老 頭,有沒有郵件呀? ”(老頭,是AgentNet的客戶精靈的名字,你當然可以任意設置它的名 字),AgentNet就

12、會幫你收郵件。又比如你說:“有沒有什么新聞呀?”,它就會 為你通報你感興趣的新聞,等等許多智能的功能。要實現(xiàn)我們的目標,我們在智能代理(Agent)技術上,整合了語音合成和 語音識別技術。同時實現(xiàn)了一套自己開發(fā)的網(wǎng)絡協(xié)議,為以后增加新的智能服務 提高了方便。實現(xiàn)的困難在于:要把現(xiàn)成的許多較新的概念模型實現(xiàn)(如智能代理的實現(xiàn) 等),并整合以往的各種成熟的技術(如網(wǎng)絡模型的實現(xiàn)、語音技術的運用等等)。后繼章節(jié)將討論其具體問題。第二章語音合成及語音識別技術2.1語音技術概述語音識別技術是信息領域的標志技術,這項被科學家稱為“比登月還難”的研 究,在計算機飛速發(fā)展的帶動下,有了重大的突破。語音識別技術

13、日臻成熟,目 前正處于向產品化邁進的轉折階段。語音識別作為人機對話的手段,在計算機日 益增長的今天,愈發(fā)顯得出其在IT產業(yè)中的重要地位。人機對話夢想成真人機對話,讓電腦聽懂人的語言是二十世紀人類的理想之一。對于絕大多數(shù) 人而言,電腦輸入絕不是一件令人愉快的事情,人們心中希望計算機是個“能聽 會說”的工作伙伴,而不是今天這般又聾又啞毫無生氣的復雜機器。直接對計算 機發(fā)號施令,解放出我們的雙手,在任何狀態(tài)(不只限于坐在那里敲鍵盤)下與 計算機進行互動交談式的操作是數(shù)字化生存時代的效率體現(xiàn)和人性化工作方式 的完滿結合。Microsoft公司的總裁比爾蓋茨認為:下一代的操作系統(tǒng)以及應用 程度的用戶界面

14、將摒棄鍵盤和鼠標,代之以真正意義的人機對話。從另一方面看,微電子技術發(fā)展到今天,摩爾定理仍驚人的準確,計算機和 電子通信設備日益微型化。在小型化(minianturization)的趨勢下,袖珍型的掌 上電腦已有了“實驗室產品”不久將出現(xiàn)在你我的手中,由此不難看到,計算機將 會微縮成腕上的手表般大小。顯而易見,如若仍采用鍵盤輸入是不可能的,還有 其它類似控制儀器或通訊設備的鍵盤,也將在微型化的潮流之中成為眾矢之的遭 到淘汰。由此,語音輸入便成為唯一的最佳選擇。人們將完全拋棄鍵盤,對著手 表大小的腕上計算機或電話,輕聲說出想要計算機完成的工作或是說出要撥打的 電話號碼?!耙磺斜M在數(shù)言中?!庇邢薜?/p>

15、詞匯 無限的應用語言是人類交流的第一手段。而語言本身也正隨著社會的發(fā)展而不斷地更 新變異,人們終其一生都在自覺或不自覺地進行著語言的學習和更新。無疑這種 變化將成為計算機語音識別的重大難點。隨心所欲地同計算機交談是人類追求機 器智能化的最高境界,這種“智能聽寫機”構成的系統(tǒng)是無限詞匯(無限命令集) 的語音識別,其技術難度遠高于“有限命令集”,就目前的研究水平,研制一些有 限詞匯(有限命令集)的專聽寫用系統(tǒng)是盡快將語音技術擴大應用范圍、推向市 場的快捷途徑。2.2微軟語音技術Speech 概述微軟Speech SDK 5.0是微軟公司的語音開發(fā)軟件包工具。其工具、信息、引擎和樣品幫助,與微軟公司

16、API 5. 0結合起來成為一個軟 件包。Speech SDK也包括微軟公司的先進的語音識別引擎和微軟公司的 Concatenative的語音合成引擎(以前代號為的“wistler”)SAPI 5.0由2個接口:應用程序設計接口(API)和設備驅動程序接口(DDI) 構成。SAPI的5.0 API顯著地減少了使用語音識別的應用和綜合的代碼。SAPI的5.0 DDI和API除掉了許多類似在語音合成和識別引擎的多線程,在聲音的裝置管理和方便的應用的實現(xiàn)細節(jié)。ApplicationSAP I Ru ntimeRecognitionEngineRecognitionEngineSynthesisEng

17、ineAPI事件Speech SDK語音合成和語音識別與應用程序的接口,是通過接收API事件 完成。例如,正文的詞,或通用的短語被識別的時候成生了 API事件。語音合成API應用程序使用接口 - ISpVoice,使API完成基本語音合成。應用程序通過具有 CLSID_SpVoice的COM CoCreateInstance方法得到 ISpVoice接口得到COM 接口指針。應用程序能通過ISpVoice: Speak的方法合成語音,將把要合成的語音的文 本通過參數(shù)傳遞給Speech SDK。語音識別API就像IspVoice作為語音合成API 一樣,ISpRecoContext是給語音識別的

18、主 要的接口對象指針。通過設置NotifySink識別事件陷阱池,應用程序可以捕獲 語音識別完成事件。第三章Agent技術介紹3.1 Microsoft Agent 技術介紹Microsoft Agent最早出現(xiàn)在Office 95中,主要用于Office的幫助,微軟稱 之為“Office助手”-是在一個小窗口內播放各種幽默的卡通動畫,而且這些動 畫是隨特定的操作不同而改變,這就給使用電腦的人增添了許多樂趣。不過這種 方式在現(xiàn)在看來是很“簡陋”的,不直觀也不形象生動。1997年微軟推出Agent 1.5版,從界面上徹底脫離了窗口的限制,而變得非 常形象生動,而且其核心采用了基于COM的Acti

19、veX控件方式,這就意味著Agent 可以在Visual C+、Visual Basic、Html以及所有支持ActiveX的開發(fā)語言很方 便的進行二次開發(fā)。同時其它領域的相關技術也很好的應用到Agent中來,如語 音合成、語音識別等技術(這里需要特別提出的是有關中文語音合成和識別至盡 尚未應用于Agent,不能不說是一種遺憾)。這樣Agent就轉變?yōu)樾乱淮鷷f能聽 的智能界面,其深遠意義顯而易見。伴隨著新世紀的到來,微軟發(fā)布的Office2000中徹底的應用了 Agent的技術 (應該說基于Agent 2.0,聽說英文版的Office 2000可支持語音提示和語音命令識 別),而且微軟的新一

20、代操作系統(tǒng)Windows2000完全內置了 Agent的組件系統(tǒng), 可見微軟對Agent抱有極大的興趣的。總之Agent是一個非常有發(fā)展前途的技術,目前國外已有不少基于Agent的 軟件,如TalkMail等,國內也有部分英語學習軟件使用了 Agent的技術。但是 由于Agent的語音模塊只使用到了 Speech Sdk 4.0,語音模塊不支持中文,語 音識別率低。所以,本設計沒有使用Agent自帶的語音技術,而采用最新的語 音Speech Sdk 5.0的底層調用,支持簡體中文,合成和識別。而對于Agent界 面模塊使用到了動畫技術,作為人機交流的界面。3.2 Microsoft Agent

21、技術應用原理對Agent編程的方法主要有使用VB,VC等語言進行ActiveX調用,除此之 外還有直接通過VC進行COM編程調用。在VB中調用Agent是最簡單不過了, 但由于VB程序本身存在諸多缺陷,很難在實際中應用。而在VC中,由于Agent內部完全采用了 UNICODE編碼,同時還要處理各 種繁雜的COM接口,存在一定的難度,但效率較高。源理介紹應用程序和Agent Server的連接是通過COM調用來實現(xiàn)的。將一個Agent控制加載相應的動畫和語音碼我們稱之為“角色”,一般使用 COM調用創(chuàng)建一個Agent角色,使用調用創(chuàng)建一個Agent角色方法應用程序和Agmt Ser ver K)

22、連接方法第四章開發(fā)系統(tǒng)介紹4. 1 Microsoft Development Studio 6.0本軟件的開發(fā)使用了 微軟的Microsoft Development Studio 6.0中的一員VC+ 6.0?,F(xiàn)大概介紹一下VC+編程的特點。Visual C+作為一個功能非常強大的可視化應用程序開發(fā)工具,是計算機 界公認的最優(yōu)秀的應用開發(fā)工具之一。Microsoft的基本類庫MFC使得開發(fā) Windows應用程序比以往任何時候都要容易。理解VC工程Visual C+作為一種程序設計語言,它同時也是一個集成開發(fā)工具,提供 了軟件代碼自動生成和可視化的資源編輯功能。在VC中,應用程序是以Pro

23、ject的形式存在的,Project文件以.dsp擴展名, 在Workspace文件中可以包含多個Project,由Workspace文件對它們進行統(tǒng)一的 協(xié)調和管理。MFC編程特點近幾年來,面向對象技術無論是在理論還是實踐上都在飛速地發(fā)展。面向對 象技術中最重要的就是“對象”的概念,它把現(xiàn)實世界中的氣球、自行車等客觀 實體抽象成程序中的“對象”。這種“對象”具有一定的屬性和方法,這里的屬 性指對象本身的各種特性參數(shù)。如氣球的體積,自行車的長度等,而方法是指對 象本身所能執(zhí)行的功能,如氣球能飛,自行車能滾動等。一個具體的對象可以有 許多的屬性和方法,面向對象技術的重要特點就是對象的封裝性,對于

24、外界而言, 并不需要知道對象有哪些屬性,也不需要知道對象本身的方法是如何實現(xiàn)的,而 只需要調用對象所提供的方法來完成特定的功能。從這里我們可以看出,當把面 向對象技術應用到程序設計中時,程序員只是在編寫對象方法時才需要關心對象 本身的細節(jié)問題,大部分的時間是放在對對象的方法的調用上,組織這些對象進 行協(xié)同工作。MFC的英文全稱是Microsoft Fundation Classes,即微軟的基本類庫,MFC 的本質就是一個包含了許多微軟公司已經(jīng)定義好的對象的類庫,我們知道,雖然 我們要編寫的程序在功能上是千差萬別的,但從本質上來講,都可以化歸為用戶 界面的設計,對文件的操作,多媒體的使用,數(shù)據(jù)

25、庫的訪問等等一些最主要的方 面。這一點正是微軟提供MFC類庫最重要的原因,在這個類庫中包含了一百多 個程序開發(fā)過程中最常用到的對象。在進行程序設計的時候,如果類庫中的某個 對象能完成所需要的功能,這時我們只要簡單地調用已有對象的方法就可以了。 我們還可以利用面向對象技術中很重要的“繼承”方法從類庫中的已有對象派生 出我們自己的對象,這時派生出來的對象除了具有類庫中的對象的特性和功能之 外,還可以由我們自己根據(jù)需要加上所需的特性和方法,產生一個更專門的,功 能更為強大的對象。當然,你也可以在程序中創(chuàng)建全新的對象,并根據(jù)需要不斷 完善對象的功能。正是由于MFC編程方法充分利用了面向對象技術的優(yōu)點,

26、它使得我們編程 時極少需要關心對象方法的實現(xiàn)細節(jié),同時類庫中的各種對象的強大功能足以完 成我們程序中的絕大部分所需功能,這使得應用程序中程序員所需要編寫的代碼 大為減少,有力地保證了程序的良好的可調試性。最后要指出的是MFC類庫在提供的對象的各種屬性和方法都是經(jīng)過謹慎的 編寫和嚴格的測試,可靠性很高,這就保證了使用MFC類庫不會影響程序的可 靠性和正確性。程序結構剖析下面為一個表示程序中的主要類之間的關系的圖表:這個圖表表示了使用MFC方式的應用程序的四個主要類之間的關系,從中 可以看出,CMYAPP類主要的作用是用來處理消息的,它統(tǒng)一管理程序收到的 所有的消息,然后把消息分配到相應的對象。C

27、MAINFRAME是CMYVIEW的 父類,也就是說視窗 VIEW 顯示在主框窗 MAINFRAME的客戶區(qū)中。類 CMYVIEW的作用是顯示數(shù)據(jù),而數(shù)據(jù)的來源是類CMYDOC,在MFC程序中, 程序的數(shù)據(jù)是放在文檔當中的,而顯示數(shù)據(jù)則是利用視窗方式,文檔與視窗分離 帶來的好處就是一個文檔可以同時具有多個視窗,每個視窗只顯示文檔中的一部 分數(shù)據(jù),或者以特定的風格顯示文檔中的數(shù)據(jù)。文檔與視窗分離的另一個好處就 是在程序中可以處理多個文檔,通過對不同的視窗的處理達到對不同的文檔分別 處理的目的。使用過傳統(tǒng)的WINDOWS編程方法的人都知道,在應用程序中有一個重要 的函數(shù)WINMAIN(),這個函數(shù)

28、是應用程序的基礎,用戶的操作所產生的消息 正是經(jīng)過這個函數(shù)的處理派送到對應的對象中進行處理。而在 MFC方式的 WINDOWS應用程序中,用來處理消息的是系統(tǒng)自動生成的 MFC中的類 CWINAPP 的派生類 CMYAPP。3. 2 Microsoft SQL SERVER 2000使用SQL Server 2000的最新增強功能開發(fā)數(shù)據(jù)庫解決方案。建立在SQL Server 7.0可擴展基礎上的 SQL Server 2000代表著下一代 Microsoft .NET Enterprise Servers (企業(yè)服務器)數(shù)據(jù)庫的發(fā)展趨勢。SQL Server 2000是為創(chuàng)建 可伸縮電子商務

29、、在線商務和數(shù)據(jù)倉儲解決方案而設計的真正意義上的關系型數(shù) 據(jù)庫管理與分析系統(tǒng)。SQL Server 2000 的新特性安全的應用程序管理。更高的可伸縮性和可靠性。數(shù)據(jù)倉庫解決方案的可伸 縮性。最大的正常運行時間和可靠性。集成的和可擴展的分析服務。簡單的管理 和調整。增強和簡化的事務處理一SQL (T-SQL)開發(fā)和調試。靈活的和可擴 展的數(shù)據(jù)轉換。第五章系統(tǒng)實現(xiàn)5.1需求分析本設計的目標是利用語音技術和動畫技術作為與用戶交流的主要人機界面。 用戶通過語音識別控制程序運行,程序通過語音合成通知現(xiàn)在運行狀況。而作為 被控制的對象是一個網(wǎng)絡服務模型。用戶登陸上AgentNet服務器上以后,可以要求讀

30、新聞,與同時登陸到 AgentNet的其他客戶通訊等等。在客戶端用戶可用語音控制去完成接收電子郵件等日常工作??傮w軟硬件結構示意圖5.2模塊分析5.2.1 客戶端模塊目標:用戶登陸AgentNet后,出現(xiàn)Agent動畫界面,所有的功能可通過語 音控制,也可通過傳統(tǒng)界面控制。功能包括:登陸、系統(tǒng)設置、人機聊天、讀文 本、郵件、看AgentNet新聞、通訊(可與同時登陸到AgentNet的客戶通訊)等??蛻舳四K圖界面層語音識別模塊語音合成模塊Agent界面模塊 伐統(tǒng)界面模塊/7卜4卜7核心層核心她理禳塊ZS7用戶認證人機唧天設置功能層 郵件通訊新聞其它網(wǎng)絡層網(wǎng)絡處理模塊網(wǎng)絡層客戶端模塊分析 共分

31、3層 界面層分析:層模塊名模塊輸入模塊輸出模塊輸出對像備注界面層語音識別(SR)用戶通過話筒的普通話語言命令號核心處理層命令號由 srgrammar.xml 的xml文件定 義,核心層的接 收命令并執(zhí)行。語音合成核心層的合成后通用戶聲卡默認以簡(TTS)字符串過聲卡以聲音流輸出(soundstream)所連音響體中文合成語音。Agent 界面核心層的Agent動作命令Agent 動畫動作用戶界面?zhèn)鹘y(tǒng)界面按鈕、菜單Windows 窗口等核心處理層響應傳統(tǒng) 的菜單、鼠標事 件,顯示窗口核心層分析層模塊名模塊輸入模塊輸出模塊輸出備注對像核心層核心處理界面層的到界面層界面層功此模塊處理語音命令號,的需

32、要語音合能層核心調度。所有的菜單、鼠標等成字符串、其他模塊都受到事件,功能層Agent動作命它的控制。動作成后的事令、Windows 窗件口界面兀素。功能層的各功能調度功能層層模塊名模塊輸入模塊輸出模塊輸出對像備注功能層用戶認證用戶名,密碼是否認證通過結果由核心層處理賬號信息 由核心層從傳 統(tǒng)界面獲得設置服務器ip為核心層核心層信息由核地址、郵件賬號信息等提供必要的信息心層從傳統(tǒng)界面獲得,并寫到注冊表郵件收郵件新郵件信息結果由核心層處理輸出到界面層語音識別收郵件,語音合成讀郵件。通訊網(wǎng)絡層的其他客戶登陸消息、其他客戶發(fā)來的訊息要顯示的 信息,及要合成 的語音信息字 符串結果由核心層處理輸出到界

33、面層與網(wǎng)絡層交互信息,信息顯示到界面層新聞網(wǎng)絡層的新聞信息要合成的新聞信息字符 串結果由核心層處理輸出到界面層與網(wǎng)絡層交互信息,信息顯示到界面層人機聊天命令核心層傳來的語音識別聊天命令要合成的語音信息字符 串結果由核心層處理輸出到界面層有限的命令反映。5.2.2 服務器端模塊目標:每個客戶端必須先登陸到AgentNet服務器,才能繼續(xù)使用,這里需 要賬號認證。每個服務器端的事件,都要被紀錄,這里需要事件管理。服務器端 提供一個新聞服務。當客戶端要求看最新的新聞時,發(fā)新聞給客戶端。這里要有 新聞管理,用于添加、刪除、修改新聞??蛻舳税l(fā)過來的網(wǎng)絡訊息,以及服務器端發(fā)給客戶端的訊息,都由網(wǎng)絡層實 現(xiàn)

34、。所有具體功能的實現(xiàn)在功能層。核心層處理各層的調度。每個管理模塊的數(shù)據(jù),都記錄在SQL SERVER上。這在數(shù)據(jù)層上實現(xiàn)。網(wǎng)絡層網(wǎng)紹散理模塊核心層核心處理模塊4卜功能底 事件管理 賬號管理 新聞管理客戶通訊*教據(jù)居數(shù)踞愁理模塊由于本設計主要目標體現(xiàn)在整個結構的架設。到現(xiàn)在為止,實現(xiàn)的是基本的 服務。但以后可以很方便的在其基本結構上增加新服務功能。相對于客戶端,服務器端模塊結構不具體展開。詳細信息可到具體實現(xiàn)小節(jié) 察看。5.3具體實現(xiàn)細節(jié)5.3.1 客戶端界面層語音識別(SR)模塊SR中定義的成員變量有:CComPtr m_cpEngine;/SR engine 接口CComPtr m_cpRe

35、coCtxt; /recognize context 接口 CComPtr m_cpCmdGrammar; /grammar 接口 成員函數(shù):InitSR();初始化ProcessRecoEvent(); 事件響應函數(shù)ExecuteSRCommand();執(zhí)行語音命令ReleaseSR();釋放接口InitSR() 函數(shù)中初始化了 COM 接口、SR engine 接口、recognize context 接口、grammar接口,這些都是COM 接口指針。其中 m_cpEngine為主SR Engine接口,程序使用它作為與其他模塊的連接。m_cpRecoCtxt為recongnize 事件

36、上下文,通過它,當識別事件發(fā)生的時候,可以獲得具體識別出來的文字或 命令號。m_cpCmdGrammar為命令接口。由于本設計的語音識別只涉及到有 限命令詞匯,所以在這里定義了命令接口。對于一些其它需要口述板的應用可以 定義口述接口,以識別無限命令集既自然語言識別。當然定義有限命令可以大大 提高識別率。m_cpCmdGrammar 命令接口的初始化是通過載入一個名為 srgrammar.cfg語法規(guī)則文件而完成。這個文件由一個名為srgrammar.xml的XML文件通 過專用的語法產生程序產生。在srgrammar.xml內具體定義了需要識別的中文命 令。如: 你好 在這里定義了一些用戶自定

37、義事件#define WM_RECOEVENTWM_USER+100并在 MESSAGE_MAP內定義處理函數(shù)語音識別事件消息處理ON_MESSAGE(WM_RECOEVENT,ProcessRecoEvent)當識別結束時,程序主線程接收到此WM_RECOEVENT消息,運行處理 函數(shù) ProcessRecoEvent()。此函數(shù)在確定是語音識別事件成生后,運行ExecuteSRCommand()函數(shù)。ExecuteSRCommand()分辨哪個命令被識別,并執(zhí)行響應命令處理函數(shù)。當初始化成功完成后,用戶說你好這個單詞后:程序流程如下:語法規(guī)則與語法樹語法規(guī)則是SAPI 5.0的一個重要的元

38、素。它限制了在語音識別處理中,可能的被識別的字或句子成分。短語或句用每個語法規(guī)則成分來決定識別通路。例如,核查在描述旅行計劃的句子:“我想開車從北京到上海。”請注意這 里有決定結果的信息元素存在。就這個例子來說,有個人在計劃從北京開車到上海。這個非常簡單的例子說明了一個可能非常復雜的問題。不限制方法、方向和旅行目的地,產生的旅行計劃將是任選的無限數(shù)。作為結果產生的有效信息能通過加以限制的方法選擇決定。下為這個例子的具體分析:想開車北京 到 上海開車 乘飛機海京津上南天夕京海京律W北上南天識別結果匕 方法t開車原城市:北京目的城市;上海GRA1WO1定義莊號-CID NAME=#上海# 7=11

39、02/ ID NAME=南京TALLLOW/想。Ci)F VAL二汽丘iw)開車C/PP理比二叩1、乘飛機C/P)JP盜L=*北京。北京P TAL=*上海二上海/P南京_/PP 噸L=*天津。天津iJL PR.OPNAME=DetCitP WAL=*上吾。上海C/PP TAL=*南京二南京即天津_/P3語音合成(TTS )模塊1 ISpVojce * ITTS如taJ!(CShiDG Hr昴okL h s-trEjealr知由如taJ!(CShiDG Hr昴okL h s-trEjealr知由rin:焚的早冊申.帆路成語音+ItTTS。: +Rtlia5tTrSQ : uoii+如血&如(旬

40、H 曲或i : St line) : void語音合成模塊相對簡單。它定義的變量有:/tts語音合成接口ISpVoice *m_cpTTSVoice;成員函數(shù):InitTTS(); 初始化AgentSpeak(Cstring strSpeak); 合成ReleaseTTS();釋放接口先使用InitTTS()初始化,它初始化了 COM 接口,并設置了合成的男聲 的語速,默認把它設為+2,語速快一點,相對覺得自然一點。然后核心層關心的就是 AgentSpeak(CString strSpeak)這個函數(shù)了。核心層把欲合成的字符串作為參數(shù)提交給AgentSpeak,即合成了語音。Agent界面模塊

41、虹IjLgtn-t lZ3rB.rB.ci crEi,. Hg-tn-tlt-l ifySinlz-ri_TiJLEtntEH : AuentEi*TijUH-ra-ct erE :-rijSiiil: 拓 F_lChirHl : loriE-ri.lKi-ln-tEtlD : lorn+ Ini t At mt C.) : iroi d+JlEit5la-y|.irL =trAnirTiatic-n : StrintJ : ijolii-Ps-: I lh sirSpcal; : Si rizic.1 : g記 t-KEtntStcirO :i.rni d +Jit 1 ta = dLc.t

42、 I.J -iJOl AAgent界面是人機對話的圖形接口。這里主要目的是讓 Agent隨著核心層 的命令調用,顯示各種動畫。譬如,合成語音時,在動畫人物上彈出氣球(Balloon),上面顯示了合成的字符串。主要成員變量有:/agent 指針lAgentEx* m_pAgentEx;IAgentCharacterEx* m_pCharacterEx;AgentNotifySink* m_pSink;longm lCharID;longm_lRequestID;m_pAgentEx 物指針。m_pSink是主接口指針,m_pCharacterEx 是具體的 Agent動畫人 是消息陷阱池指針,用

43、于捕獲用戶在Agent動畫上點擊鼠標右健,用于動態(tài)彈出菜單。主要成員函數(shù):InitAgent()初始化AgentSpeak(CString strSpeak)語言合成并彈出氣球(這里集成了語音合成)AgentPlay(CString strAnimation)表演動畫AgentStop()停止任何表演ReleaseAgent()釋放接口5.3.2 客戶端核心層核心層是整個程序的主線程。它處理各種數(shù)據(jù),完成其他各層的初始化、調用。處理了傳統(tǒng)界面的處理(包 括整個windows窗口)。由于這里主要涉及到繁瑣的源代碼,篇幅有限,具體請看代碼。5.3.3 客戶端功能層用戶認證模塊程序彈出一個登陸對話框

44、,要求輸入用戶名和密碼。這些信息傳到網(wǎng)絡層,網(wǎng)絡層向服務器發(fā)出登陸請求,若認證通過,繼續(xù)主 線程。由于篇幅有限,具體請看代碼。設置模塊在登陸對話框上有設置按鈕,這里設置服務器ip地址、郵件賬號信息等.所有的信息寫到注冊表,以后可再讀出來。如:寫服務器ip地址pApp-WriteProfileString(strServerSection,nServerIpAddress,ServerPage.m_strServ erlpAddress);讀服務器ip地址m_stuSetup.strServerIpAddress=pApp-GetProfileString(strServerSection,Se

45、rverIpAddress);由于篇幅有限,具體請看代碼。郵件模塊ClailltEEaEeClailltEEaEe-rri_EHeide:r : SferinE f.eB二斗:St ring fi_j=F工nm ! bi rs.nc nTusSLtjict ; Striiic Hl 4 8 ditB二由 y : bzcl Hl cc-itH-ta -it r (J : ! 11 十年這里用到了兩個類CPop3類用于郵件處理,CMailMessage用于郵件內容解碼。在初始化后,用 CPop3:SetServerProperties( LPCTSTR sServerHostName, UINT

46、nPort)設定郵件 服務器參數(shù)。用 CPop3:SetUserProperties( LPCTSTR sUsername, LPCTSTR sPassword )設定用 戶賬號參數(shù)。這些參數(shù)是從設置模塊讀過來的。然后 CPop3:Connect(),CPop3:GetNumMessage()獲得當前郵箱的郵件數(shù)。CPop3:GetMessage( UINT nMsg, CMailMessage* msg)獲得郵件內容放到 msg 里。CPop3:Disconnect()斷開連接。通過CMailMessage:EncodeBody()可解碼郵件內容。郵件的具體內容在解碼后放在成員變量中。重點一

47、-多線程由于在處理收郵件功能時,若程序使單線程的,網(wǎng)絡延時必定使主線程阻塞。 所以當核心模塊調用郵件模塊必須開一個新線層。多線層編程細節(jié)在Windows的一個進程內,包含一個或多個線程。線程是指進程的一條執(zhí)行 路徑,它包含獨立的堆棧和CPU寄存器狀態(tài),每個線程共享所有的進程資源,包 括打開的文件、信號標識及動態(tài)分配的內存等等。一個進程內的所有線程使用同 一個32位地址空間,而這些線程的執(zhí)行由系統(tǒng)調度程序控制,調度程序決定哪 個線程可執(zhí)行以及什么時候執(zhí)行線程。線程有優(yōu)先級別,優(yōu)先權較低的線程必須 等到優(yōu)先權較高的線程執(zhí)行完任務后再執(zhí)行。在多處理器的機器上,調度程序可 將多個線程放到不同的處理器上

48、去運行,這樣就可使處理器的任務平衡,也提高 了系統(tǒng)的運行效率。Visual C+ 5.0提供了 Windows應用程序的集成開發(fā)環(huán)境 Developer Studio。在這個環(huán)境里,用戶既可以編寫C風格的32位Win32應用程序,也可 以利用MFC類庫編寫C+風格的應用程序,二者各有其優(yōu)點:基于Win32的應用 程序執(zhí)行代碼小巧,運行效率高,但要求程序員編寫的代碼較多,且需要管理所 有系統(tǒng)提供給程序的資源;而基于MFC類庫的應用程序可以快速建立起應用程 序,類庫為程序員提供了大量的封裝類,而且Developer Studio為程序員提供 了一些工具來管理用戶源程序,其缺點是類庫代碼很龐大,應用

49、程序的執(zhí)行代碼 離不開這些代碼。由于使用類庫所帶來的快速、簡捷和功能強大等優(yōu)越性,因此, 除非有特殊的需要,否則Visual C+提倡使用MFC類庫進行應用程序開發(fā)。收郵件線程的具體實現(xiàn)主線程和收郵件線程間通過消息互相通訊。定義如下消息:郵件模塊消息定義#define WM_MAIL_ACCOUNT_NOT_SET WM_USER+200#define WM_MAIL_CANNOT_LOGIN WM_USER+201#define WM_MAIL_PROCESS WM_USER+202#define WM_MAIL_NO_NEW_MAIL WM_USER+203#define WM_MAIL_

50、PROCESS_DONE WM_USER+204消息的具體含義可在消息名上看出,不再贅述。具體請參看源代碼。定義消息響應函數(shù)如下:郵件賬號沒設定事件消息處理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_NE

51、W_MAIL,ProcessNoMail)郵件處理完成事件消息處理ON_MESSAGE(WM_MAIL_PROCESS_DONE,ProcessMailDone)當核心層調用收郵件模塊時,開新線程如下;AfxBeginThread(GetMailThread,&m_stuThreadInfo,THREAD_PRIORITY_NORMAL);UINT GetMailThread(LPVOID pParam)是一個全局函數(shù)。其參數(shù)中是一個定義 的,線程必須用到的信息結構。當GetMailThread執(zhí)行完,發(fā)消息到主線程,主線程處理響應動作。由于篇幅有限,具體請看代碼。通訊模塊發(fā)送一般消息到好友。

52、這個函數(shù)把訊息送到網(wǎng)絡層。在選定對方好友后,提出一個對話框,輸入訊息。ProcessSendGeneralMsg(CString strToUserName, CString strText)StrToUserName 為好友名,StrText為發(fā)送的消息字符串。對方網(wǎng)絡層收到消息,調用處理好友信息ProcessReceiveGeneralMsg(msg.m_strUser,msg.m_strText);其中參數(shù)msg為網(wǎng)絡層消息類。這里與網(wǎng)絡層的內容緊密相關,請參看網(wǎng)絡層內容。新聞模塊這里是網(wǎng)絡C/S結構的具體體現(xiàn)。本設計到現(xiàn)在只實現(xiàn)了一個服務器端的具體服務,即新聞服務。但結構已架 設好,擴

53、展方便。ProcessReadNews();向網(wǎng)絡層發(fā)出讀郵件命令。網(wǎng)絡層收到,服務器端的新聞后,調用ProcessRequestReadNews(CString strNews)再提升到界面層。這里與網(wǎng)絡層的內容緊密相關,請參看網(wǎng)絡層內容。人機聊天模塊此模塊現(xiàn)在非常不成熟,由于時間緊迫,能力有限?,F(xiàn)在只是簡單的預定義 的有限命令回答。目標是有一定的人工智能,有一定的推理機制,一定的自學習 機制。要以后進一步完成。5.3.4 客戶端網(wǎng)絡層網(wǎng)絡層是具體的網(wǎng)絡通訊的具體實現(xiàn),它負責與服務器的通訊。使用到了 SOCKET類來具體實現(xiàn)。這里,定義了一個繼承了 CSocket的CToServerSock

54、et類。InitSocket();初始化了網(wǎng)絡連接,其中的對方服務器ip地址等信息,由設置模塊獲得。SendMsg(CMsg *pMsg)發(fā)送消息,參數(shù)為 一個CMsg對像。ReceiveMsg()接受消息,并進行響應處理,上升到核心層處理。CMsg是定義網(wǎng)絡消息的類,服務器端有一個同樣定義的類。處理具體消息其成員變量有:CString m_strText;/通信字符串CString m_strCommand; /命令字符串CString m_strUser;/用戶名字符串CString m_strToUser;/ 目的用戶CString m_strPassword;/用戶字符串網(wǎng)絡通訊高層協(xié)

55、議為了處理不同消息,定義了高層的通訊協(xié)議:CMsg:m_strCommand字符串裝載了這個協(xié)議。5.3.5 服務器端網(wǎng)絡層服務器端的網(wǎng)絡層用了 socket同客戶端的網(wǎng)絡層連接。不過服務器端比客戶端多一個類,這里建了一個繼承CSocket的類:ClisteningSocket。這個類的實例將綁定服務器端的ip地址,和固定端口號:5040。ClisteningSocket用于監(jiān)聽客戶端的連接。若發(fā)現(xiàn)有客戶端的連接,產生一個CClientSocket類的實例。CClientSocket類是繼承了 CSocket的類,處理對客戶端的網(wǎng)絡信息?,F(xiàn)聯(lián)系客戶端網(wǎng)絡層,實現(xiàn)的基本算法如下:服務器方(SER

56、VER)服務器方(SERVER)客戶方(CLIENT)1、構造一個套接字1、構造一個套接字1、構造一個套接字CSocket ser_s1;CSocket cli_s;2、創(chuàng)建該套接字CSocket ser_s1;CSocket cli_s;2、創(chuàng)建該套接字2、創(chuàng)建該套接字ser_s1.Create (port);ser_s1.Create (port);cli_s.Create ();其中,port為服務器方打開的通信通道號3、開始監(jiān)聽來自客戶機的連接ser_s1.Listen();4、構造一個類打開的通信通道號3、開始監(jiān)聽來自客戶機的連接ser_s1.Listen();4、構造一個類CSoc

57、ketFile的對象CSocketFile file(&cli_s);8、使用arIn和arOut進行收或發(fā)數(shù)據(jù)arIn value ;arOut value ;其中,value是所傳輸?shù)臄?shù)據(jù)9、摧毀所創(chuàng)建的CSocket、CSocketFile、CArchive 等類的對象6、使用arIn和arOut進行發(fā)或收數(shù)據(jù)arOut value;7、摧毀所創(chuàng)建的CSocket、CSocketFile、CArchive 等類的對象3、客戶機方套接字cli_s向服務器方套接字ser_s1發(fā)出連接請求cli_s .Connect (Addr, port);(其中,Addr是欲連接服務器方套接字地址結構指針

58、,可采用IP地址或機器名。port即打開的通道號,其值與服務器方的一致。)4、構造一個新的套接字Csocket ser_s2 ;5、服務器等待從ser_s2上接受客戶連接請求ser_s1.Accept (ser_s2);6、構造一個類CSocketFile的對象CSocketFile file(&ser_s2);7、構造類 CArchive 的對象 arIn、arOut 5、構造類 CArchive 的對象 arIn、arOut, ,以用于數(shù)據(jù)的收和發(fā)。以用于數(shù)據(jù)的收和發(fā)。CArchive arIn(&file , CArchive :load); CArchive arIn(&file ,

59、CArchive :load); CArchivearOut(&file, CArchivearOut(&file,CArchive :store) ;CArchive :store);5.3.6 服務器端核心層它處理各種數(shù)據(jù),完成其他各層的初始化、調用。完成傳統(tǒng)界面的處理(包 括 windows 窗口)。界面上出現(xiàn)的windows元素有,一個樹控件,一個List控件。由于這里主要涉及到一些繁瑣的源代碼,篇幅有限,具體請看代碼。5.3.7 服務器端功能層事件管理模塊事件管理的所有數(shù)據(jù)來自數(shù)據(jù)層。主有以下幾個函數(shù):AddEvent(CString strType, CString strEven

60、t); 添加一個事件ShowEvent();顯示所有事件ClearEvent();清空所有事件所有的動作由核心層接收的菜單命令激發(fā)。當進行添加、刪除、更新命令時,會彈出相應對話框,與管理員交流。賬號管理模塊所有數(shù)據(jù)來自數(shù)據(jù)層。主有以下函數(shù)OnMenuAddNewAccount();OnMenuitemAccountDelete();OnMenuitemAccountUpdate();新聞管理模塊所有數(shù)據(jù)來自數(shù)據(jù)層。有以下函數(shù)OnMenuitemAddNewNews();OnMenuitemNewsDelete();OnMenuitemNewsUpdate();所有的動作由核心層接收的菜單命令激

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論