Как смешивать грамматику (правила) и диктация (свободная речь) с помощью peopleReCognizal в C #

StackOverflow https://stackoverflow.com/questions/3046921

Вопрос

Мне очень нравятся современное распознавание речи (и речсинтез).

http://msdn.microsoft.com/en-us/library/ms554855.aspx.

http://estellasays.blogspot.com/2009/04/speech-recognition-in-cnet.html.

Однако я чувствую, что я несколько ограничен при использовании грамматиков.

Не понимаю, что мне неверные грамматики отлично подходят для того, чтобы рассказать речи узнавать именно то, что слова / фразы, чтобы посмотреть, однако что, если я хочу, чтобы это признать что-то, я не дал ему голову? Или я хочу разобрать фразу, которая наполовину заранее определенной командой имени и половина случайных слов?

Например..

Сценарий а. - Я говорю: «Google [Spill нефти]», и я хочу, чтобы он открыл Google с результатами поиска на термин в скобках, которые могут быть чем угодно.

Сценарий Б. - Я говорю «найти [Манчестер]», и я хочу, чтобы он искать Манчестер в Google Maps или что-то еще не заранее определен

Я хочу, чтобы это знало, что «Google» и «locate» - это команды, а что приходит после этого параметры (и может быть что-нибудь).

Вопрос: Кто-нибудь знает, как смешать использование заранее определенных грамматиков (слова распознавания речи должна распознавать) и слова не в его заранее определенной грамматике?

Фрагменты кода ..

using System.Speech.Recognition;

...
...

SpeechRecognizer rec = new SpeechRecognizer();
rec.SpeechRecognized += rec_SpeechRecognized;

var c = new Choices();
c.Add("search");

var gb = new GrammarBuilder(c);
var g = new Grammar(gb);
rec.LoadGrammar(g);
rec.Enabled = true; 

...
...

void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    if (e.Result.Text == "search")
    {
        string query = "How can I get a word not defined in Grammar recognised and passed into here!";

        launchGoogle(query);
    }
}

...
...


private void launchGoogle(string term)
{
    Process.Start("IEXPLORE", "google.com?q=" + term);
}
Это было полезно?

Решение

Вы можете попробовать что-то вроде этого ... он указывает список известных команд .. Но также позволяет использовать открытую диктовку после этого. Он ожидает, что предстоит быть командой, заданной до открытой диктаты .. Но вы могли бы поменять это ... и добавить, однако, добавив в бланк в типе команды («), это также позволит вам получить прямо к диктованию часть.

Choices commandtype = new Choices();
commandtype.Add("search");
commandtype.Add("print");
commandtype.Add("open");
commandtype.Add("locate");

SemanticResultKey srkComtype = new SemanticResultKey("comtype",commandtype.ToGrammarBuilder());

 GrammarBuilder gb = new GrammarBuilder();
 gb.Culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
 gb.Append(srkComtype);
 gb.AppendDictation();

 Grammar gr = new Grammar(gb);

Затем на вашем распознавании просто используйте текст результата и т. Д.

private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    System.Console.WriteLine(e.Result.Text);

}

Вы можете добавить дополнительные варианты выбора и семантинтиресультки в структуру, чтобы сделать более сложные шаблоны, если хотите. Также подстановочный знак (например, GB.AppendWildCard ();).

Другие советы

У вас есть два варианта:

  1. Вы можете использовать узел Dictation для бесплатного текста, используя Граммати :: Приложение. Отказ Проблема в том, что с момента распознавания нет никакого контекста, признания не самое высокое качество.
  2. Вы можете использовать узел TextBuffer и предоставить набор элементов, используя Grammarbuilder :: Append (строка, субтомmatchingModeMode). Отказ Это даст достаточно распознавателя контекста, чтобы получить хорошие признания качества без необходимости восстановления всего дерева грамматики каждый раз.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top