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); } } }Message d'erreur
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();
J'ai trouve quelque problème similaire sur le forum
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)
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.
Partager