2010-11-18 23 views
2

J'essaie de reconnaître la parole avec Windows 7 mais il reconnaît toujours un discours comme une commande ou dit simplement "Qu'est-ce que c'était?".SAPI et Windows 7 Problème

Comment puis-je obtenir tous les discours?

CODE:

SpeechRecognizer _speechRecognizer; 

    public Window1() 
    { 
     InitializeComponent(); 

     // set up the recognizer 
     _speechRecognizer = new SpeechRecognizer(); 
     _speechRecognizer.Enabled = false; 
     _speechRecognizer.SpeechRecognized += 
     new EventHandler<SpeechRecognizedEventArgs>(_speechRecognizer_SpeechRecognized); } 

Répondre

5

Peut-être que vous voulez utiliser l'espace de noms .net System.Speech au lieu de SAPI? Il y a un très bon article qui a été publié il y a quelques années au http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. C'est probablement le meilleur article d'introduction que j'ai trouvé jusqu'ici. C'est un peu démodé, mais très helfpul. (La méthode AppendResultKeyValue a été supprimée après la version bêta.)

Essayez-vous d'utiliser un module de reconnaissance partagé? C'est peut-être pourquoi vous voyez des commandes. Avez-vous une tâche spécifique pour la reconnaissance? Dans ce cas, vous seriez mieux servi avec une grammaire spécifique à la tâche et un outil de reconnaissance inproc.

Si vous devez gérer des mots, utilisez le DictationGrammar fourni avec System.Speech. Voir http://msdn.microsoft.com/en-us/library/system.speech.recognition.dictationgrammar%28VS.85%29.aspx

Pour le plaisir, j'ai assemblé l'application .NET Windows Forms la plus simple pour utiliser une grammaire de dictée à laquelle je pouvais penser. J'ai créé un formulaire. Il a laissé tomber un bouton dessus et a fait le gros bouton. Ajout d'une référence à System.Speech et la ligne:

using System.Speech.Recognition; 

Puis j'ajouté le gestionnaire d'événement suivant à button1:

private void button1_Click(object sender, EventArgs e) 
{   
    SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(); 
    Grammar dictationGrammar = new DictationGrammar(); 
    recognizer.LoadGrammar(dictationGrammar); 
    try 
    { 
     button1.Text = "Speak Now"; 
     recognizer.SetInputToDefaultAudioDevice(); 
     RecognitionResult result = recognizer.Recognize(); 
     button1.Text = result.Text; 
    } 
    catch (InvalidOperationException exception) 
    { 
     button1.Text = String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message); 
    } 
    finally 
    { 
     recognizer.UnloadAllGrammars(); 
    }       
} 
+0

Merci Michael. J'ai besoin de reconnaître chaque mot. Tous les exemples du lien que vous avez donné concernent la construction de commandes. Comment puis-je obtenir tout? – Kaan

+0

Si vous utilisez le logiciel de reconnaissance de bureau (fourni avec Windows Vista et 7), il est livré avec une grammaire de dictée intégrée. Voir http://msdn.microsoft.com/en-us/library/system.speech.recognition.dictationgrammar%28VS.85%29.aspx –

+0

J'ai mis à jour la réponse pour inclure un exemple d'utilisation de DictationGrammar. –