移至主內容
DarkRanger's Secret Area

主導覽

  • 首頁
  • 關於本站
  • Linux
  • 程式開發
  • N900
  • 譯文
  • 資訊技術辭典

文章分類

  • 影劇
  • 遊戲
  • 筆記
  • 雜文
  • 資訊技術
  • 站務訊息

最新內容

  • How-To:Linux 安裝 DevilutionX
  • 於 2012 年建立的一份音樂播放清單
  • How-To:Linux 安裝 Medal of Honor: Allied Assault
  • Fallout 4 (2015)
  • How-To:Linux 安裝 Blood
  • 《終極動員令》系列早期作品原始碼釋出
  • How-To:Linux 安裝 Doom 3
  • Nausicaä of the Valley of the Wind (1984)
  • Intel 內顯與 Linux 桌面死當問題排解
  • 《哥吉拉 -1.0》心得補遺

SpeechRecognitionEngine

發表日期:星期六, 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

 

筆記