寫在文章前面的話
語音技術,在近幾年取得了突破式發展,技術成熟的同時,在各行業也開始落地。不管是手機、電腦、電視,還是汽車、空調、電風扇等設備,都在尋求這種更加自然的交互或操作方式。
現階段機器的智能程度還不夠,它並不知道我們是在對它說話,所以就普遍採用喚醒詞喚醒方案。
喚醒詞喚醒方案,就是預先給設備起了一個名字,然後說出這個名字,這臺設備就知道是在對它說話。比如華為智能音箱的"小藝小藝",小米音箱的"小愛同學",康佳電視的"小康小康",谷歌語音助手的"OK, Google",亞馬遜的"Alexa"等等。
喚醒詞喚醒方案的底層實現邏輯:設備會在後臺持續錄音,並從語音流中檢測喚醒詞,當檢測到喚醒詞後,就拉起語音服務,和用戶進行交互。一般來說喚醒詞識別實在本機進行,不需要網絡,不會把錄音數據傳到雲端。但是國內的做法,為了提高識別的準確率,似乎也會傳輸錄音數據到雲端,進行本地+雲端識別。錄音數據傳到雲端,其實已經侵犯了用戶的隱私權。
喚醒詞識別是一門很複雜的技術,本文只是分享一個開放方案的使用。又囉嗦了這麼多,好了,下面進入今天的重點。
喚醒詞識別引擎snowboy
今天分享的喚醒詞識別引擎叫snowboy。有以下優勢:
1. 支持定製和訓練喚醒詞;
2. 高精度,低延遲;
3. 不需要聯網;
4. 節省資源;
5. Apache license。
6. 在配置最低的樹莓派上,CPU佔用率小於10%。
如何使用Snowboy
Snowboy的庫和示例代碼在Github上面,大家去搜索snowboy就可以搜索到。上面並沒有Android平臺直接可用的動態鏈接庫,需要自己搭建環境,自己編譯生成。編譯環境不支持Windows,只支持Ubuntu/MacOS/Rasperry Pi。下面分享一下如何使用,包括如何在Github上下code,如何安裝編譯環境,如何生成Android平臺的動態鏈接庫,如何在Android平臺運行alexa喚醒詞識別程序。
下code
在GitHub上面下代碼,有兩種方式:zip下載和git clone。
1 zip下載
直接點擊Download ZIP就可以了。
2 git clone
首先電腦要安裝git,然後通過下面的命令進行下code。
安裝編譯環境
其實,主要是要讀懂工程的介紹文件,就是README.md文件。一個好的工程這個文件都會寫的很詳細。使用者通過閱讀這個文件,就能夠使用這個工程。
我的電腦是Ubuntu,下面分享的是這個系統的環境配置。
首先安裝sox\\portaudio\\pyaudio。
然後安裝swig。
最後安裝atlas。
生成Android平臺的動態鏈接庫
進入swig/Android目錄下面執行make命令,會生成so和Java調用so文件。
編譯之後,多了java和jniLibs兩個目錄。這兩個就是最終要使用的,動態鏈接庫和native定義文件。
一個Alexa喚醒的示例程序
使用Android Studio創建一個Empty工程,然後拷貝so和native聲明的Java文件,以及alexa模型資源到工程裡面。好了,一切就緒,下面就可以進行實際的開發。
喚醒詞識別程序運行在後臺。後臺服務有兩種啟動方式,第一種是接受開機完成的廣播進行啟動,第二種是通過MainActivity的Button主動拉起服務。
MainService是後臺服務,會實現回調方法、創建WWE對象,並開始監測,當檢測到Alexa喚醒詞時,會回調onKeyWordDetect()方法。可以以此為原型,增加自己的業務邏輯。
代碼開源在GitHub,下面是地址:
https://github.com/stonedong/Wwe
閱讀更多 做事情的幻想家 的文章