首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >语音识别窗口10

语音识别窗口10
EN

Stack Overflow用户
提问于 2015-11-03 08:32:49
回答 2查看 3.8K关注 0票数 0

我正在尝试用Visual C#在Windows10(使用Cortana)中构建一个语音识别。这是我使用旧的System.Speech.Recognition进行语音识别的代码的一部分,效果很好,但它只支持英语。

代码语言:javascript
运行
复制
SpeechSynthesizer sSynth = new SpeechSynthesizer();
PromptBuilder pBuilder = new PromptBuilder();
SpeechRecognitionEngine sRecognize = new SpeechRecognitionEngine();
Choices sList = new Choices();


private void Form1_Load(object sender, EventArgs e)
{


}

private void button1_Click(object sender, EventArgs e)
{
    pBuilder.ClearContent();
    pBuilder.AppendText(textBox2.Text);
    sSynth.Speak(pBuilder);
}

private void button2_Click(object sender, EventArgs e)
{
    button2.Enabled = false;
    button3.Enabled = true;
    sList.Add(new string[] { "who are you", "play a song" });
    Grammar gr = new Grammar(new GrammarBuilder(sList));
    try
    {
        sRecognize.RequestRecognizerUpdate();
        sRecognize.LoadGrammar(gr);
        sRecognize.SpeechRecognized += sRecognize_SpeechRecognized;
        sRecognize.SetInputToDefaultAudioDevice();
        sRecognize.RecognizeAsync(RecognizeMode.Multiple);
    }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
        }

    }

    private void sRecognize_SpeechRecognized(object sender,              SpeechRecognizedEventArgs e)
    {
          textBox1.Text = textBox1.Text + " " + e.Result.Text.ToString() + "\r\n";           

         }

如何在Windows10中使用新的语音识别功能?

EN

回答 2

Stack Overflow用户

发布于 2015-11-03 23:50:40

使用Microsoft Speech Platform SDK v11.0 (Microsoft.Speech.Recognition)。

它的工作原理与System.Speech类似,但您可以使用意大利语(单独安装),也可以使用SRGS Grammar。我可以毫不费力地使用kinect (SetInputToAudioStream)和默认输入设备(SetInputToDefaultAudioDevice)。

它也可以离线工作,所以不需要像Cortana那样在线。使用SRGS语法,您可以获得相当程度的命令复杂性

UPDATE这里是我初始化识别器的方式

代码语言:javascript
运行
复制
private RecognizerInfo GetRecognizer(string culture, string recognizerId)
{
  try
  {
    foreach (var recognizer in SpeechRecognitionEngine.InstalledRecognizers())
    {
      if (!culture.Equals(recognizer.Culture.Name, StringComparison.OrdinalIgnoreCase)) continue;
      if (!string.IsNullOrWhiteSpace(recognizerId))
      {
        string value;
        recognizer.AdditionalInfo.TryGetValue(recognizerId, out value);
        if ("true".Equals(value, StringComparison.OrdinalIgnoreCase))
          return recognizer;
      }
      else
        return recognizer;
    }
  }
  catch (Exception e)
  {
    log.Error(m => m("Recognizer not found"), e);
  }
  return null;
}

private void InitializeSpeechRecognizer(string culture, string recognizerId, Func<Stream> audioStream)
{
  log.Debug(x => x("Initializing SpeechRecognizer..."));
  try
  {
    var recognizerInfo = GetRecognizer(culture, recognizerId);
    if (recognizerInfo != null)
    {
      recognizer = new SpeechRecognitionEngine(recognizerInfo.Id);
      //recognizer.LoadGrammar(VoiceCommands.GetCommandsGrammar(recognizerInfo.Culture));
      recognizer.LoadGrammar(grammar);
      recognizer.SpeechRecognized += SpeechRecognized;
      recognizer.SpeechRecognitionRejected += SpeechRejected;
      if (audioStream == null)
      {
        log.Debug(x => x("...input on DefaultAudioDevice"));
        recognizer.SetInputToDefaultAudioDevice();
      }
      else
      {
        log.Debug(x => x("SpeechRecognizer input on CustomAudioStream"));
        recognizer.SetInputToAudioStream(audioStream(), new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
      }
    }
    else
    {
      log.Error(x => x(Properties.Resources.SpeechRecognizerNotFound, recognizerId));
      throw new Exception(string.Format(Properties.Resources.SpeechRecognizerNotFound, recognizerId));
    }
    log.Debug(x => x("...complete"));
  }
  catch (Exception e)
  {
    log.Error(m => m("Error while initializing SpeechEngine"), e);
    throw;
  }
}
票数 2
EN

Stack Overflow用户

发布于 2015-11-03 12:58:37

Cortana API使用示例为here。您可以复制它,并根据需要开始修改。它创建一个与用户的对话框。您不能使用Cortana API精确地重现您的System.Speech代码,因为它是为其他目的而设计的。如果您还想识别几个单词,您可以继续使用System.Speech接口。

System.Speech接口支持其他语言,不仅仅是英语。您可以在此处找到更多信息:

Change the language of Speech Recognition Engine library

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33489517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档