I am developing an application in c# 3.5 version for speech recognition
to recognize the wav file and convert the conversation into text. But I
have a problem that it recognize only a few words. I need to improve the
accuracy of my application.using System;
using System.IO;
using System.Collections.Generic;
using System.Speech;
using System.Speech.Synthesis;
using System.Speech.AudioFormat;
using System.Speech.Recognition;
using System.Speech.Recognition.SrgsGrammar;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO.IsolatedStorage;
using System.IO.Compression;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
namespace SRtest
{
public partial class Form1 : Form
{
private SpeechRecognitionEngine MySpeechRecognitionEngine = null;
// private SpeechSynthesizer synthesizer = null;
// private const string VOICE_FILE = @"C:\Comdyn\AccTestSoundFiles\Darrells audio_25595 Voice Mail from Charlotte Bobcats.wav";
// private const string VOICE_FILE = @"C:\Comdyn\AccTestSoundFiles\Darrells audio_141554 Voice Mail from School Principal.wav";
public Form1()
{
InitializeComponent();
MySpeechRecognitionEngine = new SpeechRecognitionEngine();
try
{
// MyForm.Invoke(Form, new Object[] { });
}
catch (Exception ex)
{
MessageBox.Show(ex.InnerException.Message);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void InitializeSpeechRecognitionEngine(String filePath)
{
//MySpeechRecognitionEngine.SetInputToDefaultAudioDevice();
MySpeechRecognitionEngine.UnloadAllGrammars();
try
{
MySpeechRecognitionEngine.SetInputToWaveFile(filePath);
Process.Start("C:\\Program Files\\Windows Media Player\\wmplayer.exe", ("\"" + filePath + "\""));
MySpeechRecognitionEngine.LoadGrammar(new DictationGrammar());
MySpeechRecognitionEngine.RecognizeAsync(RecognizeMode.Single);
MySpeechRecognitionEngine.AudioLevelUpdated +=
new EventHandler<AudioLevelUpdatedEventArgs>(MySpeechRecognitionEngine_AudioLevelUpdated);
MySpeechRecognitionEngine.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(MySpeechRecognitionEnginee_SpeechRecognized);
MySpeechRecognitionEngine.AudioStateChanged +=
new EventHandler<AudioStateChangedEventArgs>(MySpeechRecognitionEnginee_AudioStateChanged);
MySpeechRecognitionEngine.RecognizeCompleted +=
new EventHandler<RecognizeCompletedEventArgs>(MySpeechRecognitionEngine_RecognizeCompleted);
}
catch (Exception ex)
{
label1.Text = ex.Message.ToString();
}
}
private void MySpeechRecognitionEnginee_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result != null)
{
SpeechRecognizer recognizer = new SpeechRecognizer();
DisplayBasicPhraseInfo(label2, e.Result, recognizer);
label1.Text = label1.Text + e.Result.Text + " \n ";
// Thread.Sleep(3000);
}
}
private void MySpeechRecognitionEngine_AudioLevelUpdated(object sender, AudioLevelUpdatedEventArgs e)
{
label2.Text = e.AudioLevel.ToString();
}
private void MySpeechRecognitionEnginee_AudioStateChanged(object sender, AudioStateChangedEventArgs e)
{
audioLevelValue.Text = e.AudioState.ToString();
}
private void MySpeechRecognitionEngine_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog fdlg = new OpenFileDialog();
fdlg.Title = "C# Corner Open File Dialog";
fdlg.InitialDirectory = @"C:\Comdyn\AccTestSoundFiles\";
fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*";
fdlg.FilterIndex = 2;
fdlg.RestoreDirectory = true;
if (fdlg.ShowDialog() == DialogResult.OK)
{
textBox1.Text = fdlg.FileName;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text != string.Empty)
{
InitializeSpeechRecognitionEngine(textBox1.Text.ToString());
}
else
{
label1.Text = "Please select a file first";
}
}
internal static void DisplayBasicPhraseInfo(Label label, RecognizedPhrase result, SpeechRecognizer recognizer)
{
if (result != null && label != null)
{// Blank
if (recognizer != null)
{ //Clear
label.Text += String.Format(
" Recognizer currently at: {0} mSec\n" +
" Audio Device currently at: {1} mSec\n",
recognizer.RecognizerAudioPosition.TotalMilliseconds,
recognizer.AudioPosition.TotalMilliseconds);
}
if (result != null)
{ //Clear
RecognitionResult recResult = result as RecognitionResult;
if (recResult != null)
{
RecognizedAudio resultRecognizedAudio = recResult.Audio;
if (resultRecognizedAudio == null)
{
label.Text += String.Format(
" Emulated input\n");
}
else
{
label.Text += String.Format(
" Candidate Phrase at: {0} mSec\n" +
" Phrase Length: {1} mSec\n" +
" Input State Time: {2}\n" +
" Input Format: {3}\n",
resultRecognizedAudio.AudioPosition.TotalMilliseconds,
resultRecognizedAudio.Duration.TotalMilliseconds,
resultRecognizedAudio.StartTime.ToShortTimeString(),
resultRecognizedAudio.Format.EncodingFormat.ToString());
}
}
label.Text += String.Format(" Confidence Level: {0}\n", result.Confidence);
if (result.Grammar != null)
{
label.Text += String.Format(
" Recognizing Grammar: {0}\n" +
" Recognizing Rule: {1}\n",
((result.Grammar.Name != null) ? (result.Grammar.Name) : "None"),
((result.Grammar.RuleName != null) ? (result.Grammar.RuleName) : "None"));
}
if (result.ReplacementWordUnits.Count != 0)
{
label.Text += String.Format(" Replacement text:\n");
foreach (ReplacementText rep in result.ReplacementWordUnits)
{
label.Text += String.Format(" At index {0} for {1} words. Text: {2}\n",
rep.FirstWordIndex, rep.CountOfWords, rep.Text);
}
label.Text += String.Format("\n\n");
}
}
}
}
}
}
|
手机版|小黑屋|BC Morning Website ( Best Deal Inc. 001 )
GMT-8, 2025-12-13 12:16 , Processed in 0.014778 second(s), 18 queries .
Supported by Best Deal Online X3.5
© 2001-2025 Discuz! Team.