SpeechRecognitionEngine
由 darkranger 在 週六, 07/26/2014 - 19:19 發表,更新日期:週一, 07/28/2014 - 14:21
Windows 平台上的語音辨識方案有兩種:一種是 .NET Framework 所內建的 System.Speech 命名空間,而另一種則是由 Microsoft Speech Platform SDK 所提供的 Microsoft.Speech 命名空間。兩者的結構頗為相似,許多類別和方法都是一樣的,不過前者的環境建置比較單純,用的是 Windows 本身的語音辨識功能,不需要再安裝 SDK。
由於 DR 還是想用 Python 撰寫,所以安裝了 IronPython 這個結合 Python 與 .NET Framework 的執行環境,而所用的作業系統版本為 Windows 7 Ultimate(64-bit)。IronPython 在安裝完畢後,需要在 Windows 的環境變數「Path」中增加 IronPython 的安裝路徑,例如「C:\Program Files (x86)\IronPython 2.7」,這樣才能比較方便的執行 IronPython 程式。
Windows 語音辨識可支援英文、法文、德文、西班牙文、日文以及中文,需先至控制台的語音辨識選項確認目前系統所支援的語系,若要支援系統預設以外的語言則得再安裝對應的 Windows 語言套件(language packs)。此外也建議安裝最新版本的語音辨識套件( MSSpeech_SR_*_TELE.msi)以提昇準確率。
範例程式碼(system_speech.py)使用 SpeechRecognitionEngine() 類別中的 SetInputToWaveFile() 方法,顧名思義就是可將 WAV 聲音檔作為語音辨識的來源:
# -*- coding: utf-8 -*- import sys import clr clr.AddReference("System.Speech") from System.Globalization import CultureInfo from System.Speech.Recognition import SpeechRecognitionEngine, DictationGrammar, RecognizeMode completed = 0 def speech_recognized(sender, event): print event.Result.Text def recognize_completed(sender, event): global completed completed = 1 def recognition_engine(filename): global completed dictation = DictationGrammar() recognizer = SpeechRecognitionEngine(CultureInfo("en-US")) recognizer.LoadGrammar(dictation) recognizer.SetInputToWaveFile(filename) recognizer.SpeechRecognized += speech_recognized recognizer.RecognizeCompleted += recognize_completed recognizer.RecognizeAsync(RecognizeMode.Multiple) while completed == 0: pass if __name__ == "__main__": if len(sys.argv) >= 2: recognition_engine(sys.argv[1])
執行方式為:
- ipy system_speech.py test.wav