趙文杰 薛永奎 陳磊 劉鎮(zhèn)瑜 霍爍爍
摘? 要: 為解決軍隊在執(zhí)行使用密語口令指揮的試驗任務中,缺少對口令實時翻譯顯示的問題,將語音識別技術(shù)運用到密語口令翻譯顯示系統(tǒng)中,利用微軟語音識別引擎對口令語音進行識別,根據(jù)口令對應的明語,將識別內(nèi)容進行切詞和翻譯,并將翻譯后的明文內(nèi)容通過網(wǎng)絡發(fā)送至顯示端后投影至試驗指揮所大屏,為指揮大廳內(nèi)觀摩人員提供試驗參與裝備、實施過程及結(jié)果等重要內(nèi)容的顯示,設(shè)計了一個密語口令語音實時識別翻譯系統(tǒng),實現(xiàn)了密語口令語音到明文顯示。
關(guān)鍵詞: 語音識別;密語口令;Speech SDK;口令識別
中圖分類號: TP391.41 ???文獻標識碼: A??? DOI:10.3969/j.issn.1003-6970.2020.07.048
本文著錄格式:趙文杰,薛永奎,陳磊,等. 基于語音識別的密語口令翻譯系統(tǒng)[J]. 軟件,2020,41(07):235-238
Password Translation System Based on Speech Recognition
ZHAO Wen-jie, XUE Yong-kui, CHEN Lei, LIU Zhen-yu, HUO Shuo-shuo
(Luoyang Electric Equipment Test Center, Henan Luoyang 471000)
【Abstract】: In order to solve the army in the use of secret password command test tasks, lack of password display real-time translation, translate speech recognition technology applied to secret password display system, using the Microsoft speech recognition engine to password voice identification, according to the password corresponding plain language, cut identify content words and translation, and will be translated clear text content through the network to show end projection to test after command post screen, for staff, command hall view test in equipment, process and result, etc, according to the important content of the design a secret password speech translation projection real-time identification system, It realizes the speech of password to plaintext display.
【Key words】: Speech recognition; Password recognition; Secret password; Speech SDK
0? 引言
在軍隊試驗任務的組織實施中,試驗指揮是通過密語口令下達試驗命令的,且指揮口令以密語形式進行傳播的。在試驗任務實施過程中,指揮口令的翻譯顯示可以使指揮大廳內(nèi)觀摩人員掌握參試裝備、試驗過程、進度和結(jié)果等重要內(nèi)容,是試驗指揮顯示中一個十分重要的要素。
當前試驗任務中對僅為指揮大廳內(nèi)部人員提供密語口令表,雖然可以根據(jù)此表對試驗中的口令進行翻譯,但是由于試驗過程中指揮員口令的下達與自他參與者的回復都是十分迅速和頻繁的,指揮大廳內(nèi)除指揮員外的其他人對通過口令了解試驗信息是十分困難的,這對試驗任務組織實施和觀摩造成很大不便。隨著語音技術(shù)的發(fā)展,語音識別技術(shù)已進入工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務、消費電子產(chǎn)品等各個領(lǐng)域[1]。但是由于軍用數(shù)字口令發(fā)音與正常數(shù)字發(fā)音不同,使通用語音識別程序不能達到軍用口令識別的效果,本文主要工作是運用語音識別技術(shù),構(gòu)建了一個密語口令識別翻譯系統(tǒng),實時識別指揮語音口令并翻譯為明文,而后再通過網(wǎng)絡投影至指揮大廳觀摩屏進行實時顯示,為試驗指揮大廳內(nèi)部人員提供參試裝備、試驗實時進度、結(jié)果等的顯示說明。
1 ?系統(tǒng)設(shè)計
1.1? 需求分析
正文內(nèi)容。在試驗任務中,一般試驗指揮人員是在指揮大廳內(nèi)通過調(diào)度、電臺等通訊設(shè)備進行指揮的,由于試驗任務的復雜性,可能有多個試驗指揮人員同時指揮不同的試驗科目,參與的通信設(shè)備也可能有調(diào)度和多部電臺同時使用,因此本系統(tǒng)需要同時具備多個口令語音識別的客戶端同時運行,對翻譯后的內(nèi)容應按時間順序進行匯總顯示。因此本系統(tǒng)設(shè)計為可根據(jù)需要同時運行在多個計算機上的口令識別翻譯后端軟件和一個接收匯總翻譯內(nèi)容的顯示前端軟件。該系統(tǒng)結(jié)構(gòu)圖如圖1所示。
1.2 ?功能設(shè)計
顯示前端軟件的主要功能為將接收到后端軟件發(fā)送的信息進行解析、顯示和存儲。
口令識別翻譯后端軟件功能如下:
(1)加載密語庫。加載試驗口令的密語庫,該庫定義了口令和其對應的明文解釋,是系統(tǒng)進行口令翻譯的依據(jù);
(2)語音口令識別。獲取計算機系統(tǒng)外設(shè)語音拾取設(shè)備的語音信息,并對其進行識別;
(3)口令翻譯。對識別后的口令語句進行切詞,并依據(jù)密語庫進行明文翻譯;
(4)網(wǎng)絡發(fā)送。將翻譯內(nèi)容通過試驗網(wǎng)絡發(fā)送至顯示前端;
(5)信息存儲。對前端地址以及發(fā)送的數(shù)據(jù)等信息進行存儲。
2 ?系統(tǒng)關(guān)鍵模塊實現(xiàn)
2.1? 加載密語庫
密語庫定義了口令和其對應的明文解釋,是系統(tǒng)進行口令翻譯的依據(jù)。該庫由試驗師根據(jù)試驗需要編訂,主要用來存儲密語口令的口令和明語信息,包括參與試驗裝備代號和名稱、試驗實施動作、裝備工作方式、結(jié)果上報信息等。根據(jù)實際需要采用EXCEL表格作為密語庫的載體,系統(tǒng)通過調(diào)用COM組件的方式讀取EXCEL密語庫的內(nèi)容[2]。
2.2 ?口令語音識別
(1)識別引擎Speech SDK介紹
近些年來,語音識別技術(shù)在國內(nèi)發(fā)展迅速,科大訊飛、搜狗、百度、騰訊等國內(nèi)公司均推出了自己的語音識別引擎,大部分對中文識別率很高,但基本均需要互聯(lián)網(wǎng)的支持,不支持離線,對于對保密要求嚴格的軍隊來說,都不是最佳選擇。
Microsoft Speech SDK是一套語音應用程序開發(fā)的軟件開發(fā)資源包,它完全基于COM標準開發(fā),底層協(xié)議以COM組件的形式完全獨立于應用程序?qū)?,開發(fā)人員可以方便使用資源包中的資源開發(fā)語音識別和語音合成應用程序,而不必糾結(jié)于復雜的語音技術(shù)[3],而且Microsoft Speech SDK完全支持簡體中文語音系統(tǒng),且其工作過程可以完全離線,不需要連接互聯(lián)網(wǎng),因此,對于有保密要求的軍隊而言,是一個理想的開發(fā)工具。
其中,語音識別有識別引擎Recognition Engine負責,語音合成由語音合成引擎TTS Engine負責,結(jié)構(gòu)圖如圖2所示。
(2)環(huán)境配置
系統(tǒng)在Visual Studio 2010 C#開發(fā)環(huán)境下,使用Windows7自帶的windows Speech SDK 5.4版本的開發(fā)包[4],項目創(chuàng)建后,首先需要在解決方案管理器中添加對SDK開發(fā)包的COM組件的引用,如下圖2所示。
添加引用后在需要調(diào)用語音識別引擎的代碼頭部添加語音識別命名空間的using System.Speech. Recognition引用指令,在需要調(diào)用語音合成引擎的代碼頭部添加語音合成命名空間的using System. Speech.Synthesis引用指令[5]。
(3)語音識別分析
調(diào)用Speech SDK中語音識別引擎進行口令語音識別過程如下圖4所示。
通過對SDK中SpeechRecognitionEngine類的研究,在以上識別過程中,需要調(diào)用Speech?Reco?gni?tionEngine構(gòu)造函數(shù)構(gòu)建語音識別器,通過Load?Grammar、UnloadAllGrammar等函數(shù)管理語音識別語法,通過SetInputToAudioStream、SetInputTo?DefaultAudioDevic等配置識別器輸入,通過Recognize或RecognizeAsync方法執(zhí)行啟動單次或連續(xù)語音識別,通過設(shè)置EndSilenceTimeout等屬性設(shè)置識別間隔,通過SpeechRecognizedEventArgs事件委托得到識別結(jié)果,通過RecognizeAsyncStop或RecognizeAsyncCancel方法停止語音識別,通過調(diào)用Dispose進行資源釋放[6]。
(4)口令識別語法構(gòu)建
在軍隊任務指揮中,口令主要由0-9的十個數(shù)字組合而成,但軍語對十個數(shù)字的口令發(fā)音與正常普通話發(fā)音存在差異(區(qū)別見表1),因此本系統(tǒng)的語音識別任務為對十個數(shù)字口令軍語發(fā)音的組合進行識別[7]。
識別語法構(gòu)建有兩種方式,一種是在XML文件中定義,一種則以編程方式生成[8]。密語口令中,每一句口令均由0-9的十個數(shù)字自由組合而成,因此構(gòu)建語法規(guī)則中,關(guān)鍵詞限定為:“幺”、“兩”、“三”、“四”、“五”、“六”、“拐”、“八”、“勾”、“洞”。由于關(guān)鍵詞數(shù)量少,選擇以編程方式生成語法約束,生成方法為使用GrammarBuilder對象生成由Cho?i?ces包含備用關(guān)鍵詞的層次結(jié)構(gòu)樹(其中Choices為同包含在System.Speech.Recogniton命名空間中表示可以具有若干值之一的短語集合)。主要代碼如下:
string[] numStr = {“幺”,“兩”,“三”,“四”,“五”,“六”,“拐”,“八”,“勾”,“洞”};
Choices numChoices = new Choices(numStr);
GrammarBuilder tempGrammarBuilder = new GrammarBuilder();
tempGrammarBuilder.Append(numChoices);
以上代碼構(gòu)建的語法約束僅滿足識別單個數(shù)字的要求,本文要求識別可變長度的數(shù)字串,則需要調(diào)用GrammarBuilder類中的重載函數(shù)public void Append (GrammarBuilder builder, int minRepeat, int maxRepeat),其中builder為已生成識別單個數(shù)字的語法元素,minRepeat和maxRepeat分別表示必須發(fā)生構(gòu)成匹配的語法builder的最小次數(shù)和最大次數(shù),為滿足可變長度的要求,此處minRepeat必須設(shè)定為0,maxRepeat設(shè)定為1。根據(jù)實際需要,最長識別長度設(shè)定為50,則滿足識別需要的語法約束剩余代碼如下,其中numGrammar為最終語音識別引擎需要加載的語法約束。
GrammarBuilder numGrammarBuilder = new GrammarBuilder();
for(int i=0;i<50;i++)
{numGrammarBuilder.Append(tempGrammarBuilder, 0, 1);}
Grammar numGrammar = new Grammar(numGrammarBuilder);
(5)識別結(jié)果處理
語音識別引擎通過LoadGrammar加載語法規(guī)則后,為語法的識別事件添加一個處理程序,主要代碼如下:
numGrammar.SpeechRecognized + = new Event?Handler
void recognizer_Result(object sender, Speech?RecognizedEventArgs e)
{string result;result = e.Result.Text;//得到識別結(jié)果}
經(jīng)過以上識別過程,通過麥克風拾取的語音信號便轉(zhuǎn)換為文字信息,再根據(jù)表1中數(shù)字0-9發(fā)音對比表將識別結(jié)果中字符進行替換,將口令語音字符替換為數(shù)字字符,如將“幺”替換為“1”、“兩”替換為“2”依次類推,由此得到一串類似于“01102”的識別結(jié)果。
2.3 ?口令翻譯
通過語音識別得到一串數(shù)字組合的識別結(jié)果后,需要根據(jù)口令庫對識別結(jié)果進行切詞、翻譯。
切詞是使用遞歸算法[9]將字符串按字符順序拆分為多個字符串子集,假如各子集在密語庫中均有對應的翻譯,那么該拆分組合便是一次成功的切詞。如將“01102”根據(jù)密語庫中的口令切詞為“01,102”(其中“01”表示“裝備1”,“102”表示“關(guān)機”),由此得出“01102”的明文為“裝備1關(guān)機”的指令。切詞成功后,依據(jù)密語口令庫進行翻譯。
2.4? 網(wǎng)絡發(fā)送與信息存儲
網(wǎng)絡發(fā)送主要是講口令識別端將識別結(jié)果及翻譯內(nèi)容通過網(wǎng)絡發(fā)送至前端,系統(tǒng)采用Windows操作系統(tǒng)提供的網(wǎng)絡套接字(SOCKET)接口實現(xiàn)實時雙端網(wǎng)絡通信??紤]到系統(tǒng)需要無差錯可靠的傳輸要求以及TCP面向連接的可靠性特點,本系統(tǒng)使用TCP[10]傳輸口令及相關(guān)信息。
信息存儲主要是口令識別后端在向顯示前端發(fā)送數(shù)據(jù)時將發(fā)送內(nèi)容同步進行存儲,存儲內(nèi)容包括發(fā)送對象、內(nèi)容及時間信息等,存儲方式采用同2.1中同樣的調(diào)用COM組件的方式寫入EXCEL文件[3],以便于根據(jù)保存的口令及翻譯內(nèi)容在需要時復盤整個任務口令的執(zhí)行過程。
3? 識別結(jié)果分析
經(jīng)過對五次試驗1020條試驗密語口令進行識別測試,測試地點為有一定人聲為噪音背景的辦公室,麥克風為得勝PCM-5550手持錄音麥克風,結(jié)果顯示:識別正確974條,識別正確率為95.5%;識別錯誤46條,識別錯誤率為4.5%。
經(jīng)過統(tǒng)計發(fā)現(xiàn)錯誤集中出現(xiàn)在以下幾處:11(幺幺)識別為16(幺六)、55(五五)識別為5(五)、9(勾)識別為95(勾五),且在系統(tǒng)啟動識別后前十條識別中識別錯誤率最高。分析主要原因除了系統(tǒng)語音識別算法自身原因外,對測試人發(fā)音是否標準也有很大關(guān)系,因此,若要提高識別正確率,首先發(fā)音應盡量標準、無拖音,其次密語庫設(shè)計中應減少重復數(shù)字的出現(xiàn)。
4? 結(jié)語
本文對語音識別技術(shù)應用于軍用密語口令識別的可能性進行了研究,分析了密語口令翻譯系統(tǒng)的功能需求,研究了微軟Speech SDK里語音應用程序接口的結(jié)構(gòu)和工作原理,設(shè)計和實現(xiàn)了軍用密語口令識別翻譯系統(tǒng),并對系統(tǒng)進行了識別測試,識別正確率達到95.5%,對識別錯誤的口令進行統(tǒng)計并分析了識別錯誤的原因,為減少識別錯誤率提出了發(fā)音應標準、密語庫中應減少重復數(shù)字口令出現(xiàn)等要求。
參考文獻
高清倫, 譚月輝. 語音識別技術(shù)在軍用話務臺中的應用模擬系統(tǒng)研究[J]. 河北工業(yè)科技, 2007(5): 272-274.
林鳴霄. 基于SpeechSDK的語音識別技術(shù)在三維仿真中的應用[J]. 計算機技術(shù)與發(fā)展, 2011, 21(11): 160-162.
蔡小艷, 李龍騰, 葛玉,等. 基于C#的Excel數(shù)據(jù)導入導出研究與實現(xiàn)[J]. 智能計算機與應用, 2014, 4(5): 83-85.
熊凱. 用C#開發(fā)基于Microsoft Speech SDK的語音應用程序[J]. 計算機時代, 2007(2): 40-42.
Microsoft speech SDK 5. 4 help[EB/OL]. http://www.micro?soft.com.
https://docs.microsoft.com/zh-cn/dotnet/api/system.speech.recognition.speechrecognitionengine?view=netframework-4.8[OL]
劉春平. 基于Speech SDK的數(shù)字語音識別系統(tǒng)研究[J]. 工業(yè)控制計算機, 2012(7): 69-70.
黃旭. 基于HTK和Microsoft Speech SDK的連續(xù)語音識別系統(tǒng)的研究及實現(xiàn)[D]. 廈門大學.
吳素萍. 遞歸算法與高效算法[J]. 電腦與信息技術(shù), 2007(5): 35-37.
趙文杰, 陳磊, 鄭全普, 等. 虛擬語音會議系統(tǒng)設(shè)計與實現(xiàn)[J]. 軟件導刊, 2018, 017(1): 132-134.