0

我正在使用一个简单的语音识别应用程序来通过并行端口控制继电器,这是它应该如何工作的基本程序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Speech.Synthesis;
using Microsoft.Speech.Recognition;

namespace speechHardware
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a new SpeechRecognitionEngine instance.
          var  sre = new SpeechRecognitionEngine();
          SpeechSynthesizer s = new SpeechSynthesizer();
          Console.WriteLine("starting recognizer.......");
          s.Speak("starting recognizer.");

          // Create a simple grammar that recognizes "light on", "light off", or "fan on","fan off".
            Choices colors = new Choices();
            Console.WriteLine("option list.......");
            colors.Add("light on");
            colors.Add("light off");
            colors.Add("fan on");
            colors.Add("fan off");

            GrammarBuilder gb = new GrammarBuilder();
            gb.Append(colors);
            Console.WriteLine("starting grammer builder.......");

            // Create the actual Grammar instance, and then load it into the speech recognizer.
            Grammar g = new Grammar(gb);
            sre.LoadGrammar(g);

            // Register a handler for the SpeechRecognized event.
            sre.SpeechRecognized += SreSpeechRecognized;
            //sre.SetInputToWaveFile("C:\Users\Raghavendra\Documents\MATLAB\test.wav");
          sre.SetInputToDefaultAudioDevice();
            Console.WriteLine("input device recognised.......");         
            s.Speak("input device recognised.");
         sre.RecognizeAsync(RecognizeMode.Multiple);
            Console.ReadLine();
            Console.WriteLine("stopping recognizer.....");
            sre.RecognizeAsyncStop();

        }
        static void SreSpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            SpeechSynthesizer s = new SpeechSynthesizer();
            Console.WriteLine("\nSpeech Recognized: \t{0}" + e.Result.Confidence, e.Result.Text);

            if (e.Result.Confidence < 0.85)
                return;

            switch (e.Result.Text)
            {
                case "light on":
                    light(1);                    
                    s.Speak("the light has been turned on.");
                    break;
                case "light off":
                    light(0);
                    s.Speak("the light has been turned off.");
                    break;
                case "fan on":
                    fan(1);
                    s.Speak("the fan has been turned on.");
                    break;
                case "fan off":
                    fan(0);
                    s.Speak("the fan has been turned off.");
                    break;
                default:

                    break;
            }
        }
        static void light(int val)
        {
            Console.WriteLine("\nSpeech Recognized:light ");
        }

        static void fan(int val)
        {
            Console.WriteLine("\nSpeech Recognized: fan");
        }


    }
}

这在我朋友的电脑上完美运行,但在我的电脑上它无法识别我所说的内容,也许它没有得到输入。我们都有几乎相同的配置。麦克风也很好用,我不知道出了什么问题。

我已安装 Microsoft 语音平台 - 软件开发工具包 (SDK),版本 10.2(x86 版) Microsoft 语音平台 - 服务器运行时,版本 10.2(x86 版)

请帮帮我。

4

4 回答 4

2

我刚刚将 Microsoft.Speech.Recognition 替换为 System.Speech.Recognition 并且它有效。

不明白出了什么问题。

于 2012-01-30T15:28:10.280 回答
1

您正在调用 sre.RecognizeAsyncStop(); 在它有机会识别任何语音之前。记住异步是非阻塞的,所以它不会等到语音被识别出来。删除该行,它应该可以工作。

于 2012-01-17T13:56:09.637 回答
0

尝试将较低的值放入信心中。也许您的麦克风噪音太大甚至静音?:)

于 2012-01-17T12:53:24.690 回答
0

我怀疑你的朋友正在运行 windows xp 而你正在运行 vista 或 7。我认为微软实际上将语音识别作为 os 包的一部分包含在 xp 中。这可能是为什么您必须将包含从 Microsoft 更改为 System.

于 2012-05-31T22:04:46.760 回答