1

この音声認識でエラーが発生しました。「認識を行う前に少なくとも1つの文法をロードする必要があります」というメッセージが表示され続けます。対応するリンク名を言うと、画像を表示できません。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SpeechLib;
using System.IO;
using System.Speech.Recognition;
using System.Globalization;

namespace SimpleSpeechRecognition
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private SpeechRecognitionEngine recognizer;

        private void Form1_Load(object sender, EventArgs e)
        {
            speechListBox1.Items.Add("Dog");
            speechListBox1.Items.Add("Elephant");
            speechListBox1.SpeechEnabled = true;

            recognizer = new SpeechRecognitionEngine(new CultureInfo("en-GB"));
            recognizer.SetInputToDefaultAudioDevice();

            Choices choices = new Choices("Dog", "Elephant");
            GrammarBuilder m_GrammarBuilder = new GrammarBuilder(choices);
            Grammar m_Speech = new Grammar(m_GrammarBuilder);
            recognizer.LoadGrammar(m_Speech);

            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
            recognizer.RecognizeAsync(RecognizeMode.Multiple);
        }

        void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            foreach (RecognizedWordUnit word in e.Result.Words)
            {
                switch (word.Text)
                {
                    case "Dog":
                        pictureBox1.Image = Image.FromFile("C:\\" + "dog.jpg");;
                        break;
                    case "Elephant":
                        pictureBox1.Image = Image.FromFile("C:\\" + "elephant.jpg");
                        break;
                }
            }
        }
        private void speechListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

            //MessageBox.Show(speechListBox1.SelectedItems[0].ToString());
            SayPhrase(speechListBox1.SelectedItems[0].ToString());
            //pictureBox1.Image = Image.FromFile("C:\\" + "dog.jpg");
            //pictureBox1.Image = Image.FromFile(((FileInfo)speechListBox1.SelectedItem).FullName);
            pictureBox1.Refresh();
        }


       private void SayPhrase(string PhraseToSay )
       {

                SpeechVoiceSpeakFlags SpFlags = new SpeechVoiceSpeakFlags();
                SpVoice Voice  = new SpVoice();
                Voice.Speak(PhraseToSay, SpFlags);

       }
    }
}
4

1 に答える 1

2

エラーは自明です:

音声エンジンには、リッスンする「選択肢」のコレクションが必要ですが、これらは、音声エンジンがリッスンするための適切な文法に組み込まれている必要があります。

GrammarBuilder m_GrammarBuilder = new GrammarBuilder(choices);
Grammar m_Speech = (m_GrammarBuilder);

次に、文法をロードします。

recognizer.LoadGrammar(m_Speech);

それはあなたの問題を解決するはずだと思います。.UnloadGrammar() 関数を使用して、さまざまな文法セットをアンロードおよびロードできることも注目に値します。

さらに、適切なカルチャ情報を使用して SpeechRecognitionEngine を初期化することも価値があります。英語 (英国) の場合:

new SpeechRecognitionEngine(new CultureInfo("en-GB"))
于 2013-02-16T16:22:58.770 に答える