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

avec Java Discussion :

Reconnaissance vocale


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 46
    Points : 36
    Points
    36
    Par défaut Reconnaissance vocale
    Bonjours,

    je suis en train de tester un tutoriel sur la reconnaissance vocale basé sur l'API Cloudgarden Java Speech .

    http://darylrobotproject.wordpress.c...ese-vocale-ok/

    code source
    http://pastebin.com/eCFYYQb5

    Toutes les API on été incluse correctement dans le projet. Seulement j'ai une erreur : NullPointerException sur la ligne : recognizer.allocate(); apparement l'objet ne serait pas initialisé.
    Intégralité du code source.
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
     
    import javax.speech.*;
    import t2s.son.LecteurTexte;
    import javax.speech.recognition.*;
    import javax.speech.synthesis.Synthesizer;
    import javax.speech.synthesis.Voice;
    import java.io.FileReader;
    import java.util.Locale;
     
    public class Recon extends ResultAdapter {
     
    	static Recognizer recognizer = null;
    	static Voice voice = null;
    	static Synthesizer synth = null;
     
    	// Permet de jouer une string en synthèse vocale
    	public static void lectureVocale(String reponse) {
    		LecteurTexte lt = new LecteurTexte(reponse);
    		lt.playAll();
    	}
     
     
    	// Call à la détection d'un nouvel ordre
    	public void resultCreated(ResultEvent e) {
    		System.out.println("Result Created...");
    	}
     
    	// Call à la detection d'un nouveau mot ou syllabe?
    	public void resultUpdated(ResultEvent e) {
    		Result r = (Result)(e.getSource());
    		System.out.println("Result Updated... "+r);
    	}
     
    	// Call si rien n'est trouvé (bruit ambiant...)
    	@Override
    	public void resultRejected(ResultEvent e) {
    		System.out.println("Result Rejected... ");
    	}
     
    	// Call si match avec un élément de la grammaire
    	@Override
    	public void resultAccepted(ResultEvent re) {
    		try {
    			Result res = (Result) (re.getSource());
    			// On récupère le meilleur token
    			ResultToken tokens[] = res.getBestTokens();
     
    			String phrase = "";
    			String gst = "";
     
    			for (int i = 0; i < tokens.length; i++) {
    				gst = tokens[i].getSpokenText();
    				phrase += gst + " ";
    				System.out.print(gst + " ");
    			}
     
    			System.out.println();
    			phrase = phrase.trim();
     
    			// Si égale à STOP on stop la recon
    			if (gst.equals("STOP")) {
     
    				recognizer.deallocate();
    				System.out.println(Constante.RECON_STOP);
    				lectureVocale(Constante.RECON_STOP);
    				System.exit(0);
     
    			} else {
     
    				// On met la recon en pause pour que la réponse ne face pas d'interférence
    				recognizer.pause();
     
    				// On cherche une réponse
    				String reponse = Constante.retournerReponse(phrase);
     
    				// Si réponse alors on joue le son OK et la réponse avec la synthèse vocale
    				if (!reponse.equals("")) {
     
    					Sound.jouerSon(Constante.PATH_SON_OK);
    					lectureVocale(reponse);
     
    				} else {
     
    					// Sinon on joue le son KO
    					Sound.jouerSon(Constante.PATH_SON_KO);
    				}
    				recognizer.resume();
    			}
    		} catch (Exception ex) {
    			System.out.println("Erreur: " + ex);
    		}
    	}
     
    	public static void main(String args[]) {
    		try {
     
    			// On initialise le moteur de reco
    			recognizer = Central.createRecognizer(new EngineModeDesc(Locale.ROOT));
    			recognizer.allocate();
     
    			// On lui indique le fichier de grammaire
    			FileReader grammar = new FileReader(Constante.PATH_GRAMM);
    			RuleGrammar rg = recognizer.loadJSGF(grammar);
    			rg.setEnabled(true);
     
    			// On lui indique que le mode dictation est activé en plus de la grammaire
    			DictationGrammar dictation;
    			dictation = recognizer.getDictationGrammar("dictation");
    			dictation.setEnabled(true);
     
    			SpeakerManager speakerManager = recognizer.getSpeakerManager();
     
    			// On applique le profil de reco Windows
    			SpeakerProfile profile = new SpeakerProfile();
    			SpeakerProfile[] profs = speakerManager.listKnownSpeakers();
    			for(int i=0;i<profs.length; i++) {
    				System.out.println("Found Profile "+i+" = "+profs[i].getName());
    				profile = profs[i];
    			}
     
    			speakerManager.setCurrentSpeaker(profile);
    			System.out.println("Current Profile set to "+speakerManager.getCurrentSpeaker().getName());
     
    			// On ajoute un listener
    			recognizer.addResultListener(new Recon());
     
    			lectureVocale(Constante.RECON_ACTIVE);
    			System.out.println(Constante.RECON_ACTIVE);
     
    			recognizer.commitChanges();
    			recognizer.requestFocus();
    			recognizer.resume();
     
    		} catch (Exception e) {
     
    			System.out.println("Exception: " + e.toString());
    			e.printStackTrace();
    			System.exit(0);
    		}
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     // On initialise le moteur de reco
     recognizer = Central.createRecognizer(new EngineModeDesc(Locale.ROOT));
                            recognizer.allocate();
    Message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Exception: java.lang.NullPointerException
    java.lang.NullPointerException
    	at Recon.main(Recon.java:98)
    J'ai trouve quelque problème similaire sur le forum

    http://www.developpez.net/forums/d86...uperer-string/

    http://www.developpez.net/forums/d12...e-vocale-java/

    http://www.developpez.net/forums/d11...ssance-vocale/

    Cela n'a malheureusement pas corrigé mon problème.
    Si vous avez une idée je suis preneur.

    Je vous remercie d'avance.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Comme dit la javadoc de Central.createRecognizer, ça retourne null si il est impossible de créer un engine avec les critères demandés.


    Commencer par faire un availableRecognizers() pour savoir ce qui est disponible.

Discussions similaires

  1. probleme avec la reconnaissance vocal de Ms agent.
    Par maxoudu328 dans le forum Langage
    Réponses: 7
    Dernier message: 03/05/2006, 23h42
  2. Recherche de moteurs de reconnaissance vocale
    Par Raylemon dans le forum Composants VCL
    Réponses: 1
    Dernier message: 17/08/2005, 17h00
  3. [C#] [WinForms] Reconnaissance vocale ?
    Par vandeyy dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/11/2004, 14h30
  4. Réponses: 8
    Dernier message: 05/10/2004, 00h02
  5. Logiciel professionnel de reconnaissance vocale
    Par samyl dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 01/04/2004, 14h11

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