2012-03-16 56 views
3

因此,我正在尝试C#语音识别,我使用System.Speech.Recognition,并且,我在互联网上搜索,尝试了几段代码以进行一些基本的语音识别,最好的我能找到的是这样的:PlatformNotSupportedException使用.NET语音识别

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位。

+0

请不要用“C#”等来标题。这就是标签的用途。 – 2012-03-16 16:35:59

+0

对,对不起。 – Stan 2012-03-16 16:42:11

+1

不需要抱歉!现在你知道了。 – 2012-03-16 16:48:09

回答

1

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

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

我想你使用的是.NET附带的版本,但自那时以来已经有几个版本发布了。 Microsoft Speech Services v11是目前发布的版本。如果您安装了SDK,请添加一个引用,并将您的名称空间更改为Microsoft.Speech(而不是System.Speech),您应该更新。

0

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

您可以使用内置的Windows 7听写功能吗?语音识别控制面板应用程序是否适合您?见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

0

我有同样的问题。我刚刚在x86 Debug模式下启动VisualStudio,System.Speech.dll用于x64。在发布模式(x64)中工作。也许你有与CPU体系结构和System.Speech.dll设置相同的问题。