添加数字标签与语音识别
本文关键字:语音识别 标签 数字 添加 | 更新日期: 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;