Voglio creare una tastiera virtuale in grado di catturare qualsiasi tasto tu parli e inviare la sequenza di tasti all'applicazione attiva. La parte Virtual Keyboard e il collegamento a Speech Recognition saranno fatti facilmente, ma il problema che sto soffrendo è che il riconoscimento vocale è inefficiente!
Ad esempio, dico "c" e lo prende come "v" o qualcosa del genere. Questo è estremamente irritante e sebbene funzioni con il microfono delle mie cuffie Logitech, non riconosce ancora quello che sto dicendo a volte ... È peggio con il microfono predefinito sul mio laptop Lenovo.
Ma è strano che la funzione di riconoscimento vocale di Google sul motore di ricerca di Google funzioni perfettamente, con o senza mike ... Perché è così?
C'è un modo per migliorare il mio programma?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Synthesis;
using System.Speech.Recognition;
using System.Threading;
namespace TextToVoice
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SpeechSynthesizer sSynth = new SpeechSynthesizer();
PromptBuilder pBuilder = new PromptBuilder();
SpeechRecognitionEngine sRecognize = new SpeechRecognitionEngine();
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
pBuilder.ClearContent();
pBuilder.AppendText(textBox1.Text);
sSynth.Speak(pBuilder);
}
private void button2_Click(object sender, EventArgs e)
{
button2.Enabled = false;
button3.Enabled = true;
Choices sList = new Choices();
sList.Add(new string[] { "one", "2", "3", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"});
Grammar gr = new Grammar(new GrammarBuilder(sList));
try
{
sRecognize.RequestRecognizerUpdate();
sRecognize.LoadGrammar(gr);
sRecognize.SpeechRecognized += sRecognize_SpeechRecognized;
sRecognize.SetInputToDefaultAudioDevice();
sRecognize.RecognizeAsync(RecognizeMode.Multiple);
}
catch
{
return;
}
}
void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "exit")
{
Application.Exit();
}
else if (e.Result.Text == "how are you")
{
sSynth.Speak("I am fine");
textBox1.Text = "";
pBuilder.ClearContent();
}
else if (e.Result.Text == "hey")
{
sSynth.Speak("Hello sir");
textBox1.Text = "";
}
else
{
textBox1.Text = textBox1.Text + " " + e.Result.Text;
}
}
private void button3_Click(object sender, EventArgs e)
{
button2.Enabled = true;
button3.Enabled = false;
}
}
}
Okay una modifica .. Fondamentalmente c'è un modo per creare un programma in grado di migliorare l'intesa dell'applicazione di ciò che sto parlando? Come Windows Speech Recognition ci fa leggere il testo e poi capire come parlo parole o altro, tranne che è troppo noioso: P