PlatformNotSupportedException使用.NET语音识别

时间:2012-03-16 16:31:50

标签: c# speech-recognition voice platform

所以我正在为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位。

3 个答案:

答案 0 :(得分:2)

  

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

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

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

答案 1 :(得分:0)

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

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

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

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

  

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

     

我发现通过查看我还可以看到安装了哪些识别器   在注册表项:桌面识别器:   HKEY_LOCAL_MACHINE \ SOFTWARE \微软\语音\识别器\令牌

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

答案 2 :(得分:0)

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