TargetInvocationException при использовании SemanticResultKey

Я хочу построить мою грамматику, чтобы принять несколько чисел. Когда я повторяю число, как "двадцать один", возникает ошибка. Поэтому я продолжал сокращать свой код, чтобы найти проблему. Я нашел следующий фрагмент кода для разработчика грамматики:

string[] numberString = { "one" };
Choices numberChoices = new Choices();

for (int i = 0; i < numberString.Length; i++)
{
numberChoices.Add(new SemanticResultValue(numberString[i], numberString[i]));
}

gb[1].Append(new SemanticResultKey("op1", (GrammarBuilder)numberChoices), 1, 2);

Теперь, когда я произношу "один", это все еще дает мне это исключение

Который, когда я гуглил на это, он заявляет, что это исключение за пределами моего кода, мне интересно, это ошибка в Microsoft. Speech DLL или я что-то упустил

Изменить 1:

Я поиграл с кодом и признал Async следующим образом:

sre.RecognizeAsync(RecognizeMode.Multiple);

вместо

sre.Recognize();

теперь, когда я говорю "двадцать один", например, он получает это исключение: base = {"Дублированный семантический ключ" op1 "в правиле" root ".}}

Я знаю, что проблема в грамматике, но я повторил ее для "op1". Что мне не хватает??

1 ответ

Решение

Я закончил, используя распознанный текст, чтобы разобрать его сам в

void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)

Я разобрал строку, узнал:

e.Result

Вместо

recoResult.Semantics["op1"].Value.ToString())

поскольку объект.Semantics выдает исключение, упомянутое выше.

Я действительно хочу знать решение, если кто-то имеет опыт работы с ним

Другие вопросы по тегам