一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼


一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

寫在文章前面的話

語音技術,在近幾年取得了突破式發展,技術成熟的同時,在各行業也開始落地。不管是手機、電腦、電視,還是汽車、空調、電風扇等設備,都在尋求這種更加自然的交互或操作方式。

現階段機器的智能程度還不夠,它並不知道我們是在對它說話,所以就普遍採用喚醒詞喚醒方案。

喚醒詞喚醒方案,就是預先給設備起了一個名字,然後說出這個名字,這臺設備就知道是在對它說話。比如華為智能音箱的"小藝小藝",小米音箱的"小愛同學",康佳電視的"小康小康",谷歌語音助手的"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就可以了。

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

2 git clone

首先電腦要安裝git,然後通過下面的命令進行下code。

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

安裝編譯環境

其實,主要是要讀懂工程的介紹文件,就是README.md文件。一個好的工程這個文件都會寫的很詳細。使用者通過閱讀這個文件,就能夠使用這個工程。

我的電腦是Ubuntu,下面分享的是這個系統的環境配置。

首先安裝sox\\portaudio\\pyaudio。

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

然後安裝swig。

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

最後安裝atlas。

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

生成Android平臺的動態鏈接庫

進入swig/Android目錄下面執行make命令,會生成so和Java調用so文件。

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

編譯之後,多了java和jniLibs兩個目錄。這兩個就是最終要使用的,動態鏈接庫和native定義文件。

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

一個開放的喚醒詞識別引擎,示例支持alexa喚醒,附源碼

一個Alexa喚醒的示例程序

使用Android Studio創建一個Empty工程,然後拷貝so和native聲明的Java文件,以及alexa模型資源到工程裡面。好了,一切就緒,下面就可以進行實際的開發。

喚醒詞識別程序運行在後臺。後臺服務有兩種啟動方式,第一種是接受開機完成的廣播進行啟動,第二種是通過MainActivity的Button主動拉起服務。

MainService是後臺服務,會實現回調方法、創建WWE對象,並開始監測,當檢測到Alexa喚醒詞時,會回調onKeyWordDetect()方法。可以以此為原型,增加自己的業務邏輯。

代碼開源在GitHub,下面是地址:

https://github.com/stonedong/Wwe


分享到:


相關文章: