Ich verwende MSDN SpeechRecognitionEngine
in meinem Programm. Das Problem ist, dass Hintergrundgeräusche als Sprache erkannt werden.SpeechRecognition erkennt Hintergrundgeräusche als Sprache
Zum Beispiel, wenn schnappen meine Finger, tippen Sie auf den Tisch, oder bewegen Sie meinen Stuhl, es nimmt das als Sprache.
Warum in der Welt Dosis Hintergrundgeräusche als Sprache erkennen.
Ich schnappe meine Finger Dosis nicht das gleiche wie ich sage "Notepad" !!!
Hier ist der Code
using System;
using System.Threading;
using System.Speech;
using System.Speech.Synthesis;
using System.Speech.Recognition;
namespace SpeachTest
{
public class MainClass
{
static void Main()
{
MainClass main = new MainClass();
SpeechRecognitionEngine sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));
Choices choiceList = new Choices();
choiceList.Add(new string[]{"Open", "Close", "Then", "Volume", "Up", "Firefox", "Notepad", "Steam","turn", "the", "now" });
GrammarBuilder builder = new GrammarBuilder();
builder.Append(choiceList);
Grammar grammar = new Grammar(new GrammarBuilder(builder,0, 10));
sre.SpeechRecognized += main.sreRecognizedEvent;
sre.SpeechDetected += main.sreDetectEvent;
sre.SpeechRecognitionRejected += main.sreRejectEvent;
sre.RecognizeCompleted += main.sreCompleteEvent;
sre.InitialSilenceTimeout = TimeSpan.FromSeconds(0);
sre.BabbleTimeout = TimeSpan.FromSeconds(0);
sre.EndSilenceTimeout = TimeSpan.FromSeconds(0);
sre.EndSilenceTimeoutAmbiguous = TimeSpan.FromSeconds(0);
sre.SetInputToDefaultAudioDevice();
sre.LoadGrammar(grammar);
while(true){
sre.Recognize();
}
}
void sreRecognizedEvent(Object sender, SpeechRecognizedEventArgs e){
Console.Write("Reconized ~ " + e.Result.Text + " ~ with confidence " + e.Result.Confidence);
Console.WriteLine();
}
void sreDetectEvent(Object sender, SpeechDetectedEventArgs e){
Console.WriteLine("Detected some type of input");
}
void sreRejectEvent(Object sender, SpeechRecognitionRejectedEventArgs e){
Console.WriteLine("Rejected Input ~ " + e.Result.Text) ;
}
void sreCompleteEvent(Object sender, System.Speech.Recognition.RecognizeCompletedEventArgs e){
Console.WriteLine("Completed Recongnization");
}
}
}
Wenn Sie die Dokumente lesen, sieht es so aus, als ob Sie sich die Eigenschaften BabbleTimeout, InitialSilenceTimeout, EndSilenceTimeout und EndSilenceTimeoutAmbigny ansehen könnten. –
Nur aktualisierten Code und alle diese Eigenschaft auf 0 gesetzt. Hat nichts geändert – JackBarn
@JackBarn Warum hast du 0 für 'BabbleTimeout' versucht? Ich habe andere nicht überprüft, aber für 'BabbleTimeout' ist 0 der Standardwert. Was passiert für Werte über ein paar Sekunden? – Mehraban