邊蓓蓓 張曉賢



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