jmallory0001 Ответов: 1

Как загрузить XML-грамматики для распознавания речи


Я пытаюсь создать приложение, которое использует распознавание речи с помощью системы.Речь. Я хочу загрузить грамматику, которая была сохранена в формате XML. Я не могу понять, как это сделать. Некоторые вещи, которые я нашел, говорят о том, что xml-грамматики не могут быть использованы с системой.Речь, но может быть использована с SAPI. Я не могу найти ничего, что показывает, как сделать приложение c# SAPI.

Мне нужно уметь реализовывать распознавание речи с помощью xml-грамматик. Я был бы очень признателен всем, кто может помочь мне достичь этой цели.

1 Ответов

Рейтинг:
4

Thomas Daniels

Если XML - файл следует за Спецификация ГСП [^], вы можете:

Grammar gr = new Grammar(@"path\to\grammar.xml");


jmallory0001

Я просмотрел ссылку, которую вы дали, но не вижу полного примера. Соответствует ли СРГ следующее:

&ЛТ;грамматика XML-файле:Ланг="ан-Нас" атрибутов xmlns="http://www.w3.org/2001/06/grammar" корень="топлевел" версия="1.0"&ГТ;
<rule id="topLevel">
&ЛТ;ruleref Ури="#команду, дайте ей"&ГТ;&ЛТ;/ruleref&ГТ;
</правило>
<rule id="playCommands">
<ruleref uri="#playAction"></ruleref>
&ЛТ;товар и GT; &ЛТ;/п&ГТ;
<ruleref uri="#fileWords"></ruleref>
</правило>
<rule id="playAction">
<один из>
&ЛТ;товар&ГТ; играть &ЛТ;/п&ГТ;
&ЛТ;товар&ГТ; начать &ЛТ;/п&ГТ;
&ЛТ;товар&ГТ; начать &ЛТ;/п&ГТ;
</один из>
</правило>
<rule id="fileWords">
<один из>
&ЛТ;товар&ГТ; песня &ЛТ;/п&ГТ;
&ЛТ;товар&ГТ; мелодия &ЛТ;/п&ГТ;
&ЛТ;товар&ГТ; трек &ЛТ;/п&ГТ;
&ЛТ;товар&ГТ; деталь &ЛТ;/п&ГТ;
</один из>
</правило>
</грамматика>

Thomas Daniels

Да, я считаю, что это действительно SRGS.

(Кроме того, я отредактировал ваш комментарий, чтобы исправить XML-теги; они не появились, потому что считались HTML-тегами)

jmallory0001

Большое вам спасибо за вашу помощь. Кажется, сейчас он загружается, но я все еще не получаю событие SpeechRecognized. Он попадает в гипотетическое событие, но не дальше. Есть ли у вас какие-либо указания, чтобы решить эту проблему?

Thomas Daniels

Вы загрузили грамматику в распознаватель речи, используя метод LoadGrammar?

jmallory0001

Да. Мой код находится ниже:
RecognitionEngine = новый SpeechRecognitionEngine();
RecognitionEngine.SetInputToDefaultAudioDevice();
RecognitionEngine.SpeechRecognized += SpeechRecognized;
RecognitionEngine.SpeechDetected += SpeechDetected;
RecognitionEngine.SpeechHypothesized += SpeechHypothesized;

SrgsDocument srgsdoc = новый SrgsDocument("..\\Grammars\\RootGrammar.xml");
Grammar grammar = новая грамматика(srgsdoc);
RecognitionEngine.LoadGrammar(грамматика);

RecognitionEngine.RecognizeAsync(RecognizeMode.Множественный);

Thomas Daniels

Я проверю его завтра, так как мне нужно идти сегодня.

Sergey Alexandrovich Kryukov

5ед.
—СА

jmallory0001

Я все понял. Это был xml-файл. Вы не можете иметь более одного правила команды на грамматику. Грамматика, которую я тестировал, пришла прямо из microsoft, но не работала так, как описано. Я действительно получал распознавание речи, чтобы стрелять, если я сказал: "воспроизвести песню, приостановить песню, остановить песню". Если вы разбиваете каждую команду на ее собственную грамматику и загружаете их все, то она работает так, как задумано.

Thomas Daniels

Я вижу. Рад слышать что ты все понял :)

Member 10527817

Привет всем, я застрял с той же проблемой. @jmallory can u plz объясните мне, что означает последняя строка.. Если разбить каждую команду на ее собственную грамматику ?

Member 13561651

ребята, я работаю над той же проблемой, но c# (asp.net)т. е. асинхронная функция веб-приложения создает исключение, что асинхронные операции не разрешены на веб-странице, тогда что мне теперь делать для веб-базового приложения????
любой плохо предложение

Thomas Daniels

Обратите внимание на эту систему.Речь работает на стороне сервера, и это довольно бесполезно для веб-приложения, потому что вы хотите иметь распознавание речи на стороне клиента. Выполните поиск в Google по запросу "Web Speech API", и вы найдете, как это сделать с помощью JavaScript.