PlatformNotSupportedException使用.NET语音识别

所以我正在为C#尝试语音识别,我正在使用System.Speech.Recognition,而且,我在互联网上搜索,尝试了一些基本语音识别的代码,我能找到的最好的是这个:

using System; using System.Text; using System.Windows.Forms; using System.Speech.Recognition; namespace SpeechRecognition { public partial class MainForm : Form { SpeechRecognitionEngine recognitionEngine; public MainForm() { InitializeComponent(); Initialize(); } private void Initialize() { recognitionEngine = new SpeechRecognitionEngine(); recognitionEngine.SetInputToDefaultAudioDevice(); recognitionEngine.SpeechRecognized += (s, args) => { foreach (RecognizedWordUnit word in args.Result.Words) { // You can change the minimun confidence level here if (word.Confidence > 0.8f) freeTextBox.Text += word.Text + " "; } freeTextBox.Text += Environment.NewLine; }; } private void startButton_Click(object sender, EventArgs e) { try { recognitionEngine.UnloadAllGrammars(); recognitionEngine.LoadGrammar(new DictationGrammar()); RecognitionResult result = recognitionEngine.Recognize(new TimeSpan(0, 0, 20)); if (result != null) { foreach (RecognizedWordUnit word in result.Words) { freeTextBox.Text += word.Text + " "; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void startAsyncButton_Click(object sender, EventArgs e) { recognitionEngine.UnloadAllGrammars(); recognitionEngine.LoadGrammar(new DictationGrammar()); recognitionEngine.RecognizeAsync(RecognizeMode.Multiple); } private void stopButton_Click(object sender, EventArgs e) { recognitionEngine.RecognizeAsyncStop(); } private void startAsyncGrammarButton_Click(object sender, EventArgs e) { try { recognitionEngine.UnloadAllGrammars(); Grammar cg = CreateSampleGrammar(); recognitionEngine.LoadGrammar(cg); recognitionEngine.RecognizeAsync(RecognizeMode.Multiple); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private Grammar CreateSampleGrammar() { Choices commandChoices = new Choices("Calculator", "Notepad", "Internet Explorer", "Paint"); GrammarBuilder grammarBuilder = new GrammarBuilder("Start"); grammarBuilder.Append(commandChoices); Grammar g = new Grammar(grammarBuilder); g.Name = "Available programs"; return g; } } } 

现在,我尝试了这个,以及其他一些,并且它们都导致了同样的错误,一个PlatformNotSupportedException,它在错误中说:“没有安装识别器”。

有没有办法解决? 我正在运行Windows 7 64位。

语音平台运行时11和语音平台SDK 11不包括用于语音识别或语音合成(TTS或文本到语音)的运行时语言。 您必须单独安装它们。 运行时语言包括语言模型,声学模型以及提供语音引擎以执行特定语言的语音识别或TTS所需的其他数据。 语音识别或语音合成有单独的运行时语言。 您下载的Runtime Languages版本(例如,版本11.0)必须与您已安装的Speech Platform Runtime的版本相匹配。 您可以使用此链接下载Runtime Languages。

来自http://msdn.microsoft.com/en-us/library/hh362873.aspx 。

我认为你使用的是.NET附带的版本,但从那时起就有一些带外版本的版本。 Microsoft Speech Services v11是截至今天的当前版本。 如果您安装SDK,添加引用,并将命名空间更改为Microsoft.Speech(而不是System.Speech),您应该更新。

您运行的是哪个版本的Windows 7? 哪种语言?

你能使用内置的Windows 7听写function吗? 语音识别控制面板应用程序是否适合您? 请参见http://windows.microsoft.com/en-US/windows7/Setting-speech-options

我认为所有Windows 7版本都应该预装了识别器。 但是,如果您使用的是不受支持的语言,则可能不会。

来自https://stackoverflow.com/a/2998963/90236 :

您可以使用API​​来查询和确定已安装的recongizers桌面:System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()

通过查看注册表项,我发现我还可以看到安装了哪些识别器:桌面识别器:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Recognizers \ Tokens

如果您想尝试一个可能有用的非常简单的程序,请参阅https://stackoverflow.com/a/4737003/90236

我有同样的问题。 我刚刚在x86调试模式下启动了VisualStudio,而System.Speech.dll用于x64。 在发布模式(x64)中,它可以工作。 也许您在CPU架构和System.Speech.dll设置方面遇到了同样的问题。