iOS 語音辨識實作與應用

Phineas
4 min readFeb 14, 2018

--

前言:

2016 WWDC 大會上,蘋果公司推出了可以用於語音識別的 Speech Kit 框架。不同於市面上已存在的其他家語音辨識,Speech Kit 不需額外花費,雖然辨識準確率仍然有待加強,但作為追一項新技術已經夠了,剩下的就等待 Apple 把準確度修正。在這次的範例中,我將帶來仿語音助手 Siri, Okay Google, Alexa 等…須先下達關鍵字才會進入聽命令的模式,不直接保持常聽狀況,是因為現階段語音辨識能有缺點尚待克服,與句的辨識與修正常常會因為不法判斷是否為斷句,而變成不同的解釋跟差異過大的字,拿中文的例子來說,白癡造句 “從前 — 小明從前門進來”,因此這部分仍待改進,在開始我的部分之前可以先看我的 github 連結參考做法,,另外,基於單一功能測試,故後段語意分析不做,若想了解市面上提供之一的語意分析工具,可參考我另外一篇 blog -WitAI,不過我想,若使得的是以上白癡造句的例子,即使是用語意辨識,還是無法正確的辨認出來吧。

流程

範例:

Info.plist

// 開啟麥克風權限
NSMicrophoneUsageDescription
// 開啟語音辨識權限
NSSpeechRecognitionUsageDescription

在使用 Speech Framework 時,你必須先申請用戶許可權限,其原因該功能不僅僅侷限在 iPhone 裝置,還需要依賴 Apple Server,更正確的說法是手機負責收音,再把音頻數據傳送給 Apple 後台處理。

使用者用戶授權

錄製音頻的初期設定,這邊可以設定音源輸入裝置 — 手機麥克風,藍牙耳機等 …

語音辨識方法主體,如何 request, 塞 buffer, audioEngine 引擎準備,發動等

此 function 的目的在於判斷語句是否結束,設置 timer 的目的在於預定 2 秒換氣時間,超過 2 秒即為該句子已經結束。

當結束一次語句分析完畢後,會關閉當次語音辨識,並會開啟下一次新的語音辨識的請求,設置 timer 的目的在於,目前官方再一次的請求有時間限制,故都不講話,也必須在該時限到前停止,並在開啟下一次的 request。

Screen Shot - 辨識率範例

Screen Shots - Example

等待關鍵字模式
結合 webview 做簡單的語音命令搜尋關鍵字 — Google

Demo

結論

小編自己玩過 Android 內建語音辨識,iOS 的 Speech,Google Cloud Paltform,整體來說整體辨識率算是不錯的,但如果是關鍵字或遇到比你預期的字更常被使用的片語(同音不同意,諧音不同意思),那辨識結果將會大打折扣,不過想想也是普通對話的情況下,若出現這種字即便是我們也會有誤會意思的時候,如何改進這也是這項技術的重點,做中學,學中做,這次又是一個很棒的體會。

注意事項

雖然語音辨識功能是免費的,但其實 Apple 有提醒開發者,一些必要的須知及限制

--

--

Phineas

Garminer. 程式是照你寫的在跑,而不是依你想的在執行