语音识别引擎分解命令



我正在编写一个需要识别来自用户的语音命令的 WPF 应用程序。作为语音识别引擎的新手,我不确定如何以最佳方式完成我需要做的事情。申请流程如下:

  • 用户说出一个关键字来"唤醒"应用程序(例如Amazon Echo要求用户说"Alexa"(
  • 用户说出应用要执行的命令(例如"播放'某位艺术家的某首歌曲'"(

我的问题是,在识别关键字后,我不确定如何处理我的程序。如果我要播放用户在说出关键字后说出的歌曲,是否需要启动新的语音识别器?这是我正在做的事情的一些伪代码:

private SpeechRecognitionEngine _listen;
public frmHome()
{
InitializeComponent();
SetupListen();
}
private void SetupListen()
{
ResetListener();
}
private void ResetListener()
{
_listen = new SpeechRecognitionEngine();
Choices exChoices = new Choices();
exChoices.Add(new String[] { "keyword" });
GrammarBuilder gb = new GrammarBuilder();
gb.Append(exChoices);
Grammar g = new Grammar(gb);
_listen.LoadGrammar(g);
_listen.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sr_speechRecognized);
_listen.SetInputToDefaultAudioDevice();
_listen.RecognizeAsync();
}
private void sr_speechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text.Equals("keyword"))
{
//start listening for the command
}
ResetListener();
}

您可以为开始/停止关键字设置单独的语法,并在说出启动命令时设置一个标志变量。

然后在SpeechRecognized处理程序中,您可以检查标志,然后继续在识别的文本中搜索命令文本。

如果您正在寻找一个小关键字,例如Alexa,则可以在处理发出的命令之前简单地搜索识别的文本中的关键字。搜索字符串的内容。

我希望这篇文章有帮助:https://msdn.microsoft.com/en-us/magazine/dn857362.aspx

只需将_listen.RecognizeAsync();替换为_listen.RecognizeAsync(RecognizeMode.Multiple));

现在您可以发出多个命令。

最新更新