web-dev-qa-db-fra.com

bonne API de reconnaissance vocale

Je travaille sur un projet de collège dans lequel j'utilise la reconnaissance vocale. Actuellement, je le développe sur Windows 7 et j'utilise le package API system.speech qui accompagne .net et je le fais sur C #.

Le problème auquel je suis confronté est que la reconnaissance de la dictée n'est pas suffisamment précise. Ensuite, chaque fois que je démarre mon application, la reconnaissance vocale du bureau démarre automatiquement. C'est une grande nuance pour moi. Comme déjà les mots que je prononce ne sont pas assez clairs et la reconnaissance conflictuelle est interprétée comme des commandes et des actions comme la commutation d'application minimiser est en cours d'exécution.

Ceci est une partie critique de mon application et je vous prie de bien vouloir me suggérer une bonne API vocale autre que cette erreur de Microsoft. Ce sera bon même s'il peut comprendre une grammaire de dictée simple.

26
swordfish

Je pense que la reconnaissance de bureau commence car vous utilisez un logiciel de reconnaissance de bureau partagé. Vous devez utiliser un identificateur inproc uniquement pour votre application. vous faites cela en instanciant un SpeechRecognitionEngine () dans votre application.

Étant donné que vous utilisez la grammaire de la dictée et le logiciel de reconnaissance des fenêtres du bureau, je pense que le locuteur peut le former pour améliorer sa précision. Suivez la formation de reconnaissance de Windows 7 et voyez si la précision s'améliore.

Pour commencer avec le discours .NET, il y a un très bon article qui a été publié il y a quelques années sur http://msdn.Microsoft.com/en-us/magazine/cc163663.aspx . C'est probablement le meilleur article d'introduction que j'ai trouvé jusqu'à présent. C'est un peu dépassé, mais très utile. (La méthode AppendResultKeyValue a été supprimée après la version bêta.)

Voici un exemple rapide qui montre l'une des applications Windows Forms .NET les plus simples pour utiliser une grammaire de dictée à laquelle je pourrais penser. Cela devrait fonctionner sur Windows Vista ou Windows 7. J'ai créé un formulaire. Lâché un bouton dessus et agrandi le bouton. Ajout d'une référence à System.Speech et à la ligne:

using System.Speech.Recognition;

J'ai ensuite ajouté le gestionnaire d'événements 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();
    }                          
}

Un peu plus d'informations comparant les différentes versions des moteurs vocaux et des API livrés par Microsoft peuvent être trouvées sur Quelle est la différence entre System.Speech.Recognition et Microsoft.Speech.Recognition? ?

35
Michael Levy