【发布时间】:2023-03-20 02:13:01
【问题描述】:
我正在尝试使用 Powershell 进行一些简单的语音识别(来自 .wav 文件)。我正在使用Microsoft.Speech.Recognition.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 不能很好地处理单个字符(如果有的话)。接下来我可能会尝试狮身人面像。不过感谢布兰登投入这么多时间来帮助我。
【问题讨论】:
-
为了让识别引擎能够识别这些字符中的任何一个,.wav 文件应该只是这些“单词”之一。因此,如果您的 .wav 文件不是单个字符(发音为“A”到“Z”)或单词“red”或“four”,它不会识别任何内容。简而言之:你的 wav 文件中有什么?
-
哦,很抱歉我没有看到上面的评论。稍等,评论
-
我添加了一个答案来总结一切
-
There is a better way 生成一个字母数组。
标签: .net powershell speech-recognition sapi