2013-05-04 4 views
5

Ich mag würde wissen, wie man unten Mikrofonempfindlichkeit mit System.Speech in C# ..System.Speech unten Mikrofonempfindlichkeit

mir zu erklären, ich eine Grammatikdatei haben, und meine Anwendung sollten Sie mich damit beginnen aufzuzeichnen, wenn i sagen SIVRAJ (mein Programm Name)

aber ich völlig anders etwas sagen kann, und meine Anwendung etwas 'SIVRAJ' ...

Es ist ein Teil von meinem XML-Datei verstehen:

<rule id="mouskie" scope="public"> 
<item> 
    <one-of> 
    <item>SIVRAJ</item> 
    </one-of> 
</item> 
<ruleref special="GARBAGE" /> 
<one-of> 
    <item> 
    <one-of> 
     <item>quit</item> 
    </one-of> 
    <tag>$.mouskie={}; $.mouskie._value="QUIT";</tag> // quit programm when i say SIVRAJ + quit 
    </item> 
    ..... etc etc 

Und dies ist die Funktion, die Recognition Engine starten:

SrgsDocument xmlGrammar = new SrgsDocument("Grammaire.grxml"); 
Grammar grammar = new Grammar(xmlGrammar); 
ASREngine = new SpeechRecognitionEngine(); 
ASREngine.SetInputToDefaultAudioDevice(); 
ASREngine.LoadGrammar(grammar); 

ASREngine.SpeechRecognized += ASREngine_SpeechRecognized; 
ASREngine.SpeechRecognitionRejected += ASREngine_SpeechRecognitionRejected; 
ASREngine.SpeechHypothesized += ASREngine_SpeechHypothesized; 

Schließlich erholen i Daten hier:

recoText.Text = e.Result.Text; 
devine.Text = ""; 
affiche.Text = ""; 

string baseCommand = e.Result.Semantics["mouskie"].Value.ToString(); 
commandText.Text = baseCommand; 

if (baseCommand.Equals("QUIT")) 
{ 
    m_SpeechSynth.Speech("au revoir", VoiceGender.Male, VoiceAge.Adult); 
    Environment.Exit(0); 
} 

Antwort

2

In diesem Szenario Sie wirklich nicht für Mikrofonempfindlichkeit suchen. Was ich glaube, dass Sie suchen, ist Phrasenvertrauen.

Wenn der Motor eine Erkennungsergebnisse zurückgibt, gibt er auch einen Konfidenzwert zurück. "Grundsätzlich gesagt, das ist, wie zuversichtlich ich bin, dass was ich gehört habe, was du gesagt hast."

if (Speech.Recognition.RecognitionResult.Confidence > .20) 
{ 
    //do some good stuff 
} 
else 
{ 
    // ignore 
} 

Dieser enthält einen Wert von 0 bis 1 1 mit den meisten zuversichtlich und 0 im Grunde sein Hintergrundrauschen verursachen reco Ereignisse sein. Sie müssen damit experimentieren, welcher Vertrauenswert sinnvoll ist, da er stark grammatikalisch und umgebungsspezifisch ist.

Eine andere Sache, die Sie tun könnten, ist das Triggerwort zu ändern. Ich bezweifle, dass das Lexikon für die Sprachmaschine den Ausdruck SIVRAJ enthält. In diesem Fall wird die Engine versuchen, zu erraten, welche Phoneme dieses Wort bilden (Sie können sie selbst in der Grammatik als benutzerdefinierte Aussprache angeben, wenn Sie einen sprachlichen Hintergrund haben). Etwas wie Start Recording wird eine bessere Chance haben, dir eine anständige Erfahrung zu geben.