我正在嘗試使用Powershell做一些簡單的語音識別(從.wav文件)。我正在使用Microsoft.Speech.Recognition.SpeechRecognitionEngine
。可悲的是,我有一些嚴重的問題,但第一關在這裏是我的代碼:MS SpeechRecognitionEngine不返回結果
[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft SDKs\Speech\v11.0\Assembly\Microsoft.Speech.dll")
[System.Reflection.Assembly]::LoadWithPartialName("System.Speech")
$cult = New-Object System.Globalization.CultureInfo("en-US")
$listener = New-Object Microsoft.Speech.Recognition.SpeechRecognitionEngine($cult)
$listener.SetInputToWaveFile("C:\Users\user\Downloads\audio.wav")
$arr = @("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q" ,"r", "s", "t", "u","v","w","x","y","z","four","red")
$text = New-Object Microsoft.Speech.Recognition.Choices
$text.Add($arr)
$toGram = New-Object Microsoft.Speech.Recognition.GrammarBuilder($text)
$toGram.Culture = $cult
$gram = New-Object Microsoft.Speech.Recognition.Grammar($toGram)
$listener.LoadGrammar($gram)
Register-ObjectEvent $listener RecognizeCompleted -SourceIdentifier "RecognizeCompleted" -Action {if($EventArgs){$EventArgs.Result.Text; write-host $EventArgs.Result.Confidence} else {write-host "nope"} }
$listener.RecognizeAsync()
我的問題是,當我使用.Recognize()
我得到任何輸出,即使在0結果輸出不。 註冊完成異步方法(.RecognizeAsync()
)時,處理程序被調用並且$EventArgs
確實存在,但我無法訪問變量的任何屬性,甚至無法從Get-Member
獲取輸出。
我在做什麼明顯錯誤嗎?我會很感激任何輸入,因爲我現在很瘋狂...
我也將開放的任何替代品的MS Speech API(任何命令行工具,可以做英文基本語音識別會做)。
更新:波形文件包含一系列字母或數字。例如「3 D 6 H Y」
更新:我欣賞編輯,但我不明白某人刪除代碼!謝謝!不要這樣做!
更新:它似乎SAPI不處理單個字符(如果有的話)。我可能會嘗試下一個獅身人面像。非常感謝brandon投入了太多時間來幫助我。
對於識別引擎能夠識別任何這些字符,.wav文件應該只是那些「詞」之一。因此,如果您的.wav文件不是單個字符(通過「Z」說的「A」)或單詞「紅色」或「四個」,它不會識別任何內容。簡而言之:你的wav文件是什麼? – Brandon 2014-12-03 17:58:34
哦,我很抱歉,我沒有看到那裏的評論。等一下,評論 – Brandon 2014-12-03 18:16:10
我加了一個回答總結一切 – Brandon 2014-12-03 18:26:49