首先請下載并安裝和本教程配套的魚漁微信開發包。
接收語音識別結果的官方文檔參見接收語音識別結果,配合本次課程,開發包中專門有一個教學文件tool/send_and_response.php,注意以下代碼:

getRevContent和getRevVoice函數都出自開發包中的common/wechat-php-sdk/wechat.html' target='_blank'>class.php。getRevVoice返回包含MediaId和Format的數組,魚漁微信開發初級教程【八】- 接收語音消息已經介紹過了。getRevContent代碼如下:

注意其中的邏輯是,如果有Recognition項,就返回語音識別結果。但是這里面有些復雜的情況,詳見下面的分析。結論是當MsgType為voice時,可用php的strlen函數判斷Recognition的值是否為空串,如果不是空串,說明語音識別功能已經開啟,有識別結果,但識別結果的正確概率有多大,微信沒有給出任何參數。不管Recognition的值是否為空,微信都給出了MediaId和Format,根據MediaId在3天內可以從微信服務器下載原聲,以正視聽。
在run.php的最前面加上下面兩行,就可以測試了。
require_once dirname(__FILE__) . '/tool/send_and_response.php';
exit;
魚漁在這里索性詳細解釋下這個Recognition。
一、測試號默認沒有開啟語音識別功能,需要到帳號管理后臺人工開啟,下圖是已經開啟的狀態:

注意由于客戶端緩存,開發者開啟或者關閉語音識別功能,對新關注者立刻生效,對已關注用戶需要24小時生效。開發者可以重新關注此帳號進行測試。
二、微信輸入方式中有一種叫做“語音輸入",同樣用到語音到文字的轉換技術,但用戶最后發給微信服務器的不是語音消息,而是文字消息,MsgType為text,和這次課講的接收語音識別結果沒有任何關系,如下圖所示:

三、即便語音識別功能默認是關閉的,只要MsgType為voice,微信服務器發來的xml中就會包含一個Recognition,值為空,詳見魚漁微信開發初級教程【八】- 接收語音消息中的日志記錄,那次我們沒有開啟語音識別功能。下面幾點是開啟后的情況。
四、在微信對講機模式下,如果按住說話后,沒有語音輸入,也就是發送一個“無聲”的語音消息給微信,微信會給出一個mediaId,Format為speex,Recognition為空,下面是交互界面和日志:


五、在微信對講機模式下,如果按住說話后,有語音輸入,并且識別正確,微信會給出一個mediaId,Format為amr,Recognition非空,下面是交互界面和日志:


六、在微信對講機模式下,如果按住說話后,有語音輸入,但識別錯誤,微信會給出一個mediaId,Format為amr,Recognition非空,下面是交互界面和日志:


如果能夠針對語音識別結果的正確率,給出個信心指數,比如80%,也許會對實際應用有所幫助。最近微信推出智能開放平臺,包括語音和圖像的識別,魚漁對這些智能領域密切關注,并有一些資源,有任何idea都歡迎聯系討論。
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答