添加数字标签与语音识别

本文关键字:语音识别 标签 数字 添加 | 更新日期: 2023-09-27 18:05:36

我在计数ToString();时遇到了麻烦,我试图使程序在每次用户说出其中一个动物名称后添加一个数字,如1,2,3,从而在计数显示(计分板)中添加一个数字,该数字将显示在lblCount标签内,供用户查看

目前我有这个为所有

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;
        }
    }
}

这是我正在为这个标签工作的部分

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;
                }
            }
        }

添加数字标签与语音识别

我不确定我完全理解你的问题,但我确实看到了一个相当明显的错误:

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

这将在每次循环中将计数重置为0,然后立即为其添加1,因此您的标签将始终显示1。

只需将初始化式移出循环。

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

如果要显示程序生命周期内的总数,则需要将count变量移动为窗体的成员。这样的:

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

然后把你的事件处理程序改成这样:

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        foreach (RecognizedWordUnit word in e.Result.Words)
        {
            count += 1;