2012-03-16 61 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設置相同的問題。