简体   繁体   中英

Adding numbers to label with Speech Recognition

I am having trouble with the counting ToString(); I am trying to make the program add one number like 1, 2 then 3 after every time the users says one of the animals name, thus adding one number to the counting display (score board) that will be displayed within the lblCount label for the user to see

At the moment I have this for everything

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.Enabled = true;
            panel1.Enabled = false;
            panel2.Enabled = false;

            pictureBox2.Image = Image.FromFile(@"C:\animals\" + "happy.jpg");
            lblTitle2.Text = "WELCOME";

            pictureBox1.Image = Image.FromFile(@"C:\animals\" + "zoo.jpg");
            lblTitle.Text = "WELCOME";

            speechListBox1.Items.Add("Dog");
            speechListBox1.Items.Add("Elephant");
            speechListBox1.Items.Add("Cat");
            speechListBox1.Items.Add("Bird");
            speechListBox1.Items.Add("Rabbit");

            recognizer = new SpeechRecognitionEngine(new CultureInfo("EN-US"));
            recognizer.SetInputToDefaultAudioDevice();

            Choices choices = new Choices("Dog", "Elephant", "Cat", "Bird", "Rabbit");
            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)
            {
                int count = 0;
                count += 1;

                switch (word.Text)

                {
                    case "Dog":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "dog.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "DOG";
                        lblCount.Text = count.ToString();
                        break;
                    case "Elephant":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "elephant.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "ELEPHANT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Cat":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "cat.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "CAT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Bird":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "bird.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "BIRD";
                        lblCount.Text = count.ToString();
                        break;
                    case "Rabbit":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "rabbit.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "RABBIT";
                        lblCount.Text = count.ToString();
                        break;
                }
            }
        }

        private void SayPhrase(string PhraseToSay)
        {

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

        }

        private void speechListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            SayPhrase(speechListBox1.SelectedItems[0].ToString());
            pictureBox1.Refresh();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            panel1.Enabled = true;
            panel2.Enabled = false;
            speechListBox1.Enabled = true;
            pictureBox1.Enabled = true;
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            panel1.Enabled = false;
            panel2.Enabled = true;
            speechListBox1.Enabled = false;
            pictureBox1.Enabled = false;
        }
    }
}

This is the part I am working on for this label

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {

            foreach (RecognizedWordUnit word in e.Result.Words)
            {
                int count = 0;
                count += 1;

                switch (word.Text)

                {
                    case "Dog":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "dog.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "DOG";
                        lblCount.Text = count.ToString();
                        break;
                    case "Elephant":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "elephant.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "ELEPHANT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Cat":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "cat.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "CAT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Bird":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "bird.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "BIRD";
                        lblCount.Text = count.ToString();
                        break;
                    case "Rabbit":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "rabbit.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "RABBIT";
                        lblCount.Text = count.ToString();
                        break;
                }
            }
        }

I am not sure I understand your issue entirely, but I do see what appears to be a fairly blatent error:

        foreach (RecognizedWordUnit word in e.Result.Words)
        {
            int count = 0;
            count += 1;

This resets the count to 0 each time through the loop, and then immediately adds 1 to it, so your label will always say 1.

Just move the initializer outside the loop.

        int count = 0;
        foreach (RecognizedWordUnit word in e.Result.Words)
        {
            count += 1;

If you're wanting to display the total count over the lifetime of the program, you need to move your count variable to be a member of your Form. Like this:

public partial class Form1 : Form
{  
     private int count = 0;
     // ...
}

Then change your event handler to be like this:

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {

        foreach (RecognizedWordUnit word in e.Result.Words)
        {
            count += 1;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM