程海波,歐陽(yáng)宏基
(咸陽(yáng)師范學(xué)院 計(jì)算機(jī)學(xué)院,陜西 咸陽(yáng) 712000)
隨著經(jīng)濟(jì)和科技的飛速發(fā)展,各項(xiàng)新型技術(shù)取得了或多或少的進(jìn)步。其中,在《互聯(lián)網(wǎng)技術(shù)司法應(yīng)用白皮書》中提到的語(yǔ)音識(shí)別技術(shù)近些年備受人們關(guān)注。從國(guó)外的Audry系統(tǒng),到大眾所熟知的Siri、小度、高德地圖語(yǔ)音導(dǎo)航,以及科大訊飛的方言識(shí)別等均發(fā)展迅速。除此之外,語(yǔ)音識(shí)別技術(shù)還在日常的生活,如醫(yī)療、通信、工業(yè)等領(lǐng)域取得了不錯(cuò)的成就。就目前發(fā)展的形勢(shì)來(lái)看,語(yǔ)音識(shí)別仍然具有較高的開發(fā)價(jià)值。本文主要以多媒體技術(shù)及網(wǎng)絡(luò)技術(shù)為基礎(chǔ),結(jié)合Linux平臺(tái),通過(guò)ALSA和科大訊飛的SDK進(jìn)行音頻錄制、播放等功能,進(jìn)而實(shí)現(xiàn)語(yǔ)音識(shí)別。
語(yǔ)音識(shí)別技術(shù)也稱自動(dòng)語(yǔ)音識(shí)別(Automatic Speech Recognition, ASR),這是讓語(yǔ)音識(shí)別設(shè)備通過(guò)識(shí)別、學(xué)習(xí)和理解,將目標(biāo)聲音的內(nèi)容轉(zhuǎn)換為計(jì)算機(jī)可讀的數(shù)據(jù)輸入(如:文字或命令)的一項(xiàng)高級(jí)技術(shù)。同時(shí),它也屬于一門復(fù)雜的交叉學(xué)科,涉及的學(xué)科包括:聲學(xué)、心理學(xué)、語(yǔ)言學(xué)、概率論、人工智能、信號(hào)處理、信息理論、模式識(shí)別等。
語(yǔ)音識(shí)別的原理是將語(yǔ)音轉(zhuǎn)換成用戶能讀懂的文字。其采用模式識(shí)別作為基本框架,分為數(shù)據(jù)預(yù)處理、特征提取、模型訓(xùn)練、測(cè)試應(yīng)用四部分,其功能模塊和原理如圖1所示。
圖1 語(yǔ)音識(shí)別原理模塊
語(yǔ)音識(shí)別一般可分為兩個(gè)模塊,訓(xùn)練模塊和識(shí)別模塊。訓(xùn)練模塊主要通過(guò)對(duì)聲音的學(xué)習(xí),將學(xué)習(xí)結(jié)果構(gòu)成語(yǔ)音庫(kù)并存儲(chǔ),在識(shí)別過(guò)程中將當(dāng)前聽到的聲音在語(yǔ)音庫(kù)中查找相應(yīng)語(yǔ)義或詞義。識(shí)別模塊依據(jù)當(dāng)前主流的語(yǔ)音識(shí)別算法,解析接收的聲音信號(hào)特征參數(shù)(即特征提?。凑占榷ǖ呐袛鄺l件和準(zhǔn)則與語(yǔ)音庫(kù)的數(shù)據(jù)進(jìn)行比較,最終通過(guò)對(duì)比得出語(yǔ)音識(shí)別結(jié)果。
高級(jí) Linux 聲音架構(gòu)(Advanced Linux Sound Architecture,ALSA)是一個(gè)完全開放的音頻驅(qū)動(dòng)程序集,它主要支持Linux操作系統(tǒng)中的樂(lè)器數(shù)字化接口(MIDI)及聲頻。在Linux 2.6內(nèi)核版本之后,ALSA被默認(rèn)為聲音子系統(tǒng),而之前2.4版本所使用的開放聲音系統(tǒng)(OSS)則被舍棄。
ALSA具有以下特點(diǎn):
(1)支持各種型號(hào)的聲效卡和聲頻接口;
(2)支持舊的開放聲音系統(tǒng)(OSS)API,具有OSS程序二進(jìn)制兼容性;
(3)模塊化設(shè)計(jì);
(4)支持線程安全和SMP;
(5)提供用戶空間庫(kù)(lib)以簡(jiǎn)化應(yīng)用程序的編程并提供更高級(jí)別的功能。
急性冠脈綜合征是臨床上較為常見的心血管疾病之一,同時(shí)也是冠張動(dòng)脈粥樣硬化性心臟病之一,通常見于老年人群[3];曾有學(xué)者研究表明:急性冠脈綜合征誘發(fā)因素與吸煙、高血壓、糖尿病、高脂血癥及冠心病家族史等具有密切相關(guān)聯(lián)系,患者可伴有發(fā)作性胸痛、胸悶等一系列臨床表現(xiàn),若不實(shí)施有效方法進(jìn)行治療,能夠誘發(fā)心律失常、心衰、猝死等并發(fā)癥,繼而危及患者的生命安全,且進(jìn)一步降低生存質(zhì)量[4]。
由于ALSA很好地兼容了OSS,且其內(nèi)含有更加友好的編程接口,因此ALSA對(duì)于開發(fā)人員而言無(wú)疑是更好的選擇。ALSA系統(tǒng)主要包含了驅(qū)動(dòng)包(Driver)、開發(fā)包(libs)、開發(fā)包插件(libplugins)、設(shè)置管理工具包(utils)、其他聲音相關(guān)處理小程序包(tools)、特別聲頻固件包(firmware)、OSS接口兼容模擬層工具(OSS)等共7個(gè)子包。其中,Driver包是開發(fā)人員進(jìn)行開發(fā)所必備的。
Driver包中含有一些內(nèi)核驅(qū)動(dòng)程序,其高達(dá)數(shù)十萬(wàn)行的內(nèi)容主要包括一些公共代碼及硬件關(guān)聯(lián)代碼;libs包括一些函數(shù)庫(kù),主要用來(lái)支持應(yīng)用程序,使用最多的是asoundlib.h(頭文件)以及l(fā)ibasound.so(共享庫(kù));而utils主要以ALSA為基礎(chǔ),用來(lái)控制聲效卡的應(yīng)用程序,如alsactl(聲效卡的高級(jí)設(shè)置)、record(音頻錄制)、aplay(音頻播放)等。
目前,ALSA主要給用戶空間提供了以下幾個(gè)接口:信息接口(Information Interface,/proc/asound)、控制接口(Control Interface,/dev/snd/controlCX)、混音器接口(Mixer Interface,/dev/snd/mixerCXDX)、PCM接口(PCM Interface,/dev/snd/pcmCXDX)、Raw 迷笛接口(Raw MIDI Interface,/dev/snd/midiCXDX)、音序器接口(Sequencer Interface,/dev/snd/seq)、定時(shí)器接口(Timer Interface,/dev/snd/timer)。
SDK(軟件開發(fā)工具包)是為創(chuàng)建應(yīng)用軟件而集成的軟件工具包,一般包含有專屬的軟件包、框架、操作系統(tǒng)以及硬件平臺(tái)等。科大訊飛SDK是科大訊飛基于多種功能集合而來(lái)的工具包。
當(dāng)開發(fā)人員要實(shí)現(xiàn)相應(yīng)語(yǔ)音識(shí)別的功能時(shí),就需要調(diào)用相應(yīng)的SDK,以科大訊飛離線語(yǔ)音合成功能為例。
首先,下載需要使用的科大訊飛SDK包,用戶進(jìn)入訊飛開放平臺(tái)頁(yè)面(https://www.xfyun.cn)注冊(cè)賬號(hào)成為開發(fā)者,注冊(cè)成功后,創(chuàng)建一個(gè)專屬于自己的控制臺(tái)。創(chuàng)建完成后,進(jìn)入SDK下載中心,選擇“應(yīng)用”這一欄并選擇自己的控制臺(tái),平臺(tái)選擇Linux,之后選擇需要的服務(wù),此外選擇離線語(yǔ)音合成。完成以上步驟后,點(diǎn)擊SDK下載,便可以將SDK文件下載到用戶的電腦上,在Linux環(huán)境下實(shí)現(xiàn)語(yǔ)音合成。
(1)將訊飛包放入Linux系統(tǒng)的家目錄中;
(2)創(chuàng)建一個(gè)工作目錄,將訊飛包放入解壓:
mkdir /home/llx/xunfei;
mv Linux_aisound_exp1227_35146063.zip home/gec/xunfei;
cd /home/llx/xunfei;
unzip Linux_aisound_exp1227_35146063.zip;
(3)配置科大訊飛庫(kù)文件:
sudo cp /home/llx/xunfei/libs/x64/* /lib;
完成庫(kù)文件的搭建后,可以看到訊飛包中有關(guān)各文件的說(shuō)明,見表1所列。
表1 訊飛包各文件說(shuō)明
了解清楚各文件后,用戶便可以使用科大訊飛庫(kù)的代碼:
經(jīng)過(guò)如上步驟便可基本實(shí)現(xiàn)調(diào)用SDK。但此步驟僅僅只能演示科大訊飛的示例代碼,如果需要修改科大訊飛的源碼文件進(jìn)行自定義合成語(yǔ)音,則需以下步驟:
(1)集成訊飛SDK。用戶選擇需要的功能,將下載的SDK包進(jìn)行整合并壓縮,壓縮包名為XF_SDK.tar.bz。接著,壓縮包放入Linux系統(tǒng)的目錄中解壓(需要使用tar命令),解壓完成后進(jìn)入XF_SDK文件夾中的源碼目錄對(duì)源碼進(jìn)行編譯。
(2)創(chuàng)建管道文件。創(chuàng)建2個(gè)管道文件分別用于控制訊飛服務(wù)器的識(shí)別開始和數(shù)據(jù)返回:
(3)執(zhí)行訊飛識(shí)別語(yǔ)音應(yīng)用。進(jìn)入XF_SDK下的bin目錄執(zhí)行./asr_offline_sample(asr_offline_sample是語(yǔ)音識(shí)別程序)程序。
(4)開啟識(shí)別服務(wù)器后,需要控制pipe與pipeg管道文件。打開新終端并輸入 :echo "star" > pipeg。
(5)應(yīng)用實(shí)例。使用者發(fā)出聲音如:“你好”。數(shù)據(jù)接收端便會(huì)出現(xiàn)圖2所示的結(jié)果。
圖2 語(yǔ)音識(shí)別結(jié)果
若要修改語(yǔ)音識(shí)別命令,則需要修改bin目錄下的call.bnf文件。
語(yǔ)音識(shí)別技術(shù)復(fù)雜且使用面廣,隨著語(yǔ)音識(shí)別技術(shù)的發(fā)展,越來(lái)越多的問(wèn)題都將被提出和解決。本文主要結(jié)合Linux平臺(tái),使用ALSA和訊飛SDK,初步實(shí)現(xiàn)了Linux環(huán)境下語(yǔ)音識(shí)別的部分基礎(chǔ)功能。下一步的研究方向是以此次經(jīng)驗(yàn)為基礎(chǔ),結(jié)合實(shí)際情況,實(shí)現(xiàn)Linux環(huán)境下語(yǔ)音識(shí)別技術(shù)的更多功能并將其與嵌入式平臺(tái)結(jié)合。
物聯(lián)網(wǎng)技術(shù)2022年10期