Member 13921733 Ответов: 1

По крайней мере, одна грамматика должна быть загружена перед выполнением распознавания.


Итак, у меня возникла проблема с моим кодом..
Программа: Visual Studio 2017 Код Языка: С#
Я постоянно получаю это всплывающее сообщение об ошибке, когда пытаюсь активировать свой код:

"Система.InvalidOperationException: 'по крайней мере одна грамматика должна быть загружена перед выполнением распознавания."

он выбирает эту часть кода:

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


Весь код;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Recognition;

namespace Voice_Recognition
{
    public partial class Form1 : Form
    {
        SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine();

        public Form1()
        {
            InitializeComponent();
        }

        private void btnEnable_Click(object sender, EventArgs e)
        {
            recEngine.RecognizeAsync(RecognizeMode.Multiple);
            btnDisable.Enabled = true; 
        }
            private void Form1_Load(object sender, EventArgs e)
            {

            Choices commands = new Choices();
            string[] phrases = new string[] {
            "test", "chicken"
            };
            Choices choiceSet = new Choices(phrases);
            GrammarBuilder grammarBuilder = new GrammarBuilder(choiceSet);
            GrammarBuilder gBuilder = new GrammarBuilder();
            gBuilder.Append(commands);
            Grammar grammar = new Grammar(gBuilder);

            recEngine.LoadGrammarAsync(grammar);
            recEngine.SetInputToDefaultAudioDevice();
            recEngine.SpeechRecognized += RecEngine_SpeechRecognized;
            }

        private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            switch (e.Result.Text)
            {
                case "balance breaker":
                    MessageBox.Show("Welsh Dragon, Balance Breaker");
                    break;
                case "balance break":
                    richTextBox1.Text += "\nBalance Break";
                    break;
            }
        }

        private void btnDisable_Click(object sender, EventArgs e)
        {
            recEngine.RecognizeAsyncStop();
            btnDisable.Enabled = false;
        }
    }
}


Если вы знаете, как решить эту проблему, я был бы очень рад, потому что это код, который я действительно хочу работать, и это также один из моих первых проектов, и я действительно начинаю заниматься кодированием, хотя, когда вы застреваете вот так, это становится действительно скучно!

Что я уже пробовал:

Я пробовал следующие "решения"

c# - по крайней мере одна грамматика должна быть загружена перед выполнением распознавания - переполнение стека[^]

По крайней мере одна грамматика должна быть загружена ошибка c#[^]

Хотя ни один из них не сработал

1 Ответов

Рейтинг:
1

Gerry Schmitz

Я хотел бы предложить, используя LoadGrammer (вместо "асинхронный"):

SpeechRecognitionEngine.Метод Loadgrammar (Грамматика) (System.Речь.Распознавание)[^]


Member 13921733

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

Куда я должен положить код?

частная btnEnable_Click недействительным(объект отправителя, EventArgs в электронной)
{
реинжиниринг.RecognizeAsync(RecognizeMode.Несколько); я должен заменить этот код на SpeechRecognitionEngine.Метод Loadgrammar (Грамматика) (System.Речь.Признание)??

btnDisable.Включен = истина;
}
частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{

Выбор команды = новый выбор();
string[] phrases = новая строка[] {
"нарушитель баланса", "нарушитель баланса"
};

Gerry Schmitz

У тебя было это:

Grammar grammar = новая грамматика(gBuilder);

реинжиниринг.LoadGrammarAsync(грамматика);
реинжиниринг.SetInputToDefaultAudioDevice();
реинжиниринг.SpeechRecognized += RecEngine_SpeechRecognized;

Измените "LoadGrammarAsync" выше на "LoadGrammer".

По крайней мере, прочтите свой собственный код.