趙文杰 薛永奎 陳磊 劉鎮(zhèn)瑜 霍爍爍
摘? 要: 為解決軍隊(duì)在執(zhí)行使用密語口令指揮的試驗(yàn)任務(wù)中,缺少對口令實(shí)時(shí)翻譯顯示的問題,將語音識別技術(shù)運(yùn)用到密語口令翻譯顯示系統(tǒng)中,利用微軟語音識別引擎對口令語音進(jìn)行識別,根據(jù)口令對應(yīng)的明語,將識別內(nèi)容進(jìn)行切詞和翻譯,并將翻譯后的明文內(nèi)容通過網(wǎng)絡(luò)發(fā)送至顯示端后投影至試驗(yàn)指揮所大屏,為指揮大廳內(nèi)觀摩人員提供試驗(yàn)參與裝備、實(shí)施過程及結(jié)果等重要內(nèi)容的顯示,設(shè)計(jì)了一個(gè)密語口令語音實(shí)時(shí)識別翻譯系統(tǒng),實(shí)現(xiàn)了密語口令語音到明文顯示。
關(guān)鍵詞: 語音識別;密語口令;Speech SDK;口令識別
中圖分類號: TP391.41 ???文獻(xiàn)標(biāo)識碼: 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? 引言
在軍隊(duì)試驗(yàn)任務(wù)的組織實(shí)施中,試驗(yàn)指揮是通過密語口令下達(dá)試驗(yàn)命令的,且指揮口令以密語形式進(jìn)行傳播的。在試驗(yàn)任務(wù)實(shí)施過程中,指揮口令的翻譯顯示可以使指揮大廳內(nèi)觀摩人員掌握參試裝備、試驗(yàn)過程、進(jìn)度和結(jié)果等重要內(nèi)容,是試驗(yàn)指揮顯示中一個(gè)十分重要的要素。
當(dāng)前試驗(yàn)任務(wù)中對僅為指揮大廳內(nèi)部人員提供密語口令表,雖然可以根據(jù)此表對試驗(yàn)中的口令進(jìn)行翻譯,但是由于試驗(yàn)過程中指揮員口令的下達(dá)與自他參與者的回復(fù)都是十分迅速和頻繁的,指揮大廳內(nèi)除指揮員外的其他人對通過口令了解試驗(yàn)信息是十分困難的,這對試驗(yàn)任務(wù)組織實(shí)施和觀摩造成很大不便。隨著語音技術(shù)的發(fā)展,語音識別技術(shù)已進(jìn)入工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務(wù)、消費(fèi)電子產(chǎn)品等各個(gè)領(lǐng)域[1]。但是由于軍用數(shù)字口令發(fā)音與正常數(shù)字發(fā)音不同,使通用語音識別程序不能達(dá)到軍用口令識別的效果,本文主要工作是運(yùn)用語音識別技術(shù),構(gòu)建了一個(gè)密語口令識別翻譯系統(tǒng),實(shí)時(shí)識別指揮語音口令并翻譯為明文,而后再通過網(wǎng)絡(luò)投影至指揮大廳觀摩屏進(jìn)行實(shí)時(shí)顯示,為試驗(yàn)指揮大廳內(nèi)部人員提供參試裝備、試驗(yàn)實(shí)時(shí)進(jìn)度、結(jié)果等的顯示說明。
1 ?系統(tǒng)設(shè)計(jì)
1.1? 需求分析
正文內(nèi)容。在試驗(yàn)任務(wù)中,一般試驗(yàn)指揮人員是在指揮大廳內(nèi)通過調(diào)度、電臺等通訊設(shè)備進(jìn)行指揮的,由于試驗(yàn)任務(wù)的復(fù)雜性,可能有多個(gè)試驗(yàn)指揮人員同時(shí)指揮不同的試驗(yàn)科目,參與的通信設(shè)備也可能有調(diào)度和多部電臺同時(shí)使用,因此本系統(tǒng)需要同時(shí)具備多個(gè)口令語音識別的客戶端同時(shí)運(yùn)行,對翻譯后的內(nèi)容應(yīng)按時(shí)間順序進(jìn)行匯總顯示。因此本系統(tǒng)設(shè)計(jì)為可根據(jù)需要同時(shí)運(yùn)行在多個(gè)計(jì)算機(jī)上的口令識別翻譯后端軟件和一個(gè)接收匯總翻譯內(nèi)容的顯示前端軟件。該系統(tǒng)結(jié)構(gòu)圖如圖1所示。
1.2 ?功能設(shè)計(jì)
顯示前端軟件的主要功能為將接收到后端軟件發(fā)送的信息進(jìn)行解析、顯示和存儲。
口令識別翻譯后端軟件功能如下:
(1)加載密語庫。加載試驗(yàn)口令的密語庫,該庫定義了口令和其對應(yīng)的明文解釋,是系統(tǒng)進(jìn)行口令翻譯的依據(jù);
(2)語音口令識別。獲取計(jì)算機(jī)系統(tǒng)外設(shè)語音拾取設(shè)備的語音信息,并對其進(jìn)行識別;
(3)口令翻譯。對識別后的口令語句進(jìn)行切詞,并依據(jù)密語庫進(jìn)行明文翻譯;
(4)網(wǎng)絡(luò)發(fā)送。將翻譯內(nèi)容通過試驗(yàn)網(wǎng)絡(luò)發(fā)送至顯示前端;
(5)信息存儲。對前端地址以及發(fā)送的數(shù)據(jù)等信息進(jìn)行存儲。
2 ?系統(tǒng)關(guān)鍵模塊實(shí)現(xiàn)
2.1? 加載密語庫
密語庫定義了口令和其對應(yīng)的明文解釋,是系統(tǒng)進(jìn)行口令翻譯的依據(jù)。該庫由試驗(yàn)師根據(jù)試驗(yàn)需要編訂,主要用來存儲密語口令的口令和明語信息,包括參與試驗(yàn)裝備代號和名稱、試驗(yàn)實(shí)施動作、裝備工作方式、結(jié)果上報(bào)信息等。根據(jù)實(shí)際需要采用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)的支持,不支持離線,對于對保密要求嚴(yán)格的軍隊(duì)來說,都不是最佳選擇。
Microsoft Speech SDK是一套語音應(yīng)用程序開發(fā)的軟件開發(fā)資源包,它完全基于COM標(biāo)準(zhǔn)開發(fā),底層協(xié)議以COM組件的形式完全獨(dú)立于應(yīng)用程序?qū)樱_發(fā)人員可以方便使用資源包中的資源開發(fā)語音識別和語音合成應(yīng)用程序,而不必糾結(jié)于復(fù)雜的語音技術(shù)[3],而且Microsoft Speech SDK完全支持簡體中文語音系統(tǒng),且其工作過程可以完全離線,不需要連接互聯(lián)網(wǎng),因此,對于有保密要求的軍隊(duì)而言,是一個(gè)理想的開發(fā)工具。
其中,語音識別有識別引擎Recognition Engine負(fù)責(zé),語音合成由語音合成引擎TTS Engine負(fù)責(zé),結(jié)構(gòu)圖如圖2所示。
(2)環(huán)境配置
系統(tǒng)在Visual Studio 2010 C#開發(fā)環(huán)境下,使用Windows7自帶的windows Speech SDK 5.4版本的開發(fā)包[4],項(xiàng)目創(chuàng)建后,首先需要在解決方案管理器中添加對SDK開發(fā)包的COM組件的引用,如下圖2所示。
添加引用后在需要調(diào)用語音識別引擎的代碼頭部添加語音識別命名空間的using System.Speech. Recognition引用指令,在需要調(diào)用語音合成引擎的代碼頭部添加語音合成命名空間的using System. Speech.Synthesis引用指令[5]。
(3)語音識別分析
調(diào)用Speech SDK中語音識別引擎進(jìn)行口令語音識別過程如下圖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進(jìn)行資源釋放[6]。
(4)口令識別語法構(gòu)建
在軍隊(duì)任務(wù)指揮中,口令主要由0-9的十個(gè)數(shù)字組合而成,但軍語對十個(gè)數(shù)字的口令發(fā)音與正常普通話發(fā)音存在差異(區(qū)別見表1),因此本系統(tǒng)的語音識別任務(wù)為對十個(gè)數(shù)字口令軍語發(fā)音的組合進(jìn)行識別[7]。
識別語法構(gòu)建有兩種方式,一種是在XML文件中定義,一種則以編程方式生成[8]。密語口令中,每一句口令均由0-9的十個(gè)數(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)建的語法約束僅滿足識別單個(gè)數(shù)字的要求,本文要求識別可變長度的數(shù)字串,則需要調(diào)用GrammarBuilder類中的重載函數(shù)public void Append (GrammarBuilder builder, int minRepeat, int maxRepeat),其中builder為已生成識別單個(gè)數(shù)字的語法元素,minRepeat和maxRepeat分別表示必須發(fā)生構(gòu)成匹配的語法builder的最小次數(shù)和最大次數(shù),為滿足可變長度的要求,此處minRepeat必須設(shè)定為0,maxRepeat設(shè)定為1。根據(jù)實(shí)際需要,最長識別長度設(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ī)則后,為語法的識別事件添加一個(gè)處理程序,主要代碼如下:
numGrammar.SpeechRecognized + = new Event?Handler
void recognizer_Result(object sender, Speech?RecognizedEventArgs e)
{string result;result = e.Result.Text;//得到識別結(jié)果}
經(jīng)過以上識別過程,通過麥克風(fēng)拾取的語音信號便轉(zhuǎn)換為文字信息,再根據(jù)表1中數(shù)字0-9發(fā)音對比表將識別結(jié)果中字符進(jìn)行替換,將口令語音字符替換為數(shù)字字符,如將“幺”替換為“1”、“兩”替換為“2”依次類推,由此得到一串類似于“01102”的識別結(jié)果。
2.3 ?口令翻譯
通過語音識別得到一串?dāng)?shù)字組合的識別結(jié)果后,需要根據(jù)口令庫對識別結(jié)果進(jìn)行切詞、翻譯。
切詞是使用遞歸算法[9]將字符串按字符順序拆分為多個(gè)字符串子集,假如各子集在密語庫中均有對應(yīng)的翻譯,那么該拆分組合便是一次成功的切詞。如將“01102”根據(jù)密語庫中的口令切詞為“01,102”(其中“01”表示“裝備1”,“102”表示“關(guān)機(jī)”),由此得出“01102”的明文為“裝備1關(guān)機(jī)”的指令。切詞成功后,依據(jù)密語口令庫進(jìn)行翻譯。
2.4? 網(wǎng)絡(luò)發(fā)送與信息存儲
網(wǎng)絡(luò)發(fā)送主要是講口令識別端將識別結(jié)果及翻譯內(nèi)容通過網(wǎng)絡(luò)發(fā)送至前端,系統(tǒng)采用Windows操作系統(tǒng)提供的網(wǎng)絡(luò)套接字(SOCKET)接口實(shí)現(xiàn)實(shí)時(shí)雙端網(wǎng)絡(luò)通信??紤]到系統(tǒng)需要無差錯(cuò)可靠的傳輸要求以及TCP面向連接的可靠性特點(diǎn),本系統(tǒng)使用TCP[10]傳輸口令及相關(guān)信息。
信息存儲主要是口令識別后端在向顯示前端發(fā)送數(shù)據(jù)時(shí)將發(fā)送內(nèi)容同步進(jìn)行存儲,存儲內(nèi)容包括發(fā)送對象、內(nèi)容及時(shí)間信息等,存儲方式采用同2.1中同樣的調(diào)用COM組件的方式寫入EXCEL文件[3],以便于根據(jù)保存的口令及翻譯內(nèi)容在需要時(shí)復(fù)盤整個(gè)任務(wù)口令的執(zhí)行過程。
3? 識別結(jié)果分析
經(jīng)過對五次試驗(yàn)1020條試驗(yàn)密語口令進(jìn)行識別測試,測試地點(diǎn)為有一定人聲為噪音背景的辦公室,麥克風(fēng)為得勝PCM-5550手持錄音麥克風(fēng),結(jié)果顯示:識別正確974條,識別正確率為95.5%;識別錯(cuò)誤46條,識別錯(cuò)誤率為4.5%。
經(jīng)過統(tǒng)計(jì)發(fā)現(xiàn)錯(cuò)誤集中出現(xiàn)在以下幾處:11(幺幺)識別為16(幺六)、55(五五)識別為5(五)、9(勾)識別為95(勾五),且在系統(tǒng)啟動識別后前十條識別中識別錯(cuò)誤率最高。分析主要原因除了系統(tǒng)語音識別算法自身原因外,對測試人發(fā)音是否標(biāo)準(zhǔn)也有很大關(guān)系,因此,若要提高識別正確率,首先發(fā)音應(yīng)盡量標(biāo)準(zhǔn)、無拖音,其次密語庫設(shè)計(jì)中應(yīng)減少重復(fù)數(shù)字的出現(xiàn)。
4? 結(jié)語
本文對語音識別技術(shù)應(yīng)用于軍用密語口令識別的可能性進(jìn)行了研究,分析了密語口令翻譯系統(tǒng)的功能需求,研究了微軟Speech SDK里語音應(yīng)用程序接口的結(jié)構(gòu)和工作原理,設(shè)計(jì)和實(shí)現(xiàn)了軍用密語口令識別翻譯系統(tǒng),并對系統(tǒng)進(jìn)行了識別測試,識別正確率達(dá)到95.5%,對識別錯(cuò)誤的口令進(jìn)行統(tǒng)計(jì)并分析了識別錯(cuò)誤的原因,為減少識別錯(cuò)誤率提出了發(fā)音應(yīng)標(biāo)準(zhǔn)、密語庫中應(yīng)減少重復(fù)數(shù)字口令出現(xiàn)等要求。
參考文獻(xiàn)
高清倫, 譚月輝. 語音識別技術(shù)在軍用話務(wù)臺中的應(yīng)用模擬系統(tǒng)研究[J]. 河北工業(yè)科技, 2007(5): 272-274.
林鳴霄. 基于SpeechSDK的語音識別技術(shù)在三維仿真中的應(yīng)用[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2011, 21(11): 160-162.
蔡小艷, 李龍騰, 葛玉,等. 基于C#的Excel數(shù)據(jù)導(dǎo)入導(dǎo)出研究與實(shí)現(xiàn)[J]. 智能計(jì)算機(jī)與應(yīng)用, 2014, 4(5): 83-85.
熊凱. 用C#開發(fā)基于Microsoft Speech SDK的語音應(yīng)用程序[J]. 計(jì)算機(jī)時(shí)代, 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è)控制計(jì)算機(jī), 2012(7): 69-70.
黃旭. 基于HTK和Microsoft Speech SDK的連續(xù)語音識別系統(tǒng)的研究及實(shí)現(xiàn)[D]. 廈門大學(xué).
吳素萍. 遞歸算法與高效算法[J]. 電腦與信息技術(shù), 2007(5): 35-37.
趙文杰, 陳磊, 鄭全普, 等. 虛擬語音會議系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件導(dǎo)刊, 2018, 017(1): 132-134.