邊蓓蓓 張曉賢
摘? 要:語音識(shí)別技術(shù)越來越多地被應(yīng)用在工業(yè)、家電、通信、醫(yī)療、汽車電子等領(lǐng)域,其中關(guān)鍵詞識(shí)別是識(shí)別已知的簡短詞語。為了減少在線語音監(jiān)聽設(shè)備資源損耗,搭建了多關(guān)鍵詞離線語音喚醒模塊,基于Snowboy語音檢測引擎,以Raspberry Pi 3B+為核心控制器,采用Python開發(fā)環(huán)境,實(shí)現(xiàn)離線語音熱詞的檢測,支持多關(guān)鍵詞喚醒。有效減少資源損耗,同時(shí)保護(hù)數(shù)據(jù)安全。適合各種語音識(shí)別、語音喚醒、語音控制等嵌入式系統(tǒng)。
關(guān)鍵詞:語音喚醒;離線喚醒;多關(guān)鍵詞;Snowboy
Abstract:Speech recognition technology is more and more used in the fields of industry,home appliances,communication,medical treatment,automotive electronics,etc.,in which keyword recognition is to recognize known short words. In order to reduce the resource loss of online voice monitoring equipment,a multi-keyword offline voice wake-up module is built. Based on Snowboy voice detection engine,Raspberry Pi 3B + as the core controller,and Python development environment is used to realize the detection of offline voice hot words,supporting multi-keyword wake-up. Effectively reduce resource loss and protect data security at the same time. It is suitable for various embedded systems such as speech recognition,speech wake-up,speech control,etc.
Keywords:voice wake-up;offline wake-up;multi-keyword;Snowboy
0? 引? 言
利用特殊指定的喚醒詞來喚醒終端設(shè)備,使設(shè)備從休眠狀態(tài)切換到工作狀態(tài)的過程是語音喚醒,通用語音訓(xùn)練一個(gè)基本模型,用喚醒詞錄音訓(xùn)練一個(gè)命令模型,喚醒的過程是用錄音數(shù)據(jù)計(jì)算二者的匹配度,如果達(dá)到訓(xùn)練的命令詞模型的閾值,就實(shí)現(xiàn)喚醒。目前流行的Google、百度等語音喚醒技術(shù)是依賴互聯(lián)網(wǎng),基于深度學(xué)習(xí)方法實(shí)現(xiàn)的,多數(shù)的語音識(shí)別解決方案中,運(yùn)行完整的ASR執(zhí)行熱詞檢測,此時(shí),設(shè)備將監(jiān)視ASR錄音中的特定熱詞,但是ASR消耗大量設(shè)備和帶寬資源,而且,當(dāng)使用云解決方案時(shí),數(shù)據(jù)安全也得不到保證。
Snowboy是一款輕量級(jí)語音熱詞檢測引擎,自主定制熱詞,支持Linux、Android、Mac OS等操作系統(tǒng),實(shí)現(xiàn)離線實(shí)時(shí)監(jiān)聽,在Respberry Pi 3上運(yùn)行最多消耗不多于5%的CPU,內(nèi)存使用方面,PortAudio Python包裝器一般使用大約10 MB的RAM,獨(dú)立的C二進(jìn)制文件使用的內(nèi)存不到2 MB。
1? 概述
離線喚醒模塊是長春工程學(xué)院的嵌入式開發(fā)與智能計(jì)算實(shí)驗(yàn)室搭建的嵌入式系統(tǒng)應(yīng)用,此模塊應(yīng)用在智能小車、智能開關(guān)等使用簡短詞匯控制的嵌入式系統(tǒng)中,特點(diǎn)是支持離線應(yīng)用、功耗低。
在訓(xùn)練熱詞時(shí),通過音頻采集設(shè)備對(duì)原始聲音進(jìn)行采集,去除噪聲等環(huán)境因素,減少音頻信號(hào)的失真,再提取特征值,通過若干次訓(xùn)練,生成模型文件。當(dāng)模塊被啟動(dòng)時(shí),通過音頻采集設(shè)備對(duì)聲音進(jìn)行采集,將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),預(yù)處理、特征提取,進(jìn)入識(shí)別階段,再與經(jīng)過訓(xùn)練生成的模型文件進(jìn)行模型匹配,得到識(shí)別結(jié)果,根據(jù)結(jié)果進(jìn)行相應(yīng)的控制(接入互聯(lián)網(wǎng)、智能小車的前進(jìn)后退、電子設(shè)備的開關(guān)等),如圖1所示。
在采集階段,通過音頻輸入設(shè)備,將聲音信號(hào)轉(zhuǎn)換為電信號(hào),接收原始聲音信息,包括語速、音量、音調(diào)等。在處理階段,為了提高識(shí)別的準(zhǔn)確率,需要補(bǔ)償高音部分的衰退,加重高音音頻的分辨率。再把音頻信號(hào)進(jìn)行分幀處理,劃分成若干個(gè)在20 ms左右的幀,通過FFT轉(zhuǎn)換為時(shí)域信息,再使用特征提取算法,將每一個(gè)幀的波形轉(zhuǎn)換成多維向量,包含了所有的內(nèi)容信息,同時(shí)進(jìn)行VAD端點(diǎn)檢測,識(shí)別出連續(xù)若干幀低于閾值的部分,提取出有效的語音起始和結(jié)束位置。在模型匹配階段,將特征提取的結(jié)果和訓(xùn)練好的模型文件進(jìn)行匹配,計(jì)算出各幀之間最小的差別,就是識(shí)別的結(jié)果,再根據(jù)識(shí)別結(jié)果,執(zhí)行相應(yīng)的輸出控制。
2? 環(huán)境配置
硬件環(huán)境:以Raspberry Pi 3B+為核心控制器,64位1.4 GHz四核CPU,16 G TF卡,飛利浦SWR1656免驅(qū)USB外置聲卡,如圖2所示。
軟件環(huán)境:Raspberry Pi的官方操作系統(tǒng)是Raspbian,使用Python開發(fā)環(huán)境,包含樹莓派RPi.GPIO包和Python-SMBus包,PyAudio是Python的模塊,實(shí)現(xiàn)USB音頻輸入設(shè)備的錄音功能,安裝SoX工具用來檢查音頻輸入設(shè)備是否設(shè)置正確。指令如下:
3? 軟件設(shè)計(jì)
下載開源Snowboy二進(jìn)制文件,解壓后的目錄結(jié)構(gòu)如圖3所示。
_snowboydetect.so是一個(gè)使用SWIG編譯的動(dòng)態(tài)鏈接庫。它依賴于系統(tǒng)的Python2庫。所有與Snowboy相關(guān)的庫都在此文件中靜態(tài)鏈接。snowboydect.py是SWIG生產(chǎn)的Python包裝器文件,snowboydecoder.py是另一個(gè)更容易閱讀的高級(jí)包裝器,resouces/snowboy.umdl是通用模型文件。
Snowboy支持Wave波形文件,線性PCM無損解碼,包含三個(gè)要素,分別是聲道、采樣率和采樣位數(shù),采樣位數(shù)可以是8位無符號(hào)整數(shù)、16位有符號(hào)整數(shù)或32位有符號(hào)整數(shù)。Ringbuffer類用來從PortAudio保存音頻,最大長度為size= 4 096,初始化一個(gè)ring_buffer對(duì)象,參數(shù)為傳輸?shù)拈L度是5秒的所有通道采樣次數(shù)的存儲(chǔ)容量,其中NumChannels()為通道數(shù),SampleRate()為采樣率,代碼如下:
4? 語音控制模塊的部署與測試
在網(wǎng)站https://snowboy.kitt.ai/上訓(xùn)練若干個(gè)hotwords,把訓(xùn)練通過的test1.pmdl、test2.pmdl等二進(jìn)制個(gè)人模型文件保存至Snowboy本地目錄的resource目錄下。創(chuàng)建執(zhí)行文件test.py,判斷參數(shù)個(gè)數(shù),應(yīng)為喚醒詞的個(gè)數(shù)加1,再初始化detector,代碼為:
可能遇到的問題:當(dāng)把回調(diào)函數(shù)作為參數(shù)傳遞給start時(shí),不能使用detected.callback=test1(),正確的寫法應(yīng)該是detected.callback=test1,如果需要傳遞參數(shù),則使用lamb,如前文所示。另外,使用VDA檢測語音和靜音時(shí),利用SnowboyDetect.RunDetection()函數(shù)的返回值指示靜音、錯(cuò)誤和語音,-2代表靜音,-1代表錯(cuò)誤,0代表語音。在使用多個(gè)喚醒詞的情況下,必須定義多個(gè)回調(diào)函數(shù)。
6? 結(jié)? 論
為了更好地保護(hù)數(shù)據(jù)的安全性,也可以在不使用網(wǎng)站的情況下訓(xùn)練模型,在/api/v1/train端點(diǎn),以編程的方式訓(xùn)練模型,達(dá)到更好的聲學(xué)一致性,如果音頻文件格式不兼容Snowboy,使用SoX命令將原始文件轉(zhuǎn)換成Snowboy支持的格式:
多關(guān)鍵詞離線喚醒語音控制系統(tǒng)能夠?qū)崿F(xiàn)離線語音熱詞的檢測、多熱詞檢測。結(jié)合離線語音喚醒和語音識(shí)別技術(shù)可以實(shí)現(xiàn)完整、安全的語音交互,實(shí)現(xiàn)語音機(jī)器人、語音控制等功能。
參考文獻(xiàn):
[1] 賈培養(yǎng),孫若巖,翟怡昊,等.基于Raspberry Pi的人機(jī)語音交互系統(tǒng) [J].計(jì)算機(jī)產(chǎn)品與流通,2019(1):118.
[2] 張水利,吳瑞智,李歡敏,等.一種具有語音功能的智能家用喚醒系統(tǒng)設(shè)計(jì) [J].微型電腦應(yīng)用,2018,34(10):1-3+8.
[3] 王宏,郭艷麗,賈新民.基于HMM的孤立字識(shí)別 [J].昌吉學(xué)院學(xué)報(bào),2006(1):94-98.
[4] 劉凱.基于深度學(xué)習(xí)的語音喚醒研究及其應(yīng)用 [D].福建:廈門大學(xué),2018.
[5] 王文博,王威,邢軍輝,等.基于語音控制的智能家居系統(tǒng)設(shè)計(jì) [J].電腦知識(shí)與技術(shù),2018,14(17):241-243.
[6] Snowboy. Snowboy,a Customizable Hotword Detection Engine. [EB/OL].(2017-03-24).http://docs.kitt.ai/snowboy/.
作者簡介:邊蓓蓓(1982—),女,漢族,黑龍江哈爾濱人,講師,碩士,研究方向:計(jì)算機(jī)嵌入式、圖像識(shí)別。