Also habe ich diesen Spracherkennungscode, mit dem ich mit der Spracherkennungs-Engine von Microsoft gearbeitet habe.Microsoft Speech Recognition Engine Zwischen den Grammatiken wechseln
Leider ist es nicht so fantastisch, Sprache zu verstehen, also habe ich über Möglichkeiten nachgedacht. Eine davon ist das Wechseln zwischen spezifischen Grammatiken und allgemeinen Wörterbuchgrammatiken. Ich kann mir nicht vorstellen, wie ich zwischen Grammatiken wechseln kann, wenn man die gegebene Sprache nicht erkennt.
Wenn mir jemand helfen kann, herauszufinden, wie man das konstruiert, wieder die Möglichkeit, von, sagen wir, meine CommandList-Grammatik zu DictationGrammar() zu wechseln, wenn meine CommandList-Grammatik die gesprochene Sprache nicht erkennen kann. Hier
ist der Code:
//using Microsoft.Speech.Recognition;
using System;
using System.Speech.Recognition;
using System.Windows.Forms;
using System.Collections.Generic;
namespace vRec
{
public class Form1
{
static int counter = 0;
static bool stop = false;
static string command = null;
static List<String> commandList = new List<string>() { "zooey", "open", "quit", "search", "close", "yes", "no" };
static Choices keywords = new Choices();
public static void Main()
{
command = null;
stop = false;
// Create an in-process speech recognizer for the en-US locale.
using (
SpeechRecognitionEngine recognizer =
new SpeechRecognitionEngine(
new System.Globalization.CultureInfo("en-US")))
{
keywords.Add(commandList.ToArray());
GrammarBuilder grammarBuilder = new GrammarBuilder(keywords);
Grammar testGrammar = new Grammar(grammarBuilder);
recognizer.LoadGrammar(testGrammar);
recognizer.LoadGrammar(new DictationGrammar());
// Add a handler for the speech recognized event.
recognizer.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
// Configure input to the speech recognizer.
recognizer.SetInputToDefaultAudioDevice();
// Start asynchronous, continuous speech recognition.
recognizer.RecognizeAsync(RecognizeMode.Multiple);
Console.WriteLine("NOT TERMINATED");
// Keep the console window open.
if(!stop)
Console.ReadLine();
}
}
// Handle the SpeechRecognized event.
public static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (counter == 2 && (e.Result.Text.ToUpper() == "YES" || e.Result.Text.ToUpper() == "US" || e.Result.Text.ToUpper() == "AS"))
{
counter = 0;
Console.WriteLine("THANK YOU LORD JEBUS");
stop = true;
SendKeys.SendWait("{ENTER}");
//command string to be passed in for functions in c++ code
}
else if (counter == 2 && (e.Result.Text.ToUpper() == "NO" || e.Result.Text.ToUpper() == "NOW" || e.Result.Text.ToUpper() == "KNOW" || e.Result.Text.ToUpper() == "OH" || e.Result.Text.ToUpper() == "NOT" || e.Result.Text.ToUpper() == "NOPE" || e.Result.Text.ToUpper() == "NAH"))
{
Console.WriteLine("Can you spell that?");
counter = 1;
command = e.Result.Text;
}
else if (counter == 2 && (e.Result.Text.ToUpper() != "YES" || e.Result.Text.ToUpper() != "US" || e.Result.Text.ToUpper() != "AS" || e.Result.Text.ToUpper() != "NO" || e.Result.Text.ToUpper() != "NOW" || e.Result.Text.ToUpper() != "KNOW" || e.Result.Text.ToUpper() != "OH" || e.Result.Text.ToUpper() != "NOT" || e.Result.Text.ToUpper() != "NOPE" || e.Result.Text.ToUpper() != "NAH"))
{
//Console.WriteLine(counter);
Console.WriteLine("Can you repeat that?");
counter = 1;
}
if (counter == 1)
{
command = e.Result.Text;
if (e.Result.Text.ToUpper() == "ALL BEEN" || e.Result.Text.ToUpper() == "OPIUM" || e.Result.Text.ToUpper() == "OLD AND" || e.Result.Text.ToUpper() == "HOLE IN" || e.Result.Text.ToUpper() == "HOPING" || e.Result.Text.ToUpper() == "OLD BEEN" || e.Result.Text.ToUpper() == "OPEN")
command = "open";
if (e.Result.Text.ToUpper() == "WAIT" || e.Result.Text.ToUpper() == "QUITE" || e.Result.Text.ToUpper() == "QUIP" || e.Result.Text.ToUpper() == "QUICK" || e.Result.Text.ToUpper() == "CLIP" || e.Result.Text.ToUpper() == "QUIT")
command = "quit";
if (e.Result.Text.ToUpper() == "SUCH" || e.Result.Text.ToUpper() == "SORT" || e.Result.Text.ToUpper() == "SEARCH")
command = "search";
if (e.Result.Text.ToUpper() == "RULES" || e.Result.Text.ToUpper() == "FELLOWS" || e.Result.Text.ToUpper() == "CLOSE")
command = "close";
commandList.Add(command);
Console.WriteLine(counter);
Console.WriteLine("Recognized text: " + command);
Console.WriteLine("Is this correct?");
for (int i = 0; i < commandList.Count; i++)
{
Console.WriteLine("/" + commandList[i]);
}
counter++;
}
if (e.Result.Text.ToUpper() == "ZOOEY" || e.Result.Text.ToUpper() == "ZOE" || e.Result.Text.ToUpper() == "EASILY" || e.Result.Text.ToUpper() == "SALLY" || e.Result.Text.ToUpper() == "ZONE" || e.Result.Text.ToUpper() == "ZONE WE" || e.Result.Text.ToUpper() == "SOLELY" || e.Result.Text.ToUpper() == "ZOELLICK" && counter == 0)
{
counter++;
Console.WriteLine("How can I help you?");
}
Console.WriteLine("Recognized text: " + e.Result.Text);
}
public static string getCommand()
{
return command;
}
}
}
Jede Hilfe würde geschätzt.^^