IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Reconnaissance vocale : récupérer le nom de la règle ?


Sujet :

Windows

  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut Reconnaissance vocale : récupérer le nom de la règle ?
    Bonjour à tous,

    je tente de mettre au point un logiciel de reconnaissance vocale. Je passe par Vista et je développe en C# via le framework .NET (bibliothèque System.Speech).

    J'ai définit une grammaire de type SRGS (classe Grammar) via un fichier de définition grXML, ce genre là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?xml version="1.0" encoding="iso-8859-1" ?>
    
    <!DOCTYPE grammar PUBLIC "-//W3C//DTD GRAMMAR 1.0//EN"
                      "http://www.w3.org/TR/speech-grammar/grammar.dtd">
    
    <grammar xmlns="http://www.w3.org/2001/06/grammar"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.w3.org/2001/06/grammar 
                                 http://www.w3.org/TR/speech-grammar/grammar.xsd"
             xml:lang="fr-FR" version="1.0" root="cmd" mode="voice"
             tag-format="semantics-ms/1.0" >
    
    <rule id="cmd">
        <one-of>
          <item>quitter application</item>
          <item>éditer</item>
          <item>nouveau fichier</item>
        </one-of>
    </rule>
    
    </grammar>
    Au stade où j'en suis, l'application fonctionne bien : elle reconnait bien mes phrases si elles appartiennent à la grammaire.

    Maintenant, je voudrais adapter mon code en fonction de la commande prononcée.

    Comment faire ? Est-ce que je dois passer par un "if resultReco == 'ouvrir' " après chaque phrase reconnue ?
    N'y a-t-il pas un moyen plus efficace de procéder ?

    J'ai trouvé de la documentation sur VoiceXML, mais je crois comprendre qu'on ne peut l'utiliser que pour des applications Web (ce qui n'est pas mon cas).

    Quelle solution choisir ?

    Merci d'avance

  2. #2
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut Retourner le nom de la règle ?
    Bon eh bien je n'ai toujours pas progressé. J'ai abandonné l'idée de VoiceXML.

    J'ai une grammaire stockée dans un fichier XML comme expliqué ci-dessus, et j'ai créé une classe SRGSGrammaire, contenant une deuxième grammaire. Je charge les deux, elles sont bien reconnues.

    Mon plus gros problème maintenant, c'est pour reconnaître quelle règle de grammaire a été reconnue.

    Existe-t-il une propriété que je ne connais pas ?

    Voici un bout de mon code, détectant la reconnaissance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SpeechRecognitionEngine sre;
    ...
    sre = new SpeechRecognitionEngine();
    sre.SetInputToDefaultAudioDevice();
    gramCmd = new Grammar("C:\\...\\cmd.xml");
    gram = new Grammar(new SrgsGrammar());
    
    /* charge les grammaires */
    sre.UnloadAllGrammars();
    sre.LoadGrammar(gram);
    sre.LoadGrammar(gramCmd);
    
    /* sre_refProduit : fonction déclenchée lorsqu'une phrase est reconnue */
    sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sre_refProduit);
    sre.RecognizeAsync(RecognizeMode.Multiple);
    Je suis allée voir sur ce tuto de reconnaissance vocale, mais malheureusement il est trop vieux et n'utilise pas mes méthodes.

    Existe-t-il une solution pour récupérer le nom de la règle reconnue ?

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Eh bien j'ai fini par trouver toute seule

    Si d'autres ont le même problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     private void sre_refProduit(object sender, SpeechRecognizedEventArgs e)
    {
              textbox.Text = e.Result.Grammar.RuleName;
    }
    Ca semble évident une fois trouvé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. [reconnaissance vocal]récupérer les parametre wav
    Par daheda dans le forum C++Builder
    Réponses: 1
    Dernier message: 09/06/2008, 07h46
  3. Réponses: 10
    Dernier message: 21/02/2007, 20h16
  4. Récupérer le nom de l'utilisateur sous linux
    Par Michaël dans le forum POSIX
    Réponses: 7
    Dernier message: 25/12/2003, 21h38
  5. Récupérer le nom de la machine locale
    Par Jflgb dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/05/2003, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo