郭子芊,陳江濤,麥偉健,劉佐濂
(廣州大學 電子與通信工程學院,廣東 廣州 510006)
隨著現(xiàn)代科技的不斷發(fā)展,人們對家居控制的需求不斷提高,因此智能家居終端走進大眾視野[1]。但是,傳統(tǒng)的智能家居終端并沒有依據(jù)特定使用者提供不同的個性化設置,在造成隱私問題的同時,也會破壞家居終端的使用體驗。針對這一現(xiàn)象,本文研究并設計了一種基于聲紋識別的可分配權限智能家居終端。該終端以樹莓派為開發(fā)平臺,用戶只要錄入語音信息,終端就能獲取該聲音的特征,生成特征數(shù)據(jù)。管理者可以對錄入語音的用戶進行權限的分配,每當有人對終端下達語音指令,終端就將輸入的聲音特征與數(shù)據(jù)庫中的特征數(shù)據(jù)進行比較,根據(jù)身份對使用者開放不同等級的權限。最終判斷是否執(zhí)行說話者的指令,從而保護了用戶的人身安全與家庭安全。
本智能家居終端包括各種用戶交互界面、樹莓派終端管理、服務器的聲紋識別算法、百度智能云實時語音識別和各種家居設備。其總體架構(gòu)如圖1所示。
圖1 系統(tǒng)總體架構(gòu)
本智能家居終端運用語音活性檢測技術來區(qū)別語音與噪聲,確保僅對語音信號進行處理。實際操作時,用戶先使用喚醒詞對終端進行離線喚醒,然后終端將會錄下用戶發(fā)出的操控家居的語音命令。隨后,終端會通過調(diào)用語音識別API對用戶的語音命令進行識別,獲取命令信息。同時,終端還將錄下的語音信息上傳至服務器進行聲紋識別,提取特征信息以確定用戶身份。最后,終端將結(jié)合命令信息和用戶身份,判斷該用戶是否有權限操控對應的家居,若有權限,終端會對ESP8266(WiFi模塊)發(fā)出相關信號,從而控制家居;若無權限,終端將不對命令做出反應。
本智能家居終端組成結(jié)構(gòu)包括樹莓派、Respeaker麥克風模塊、電容觸摸屏、揚聲器模塊和ESP8266模塊。其硬件模塊結(jié)構(gòu)如圖2所示。
圖2 硬件模塊結(jié)構(gòu)
本智能家居終端采用樹莓派作為核心控制模塊,具有適配多種深度學習框架的作用,功能齊全,模塊種類眾多,并且功耗不高,運算速度適中[2]。樹莓派用于進行與電容觸摸屏UI交互、接收麥克風的音頻輸入數(shù)據(jù)、向揚聲器輸出音頻數(shù)據(jù)、控制ESP8266等處理。此外,樹莓派還作為軟件平臺,完成對語音信號的處理以及分配權限。
本智能家居終端采用Respeaker麥克風模塊作為音頻輸入方式,Respeaker麥克風連接樹莓派的1~40號引腳。錄下的音頻文件將保存在樹莓派本地,為后續(xù)的語音識別、聲紋識別做準備。Respeaker麥克風模塊相比普通的USB麥克風具有降噪效果好、收音距離遠、拾音效果好等特點。
本智能家居終端采用電容觸摸屏作為用戶圖形交互界面的媒介,電容觸摸屏利用FPC線與樹莓派的DISPLAY端口相連,以獲取圖像信號。圖形交互界面使用Python標準GUI庫Tkinter進行開發(fā),用戶可通過圖形交互界面進行錄音、設置家居使用權限等操作,電容觸摸屏接收到的信息將會傳輸給樹莓派進行相應處理。
本智能家居終端采用揚聲器作為音頻放大輸出設備。揚聲器有2個接線端口,一端連接樹莓派的3.5 mm音頻輸出接口,獲取樹莓派輸出的音頻信號,另一端連接樹莓派的USB端口為揚聲器供電。
本智能家居終端采用ESP-12F WiFi模塊與家居設備進行通信。該模塊核心處理器ESP8266在較小尺寸封裝中集成了業(yè)界領先的Tensilica L106超低功耗32位微型MCU,帶有16位精簡模式,支持標準的 IEEE 802.11 b/g/n 協(xié)議和完整的TCP/IP協(xié)議棧,可以使用該模塊為現(xiàn)有的設備添加聯(lián)網(wǎng)功能[3]。當ESP8266模塊上電并接入預先設定的局域網(wǎng)后,通過串口反饋當前的IP信息。樹莓派可以通過訪問IP加上預先編寫的命令來控制相關引腳的狀態(tài),從而控制智能家居的開關狀態(tài)。
本智能家居終端軟件組成包括語音活性檢測、離線喚醒、語音識別和聲紋識別。其軟件流程如圖3所示。
圖3 軟件流程
在實際使用中,對所有的語音信號進行實時處理顯然不合理。因此,為了節(jié)省硬件軟件資源,需要對語音信號進行活性檢測,以確保輸入檢測的語音信號都是有用信息。當前實現(xiàn)VAD的方法有許多,最簡單的為幀幅度,幀幅度的計算方法簡單,但如果背景聲音較大,則會對效果造成的影響較大。還有幀能量、短時過零率分析或能量檢測與滑動窗口結(jié)合的方法,并且隨著近幾年人工智能的火熱發(fā)展,神經(jīng)網(wǎng)絡的方法也開始出現(xiàn)[4]。
以上幾種方法中,神經(jīng)網(wǎng)絡能夠帶來的效果最好,但是一來在智能家居終端上進行大量的計算時速度緩慢,二來如果選擇上傳到云端,則浪費了終端自身的計算資源。因此,本項目中采用短時能量以及短時過零率結(jié)合雙門限的方法。短時能量計算簡單,對聲音具有較高的對比度,并且短時過零率在沒有噪聲的位置表現(xiàn)良好,集合兩者優(yōu)點以及雙門限的約束特性,不僅能夠減少錯誤率,還能降低計算資源的耗費[5-6]。
3.1.1 語音數(shù)據(jù)預處理
(1)直流去除。如果需要對語音進行頻譜分析,直流的頻譜泄露會嚴重影響低頻譜的分析,并且直流一般不隨時間變化,不反應信號的趨向性。
(2)加窗處理。為后續(xù)的傅里葉變化做準備,使得全局更加連續(xù),避免出現(xiàn)吉布斯效應,并且使得沒有周期性的語音信號呈現(xiàn)出周期函數(shù)的部分特征。
在這里采用Hammiing窗進行加窗,Hamming的定義如下:
3.1.2 VAD實現(xiàn)
(1) 通 過 提 取 Short Time Energy(STE) 和 Cross Counter(ZCC)與設定閾值對比,從而判斷是否為語音信號。
(2)將語音信號分幀時取一幀20 ms,此處輸入信號采樣率為8 kHz。因此,每一幀長度為160 Samples。然后,計算幀內(nèi)信號的平方和,得到STE。
(3)同樣將步驟(2)中的信號幀內(nèi)所有Samples平移1,再對應點做乘積,符號為負的說明此處過零,只需將幀內(nèi)所有負數(shù)乘積數(shù)目求出,就得到該幀的過零率(ZCC)。
(4)通過訓練數(shù)據(jù)得到2個特征的門限。
(5)分別對短時能量與過零率設置2個門限值,計算每一幀的短時能量與過零率,只有當短時能量與過零率均超過門限值時才判定語音開始。
離線喚醒是語音交互的重要入口,主要的難點在于能否平衡快速并且準確地識別與低功耗要求之間的矛盾,此外,離線喚醒的實時性要求喚醒系統(tǒng)需要一直處于運行中。例如專門為行動不便者設計的穿戴類智能設備,這類產(chǎn)品的要點就是需要平衡快速高效的響應和智能設備要求的低功耗與高效之間的平衡。而本智能家居終端為USB供電產(chǎn)品,非電池供電類產(chǎn)品,因此可在犧牲一定功耗的基礎上提升離線喚醒詞的效率。本智能家居終端使用開源的喚醒詞檢測引擎Snowboy,并且Snowboy支持自定義喚醒詞,可對用戶設定的訓練詞進行模型訓練,達到快速準確喚醒的效果。Snowboy具有不需要連接網(wǎng)絡、耗費資源少、高度可定制等優(yōu)點[7]。
構(gòu)建喚醒詞的流程如下:
(1)在終端上錄制3份喚醒詞的錄音。
(2)上傳到Snowboy官網(wǎng)進行訓練,并按需求調(diào)整靈敏度。
(3)將訓練好的喚醒詞模型下載到終端上。
例如:需要在樹莓派終端上構(gòu)建關鍵詞“小白”,首先在樹莓派上安裝好Snowboy的相關依賴后,使用make命令編譯安裝Snowboy。然后在該終端上錄制3次關鍵詞“小白”,錄制時需要處于相對安靜的環(huán)境,錄制文件保存為wav文件。最后登錄Snowboy官網(wǎng),將3個錄音文件上傳并等待訓練完畢,在該終端上進行測試并根據(jù)實際情況調(diào)整靈敏度,然后將訓練好的pmdl模型文件下載到終端中,并替換原來的模型。至此,喚醒詞已被更改為“小白”。
在實際使用中,需要將用戶輸入的語音命令轉(zhuǎn)換為文字,然后提取關鍵詞,智能家居終端才能匹配到相應的指令[8]。因此,需要做到快速準確地識別和轉(zhuǎn)換用戶的語音指令。
本智能家居終端實現(xiàn)語音識別流程如下:
(1)在終端被喚醒時,進行聲音錄制,使用VAD減少需要處理的聲音數(shù)據(jù)。
(2)對聲音進行噪聲去除。
(3)調(diào)用百度智能云的快速語音識別端口,上傳錄音數(shù)據(jù),并接收返回結(jié)果。
(4)判斷是否有命令詞在返回結(jié)果中,并執(zhí)行指令。
例如:在用“小白”喚醒詞喚醒智能終端,終端發(fā)出響應音后,終端開始錄音。說出命令“開客廳燈”,終端將錄音數(shù)據(jù)進行VAD與降噪處理,上傳到百度云語音識別API端口,并接收返回結(jié)果,得到語音識別返回結(jié)果“開客廳燈”,查詢功能插件“燈”,并查詢到“開”“客廳”兩個關鍵詞。
為實現(xiàn)判斷不同的說話人,需要對聲音進行身份識別。考慮到安全性以及識別速度,本智能家居終端使用梅爾倒譜系數(shù)(MFCC)對語音信息進行特征提取。由于MFCC與線性的倒譜分析相比,突出優(yōu)點是不依賴語音產(chǎn)生模型,即能夠更好地提取與文本無關的聲紋特征,更加符合本智能家居終端不受特定命令約束,從而實現(xiàn)進行聲紋識別的需求[9]。終端在進行特征提取后再根據(jù)相關的特征匹配算法對數(shù)據(jù)庫里的身份進行匹配驗證。
特征提取就是要盡可能取出或減少語音信號中與識別無關的信息的影響,減少后續(xù)識別階段需要處理的數(shù)據(jù)量,并且從語音信號中提取能夠表征人的基本特征之外,該特征必須能夠有效地區(qū)分不同的說話人,且對相同說話人的變化保持相對穩(wěn)定[10]。
語音特征參數(shù)(MFCC)提取過程包括:
(1)預加重。將語音信號通過一個高通濾波器,用于減少語音信號中與識別無關的信息,減少后續(xù)識別階段的數(shù)據(jù)量,通過提升高頻部分,信號的頻譜變得平坦。同時,消除發(fā)聲過程中嘴唇和聲帶的影響,補償語音信號受到發(fā)音系統(tǒng)所抑制的高頻部分。
(2)分幀。先將256個采樣點集合成一個觀測單位,稱為幀。由于傅里葉變換要求的輸入是平穩(wěn)的,通過幀處理,聲音信號變?yōu)橐粠粠钠椒€(wěn)信號,從而在進行傅里葉變換時得到各個頻率成分的分布。
(3)加窗。將每一幀乘以漢明窗,增加幀左端和右端的連續(xù)性,減少吉布斯效應,使得全局更為連續(xù)。
(4)快速傅里葉變換。每一幀經(jīng)過快速傅里葉變換,得到在頻譜上的能量分布。
語音信號的DFT可由以下公式得到:
能量分布公式為:
包含噪聲的語音信號的頻譜如圖4所示。
圖4 包含噪聲的語音信號的頻譜
(5)三角帶通濾波。其可以使頻譜平滑化,消除諧波的作用,突顯語音的共振峰,并且降低運算量。
(6)離散余弦變換(DCT)。計算每個濾波器組輸出的對數(shù)能量,然后代入離散余弦變換,求出L階的Mel-scale Cepstrum參數(shù)。
線性頻率轉(zhuǎn)換到MFCC公式:
(7)動態(tài)查分參數(shù)的提取。標準的倒譜參數(shù)MFCC只反映了語音參數(shù)的靜態(tài)特性,語音的動態(tài)特性可以用這些靜態(tài)特征的差分譜來描述。語音特征提取效果圖如圖5所示。
圖5 語音特征提取效果圖
本智能家居終端實現(xiàn)聲紋識別流程如下:
(1)終端被喚醒時,進行聲音錄制,使用VAD減少需要處理的聲音數(shù)據(jù)。
(2)對聲音進行噪聲去除。
(3)調(diào)用服務器的聲紋識別端口,上傳錄音數(shù)據(jù),并接收返回結(jié)果。
(4)判斷是否為聲紋識別庫中已錄入身份,并判斷該人物身份是否有權限執(zhí)行該指令。
本文利用2個不同權限的用戶對智能家居終端進行測試,測試結(jié)果見表1所列。
表1 測試結(jié)果
本文使用聲紋識別技術開發(fā)了一種可分配家居使用權限的智能家居終端。用戶可以通過終端錄入語音信息,提取聲紋特征信息,然后為不同的聲紋特征信息分配家居的控制權限,只有擁有該家居使用權限的其他用戶才能通過語音操控家居。經(jīng)過實際測試,本智能家居終端功能符合要求,對智能家居使用安全有重要意義。