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

C# Discussion :

Problème avec la reconnaissance vocale


Sujet :

C#

  1. #1
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut Problème avec la reconnaissance vocale
    Bonsoir,

    Dans le cadre d'un projet, j'ai besoin d'utiliser la reconnaissance et la synthèse vocale.
    J'ai donc cherché des infos sur ces deux sujets et je n'ai trouvé que des cours traitant le Delphi ou le C#.
    Ainsi, j'ai codé mon truc en C# mais je coince sur la reconnaissance vocale (la synthèse tourne sans problème) : rien ne me fait penser que mon système fonctionne.

    Mon code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    using System;
    using SpeechLib;
     
    namespace Speech
    {
    	public class RecoVocale
    	{
    		public ISpeechRecoGrammar grammar;
    		public SpSharedRecoContextClass context;
    		public SpVoice voix;
    		public SpeechVoiceSpeakFlags flags;
    		public void HandlerReco(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult result)
    		{
    			string entree = result.PhraseInfo.GetText(0, -1, true);
    			string regle = result.PhraseInfo.Rule.Name;
     
    			Console.Out.WriteLine(entree);
    			Console.Out.WriteLine(regle);
    		}
    		public RecoVocale()
    		{
    			voix = new SpVoice();
    			flags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
    			voix.Volume = 100;
     
    			voix.Speak("Bonjour ! Note that my voice is in english because I don't speack French ! Then, we can begin. Let's go !", flags);
    			voix.WaitUntilDone(100000);
     
    			context = new SpSharedRecoContextClass();
    			context.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(HandlerReco);
     
    			grammar = context.CreateGrammar(0);
    			grammar.DictationLoad("", SpeechLoadOption.SLOStatic);
    			grammar.DictationSetState(SpeechRuleState.SGDSActive);
    		}
    	}
    	class main
    	{
    		static void Main(string[] args)
    		{
    			RecoVocale speech = new RecoVocale();
    			while(true);
    		}
    	}
    }
    A titre de précision, la reconnaissance vocale fonctionne chez moi, sous des programmes du type de Word.
    Par contre, je ne vois pas ce qui pose problème dans mon code.
    Accessoirement, j'ai commencé aujourd'hui le C#, donc ne me sortez pas des choses du genre de "Fais une multi-électro-perfusion béta-systémoique" parce que je risque de ne pas réussir à vous suivre.
    Le choix de la console et non de la fenêtre est fait exprès.

    Merci d'avance de votre aide,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Le problème est dans la console et le "while(true)," justement.

    Pour reconnaître une voix, il faut du CPU et votre CPU est monopolisé par votre boucle.

    Commencez par utiliser une interface graphique basique. On complexifiera avec des threads après.

  3. #3
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Merci de votre réponse.
    En effet, il y a un problème à ce niveau, je n'y avais pas pensé.
    Il n'y a pas une fonction permettant de faire s'effectuer les évènements, comme avec Qt, du type de QCoreApplication::processEvents() pour dégeler le programme ?
    Le soucis est en fait que je ne dois pas utiliser d'interface graphique pour mon projet, d'où cette question.
    Enfin, s'il n'y a pas d'autres solutions, je m'en contenterai...
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Une console est une "interface graphique".
    Si vous ne voulez pas d'interface du tout, c'est un service Windows qu'il vous faut. Et là vous n'aurez pas besoin d'une boucle mais d'un moyen pour communiquer avec lui autre que les entrées/sortie standards.
    Si vous voulez lancer votre programme via l'explorateur ou en ligne de command, les Winform dispose de la méthode "Application.Run()". Oui, elle existe aussi sans passer de Form.

    Franchement, je ne comprends toujours pas pourquoi vous ne voulez pas d'IHM si vous ne faite pas deService Windows.

  5. #5
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    C'est d'une Console que j'ai besoin en fait.
    Pour Application.Run(), que dois-je en faire ? De quel(s) using j'ai besoin ?
    Merci encore !
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Essaye de remplacer:
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While (true) System.Threading.Thread.CurrentThread.Sleep(10) ;
    Essaye aussi avec 100 ou 1 au lieu de 10.

    QCoreApplication::processEvents()
    Application.DoEvents() ... Peut-être ?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Avec ceci, il me met une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (true) System.Threading.Thread.CurrentThread.Sleep(10) ;
    Probablement un problème de usings ?
    Pour Application.DoEvents(), il me manque aussi la bonne using.
    Merci encore !
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pour Application.DoEvents(), il me manque aussi la bonne using.
    C'est en winforms seulement, désolé
    Sleep : un problème de usings ?
    Quel est le message d'erreur du compilateur?
    Quand tu saisis l'instruction "System.Threading.Thread.CurrentThread.Sleep", à partir de quel niveau, la saisie assistée ne te propose plus de méthodes ou de propriétés?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  9. #9
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static void Main(string[] args)
    {
    	RecoVocale speech = new RecoVocale();
    	while(true) System.Threading.Thread.CurrentThread.Sleep(10);
    }
    Le message d'erreur est celui-ci :

    'System.Threading.Thread.Sleep(int)' cannot be accessed with an instance reference; qualify it with a type name instead
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Ca marche en Winforms et apparament pas en appli console, essaye :
    Thread.Sleep(10);
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    C'est parfait avec une "fenêtre".
    Je précise que fenêtre est entre guillemets car j'ai viré la Form qui m'embêtais et ça fonctionne à merveille !
    Merci à vous deux !
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

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

Discussions similaires

  1. Problème avec apps de reconnaissance vocale
    Par louic dans le forum Android
    Réponses: 2
    Dernier message: 04/04/2012, 11h13
  2. [Problème] Reconnaissance vocale avec Sphinx4
    Par yannnnnnnnnn dans le forum Multimédia
    Réponses: 0
    Dernier message: 13/03/2010, 19h18
  3. problème de reconnaissance vocale
    Par RCV26 dans le forum Windows Vista
    Réponses: 0
    Dernier message: 30/07/2009, 23h00
  4. Synthèse et reconnaissance vocale avec speech sdk 5.1
    Par katebe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/03/2009, 16h34
  5. probleme avec la reconnaissance vocal de Ms agent.
    Par maxoudu328 dans le forum Langage
    Réponses: 7
    Dernier message: 03/05/2006, 23h42

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