(原創)用訊飛語音實現人機交互的功能

目前在作一款車載的項目,其中有一個需求是在開車的時候實現人與手機的對話,全過程不須要用手,只用語音操控。git

這個就相似於人與機器人的對話,機器人在後臺一直待命,用戶說話 機器人作出對應的反映。github

但因爲用戶手機電源的寶貴性,又不能讓用戶一直開着錄音監聽,這樣很耗費資源。所以使用了訊飛語音提供的喚醒功能。設計

具體怎麼作呢?blog

看一張流程圖吧:這張流程圖使用了訊飛的大部分技術(語音喚醒、語音喚醒+命令詞識別、語義識別、語音合成),不廢話,看圖資源

流程圖已經寫的很清晰了,簡單介紹下it

在程序啓動的時候先啓動喚醒,這個時候用戶說喚醒詞就會將機器喚醒,並 聆聽命令。但若是這個時候有播報信息的話會優先播報信息,播報的時候會將喚醒暫停,播報完成後再啓動喚醒。這麼作有一個重要的緣由是訊飛的喚醒是一直佔用錄音資源的,而這個時候去播報語音會斷斷續續,據說這個能夠設置,但播報的時候用於通常也不會去說喚醒詞。後臺

訊飛的喚醒有兩種模式:單純的喚醒和喚醒+命令詞識別語法

單純的喚醒會有一個喚醒成功的回調,比較簡單程序

而喚醒+命令詞識別不只可以喚醒,若是你在說喚醒詞的同時說了一個命令,那麼他也會識別這個命令,你能夠很乾脆的收到這個命令去執行,而不須要在啓動什麼語義識別後在執行命令了,這對用戶來講也是很爽的。im

可是命令詞有必定的限制,就是命令詞使用以前必須先構建語法,而命令詞的內容必須得是提早知道的。可是若是用戶說了一個 石河子大學怎麼走,這個命令在你的命令詞構建的語法文件裏沒有!怎麼辦?這時候你就得提示用戶讓用戶去語義輸入了。

因此我這裏的構想是:用戶說命令詞,啓動喚醒,而後識別命令詞。識別命令詞成功執行命令,識別命令詞錯誤啓動語義識別。

這有個缺點就是用戶說了喚醒詞+語義識別的內容,語義識別的內容被命令詞消耗掉了,用戶只有再說一次語義識別的內容才能夠識別語義。

爲了不這個問題,咱們在喚醒詞識別後,若是命令詞不能識別的時候,用合成語音提示如下用戶「請問有什麼能夠幫您」,這個就表明機器沒有識別到用戶剛纔的語義內容,須要 用戶從新說,我是否是很奸詐o(∩_∩)o 

接下來就是語義識別了,這個沒什麼說的,主要的一點就是若是用戶不說話你要一直讓它保持錄音狀態嗎?固然不行啊,這多耗電啊!爲了幫用戶省電,我還設計了一個用戶不說話20s自動進入等待喚醒的狀態的流程。20s怎麼來?使用時間戳啊!就是每次用戶命令識別成功或者喚醒成功的時候記錄一個時間戳。而後下次再啓動語義識別前先判斷當前時間和時間戳時間是否相差大於20s,若是小於20s則繼續啓動語義識別,若是大於20s則啓動喚醒,準備讓用戶說命令詞來喚醒吧。

好了,差很少了。不要問我爲何不一直讓用戶說喚醒詞再執行對應的命令。若是你要幹某一件事情以前老是還要說喚醒詞,我估計你會瘋掉的,即便你不瘋別人也會認爲你是神經病的。沒有貶義,開玩笑,o(∩_∩)o 哈哈

 

 

個人github地址:https://github.com/dongweiq/study

歡迎關注,歡迎star o(∩_∩)o 。有什麼問題請郵箱聯繫 dongweiqmail@gmail.com qq714094450

相關文章
相關標籤/搜索