En cas d'erreur avec l'ASR il y a 3 erreurs possibles :
asrResult.text = "<nomatch>"; => l'ASR n'a trouvé aucune correspondance dans grammar
asrResult.text = "No result before the no-input timeout"; => l'ASR n'a rien entendu
asrResult.text = "<error_server_timeout>"; => le serveur ASR n'a pas répondu dans le temps imparti
Et du coup il y a peut-être un retour que tu ne testes pas qui te ferait sortir de la boucle (ce qui rejoint éventuellement la remarque de Xavier)
var onKarotzConnect = function(data) {
if (karotz_ip == 'localhost') {
karotz.serial.open("/dev/ttyGS0", 9600);
debuglog("**************** demarrage de l'application ***********");
debuglog(' appli lancee par ' + launchType.name);
debuglog(' identifiant du lapin : ' + params[instanceName].uuid);
}
karotz.button.addListener(buttonListener);
karotz.ears.addListener(earsListener);
if (defaut == 0) {
karotz.tts.start("Indiquez votre durée en minute ( de une à 120 ) ou donner un mot clé comme : oeuf à la coque ou lavage dent par exemple.", "fr", function(event) {
if ((event == "CANCELLED") || (event == "TERMINATED")) {
karotz.asr.string(grammar, "fr-FR", function(asrResult) {
jai_entendu = asrResult.text;
debuglog("voic ce que j'ai entendu : " + asrResult.text);
if (jai_entendu == "<nomatch>")
setTimeout(1000, function() { onKarotzConnect() });
au lieu de faire
karotz.asr.string("
karotine | arret produit", "fr-
FR",function(asrResult){le contenu de ma fonction ...}
remplacer par
karotz.asr.string("
karotine | arret produit", "fr-
FR",fonctionCbAsr}
ma fonctionCbAsr = function(asrResult){le contenu de ma fonction ...}
(suggestion faite par un développeur Violet) car il pense effectivement aussi à un problème de pile (mais où sont donc les bons vieux "stack overflow" d'antan :) , tout fout le camp ma pauv'dame)
J’ai déjà suivie cette piste hier soir, avec le code ci-dessous, sans résultat.
include("util.js");
var karotz_ip="192.168.0.33";
//var karotz_ip = "127.0.0.1";
var version = "2.1.9";
var grammar_language="fr-FR";
var compteur=1;
var ttsListener=function(event) {
if (event=="TERMINATED"){
karotz.led.light("0000FF");
grammar="oui|non";
karotz.asr.string(grammar, grammar_language, ASRListener);
}
return true;
}
var ASRListener = function(asrResult) {
log(asrResult.text);
karotz.led.light("FF0000");
main();
}
var main=function(event){
log (compteur);
compteur=compteur+1;
karotz.tts.start(" occurence numero " + compteur,"FR",ttsListener);
}
var onKarotzConnect = function(data) {
karotz.ears.reset();
main();
}
karotz.connectAndStart(karotz_ip, 9123, onKarotzConnect, {});
Bruno Lorenzi
Direction Technique Distribution
Centre de Diffusion Numérique
Canal+/Canalsat
276 rue Louis Blériot
92641 Boulogne Billancourt cedex
' 01.71.35.49.28
( 06.13.37.05.15
P Avant d'imprimer, pensez à l'environnement
De : karo...@googlegroups.com [mailto:karo...@googlegroups.com]
De la part de alain bregeon
Envoyé : vendredi 8 juin 2012 12:27
À : karo...@googlegroups.com
Objet : Re: [karotzdev] Re: arret du code sur boucle de reconnaissance vocale
Ce qui me choque dans ce code, si on suit la piste du stack overflow, c'est la constitution de la boucle.
En effet on re rentre dans le code simplement en l'appelant de nouveau; ça me paraît pas tres conforme, car celui-ci doit s'empilé.
Je me demande s'il le problème ne viendrait pas d'un "return" mal placé. Si tu veux faire un test de ton cote, prends le code que j'ai envoyé dans le mail précédent, on ne peux pas faire plus simple.
De : LORENZI Bruno [mailto:Bruno.LORENZI@canal-plus.com]
De : karo...@googlegroups.com [mailto:karotzdev@googlegroups.com] De la part de alain bregeon
include("util.js");
//var karotz_ip = "localhost"//ici votre adresse IP
var karotz_ip = "192.168.1.29"//ici votre adresse IP
//var karotz_ip = "10.0.252.180"//ici votre adresse IP
var compteur = 1;
var asrEncours = false;
var buttonListener = function(event) {
if (event == "DOUBLE") {
karotz.tts.stop();
exit();
}
return true;
}
var attendre = function(event)
{//on teste à intervalle régulier l'ASR
if (asrEncours) attendre();
karotz.asr.string("oui|non", "fr", ASRListener);
setTimeout(1000, function() { attendre(); return true; });
}
var ASRListener = function(asrResult)
{
asrEncours = true;
log("IN ASRListener" + asrResult.text);
switch (asrResult.text + "") {
case "oui":
karotz.led.light(GREEN);
karotz.tts.start("tu as dit oui ", "fr", function(event)
{
if ((event == "CANCELLED") || (event == "TERMINATED")) {
asrEncours = false;
return true;
}
});
break;
case "non":
karotz.led.light(RED);
karotz.tts.start("tu as dit non ", "fr", function(event)
{
if ((event == "CANCELLED") || (event == "TERMINATED")) {
asrEncours = false;
return true;
}
});
break;
default:
karotz.led.light(PURPLE);
karotz.tts.start(compteur + " fois ", "fr", function(event)
{
if ((event == "CANCELLED") || (event == "TERMINATED")) {
asrEncours = false;
compteur += 1;
return true;
}
});
break;
}
}
var onKarotzConnect = function(data)
{
log("je commence");
karotz.button.addListener(buttonListener);
attendre();
}karotz.connectAndStart(karotz_ip, 9123, onKarotzConnect, {});
Bon ça me rassure, pendant quelques minutes, je pensais que ça venait de moi :)
Quand pense tu de l'empilement du code quand il se re appel ? Est ce qu'il sort correctement après chaque appel?
De : KarMen [mailto:xavier.danest@gmail.com]
include("util.js");
var karotz_ip = "localhost"//ici votre adresse IP
//var karotz_ip = "192.168.1.46"//ici votre adresse IP
//var karotz_ip = "10.0.252.180"//ici votre adresse IP
var BLACK = "000000";
var BLUE = "0000FF";
var CYAN = "00FF9F";
var GREEN = "00FF00";
var ORANGE = "FFA500";
var PINK = "FFCFAF";
var PURPLE = "9F00FF";
var RED = "FF0000";
var YELLOW = "75FF00";
var WHITE = "4FFF68";
var compteur = 1;
var buttonListener = function(event) {
if (event == "DOUBLE") {
karotz.tts.stop();
exit();
}
return true;
}
var attendre = function()
{//on teste à intervalle régulier l'ASR
setTimeout(10000, function() { monASR(); });
}
var monASR = function()
{
karotz.asr.string("oui|non", "fr", ASRListener);
attendre();
}
var ASRListener = function(asrResult)
{
asrEncours = true;
log("IN ASRListener" + asrResult.text);
switch (asrResult.text + "") {
case "oui":
karotz.led.light(GREEN);
karotz.tts.start("tu as dit oui ", "fr", function(event)
{
if ((event == "CANCELLED") || (event == "TERMINATED")) {
return true;
}
});
break;
case "non":
karotz.led.light(RED);
karotz.tts.start("tu as dit non ", "fr", function(event)
{
if ((event == "CANCELLED") || (event == "TERMINATED")) {
return true;
}
});
break;
default:
karotz.led.light(PURPLE);
karotz.tts.start(compteur + " fois ", "fr", function(event)
{
if ((event == "CANCELLED") || (event == "TERMINATED")) {
compteur += 1;
return true;
}
});
break;
}
}
var onKarotzConnect = function(data)
{
log("je commence");
karotz.button.addListener(buttonListener);
attendre();
}
karotz.connectAndStart(karotz_ip, 9123, onKarotzConnect, {});
Merci Alain pour ces excellentes nouvelles et merci à Xavier pour le temps passé pour l’expertise.
Bruno Lorenzi
Direction Technique Distribution
Centre de Diffusion Numérique
Canal+/Canalsat
276 rue Louis Blériot
92641 Boulogne Billancourt cedex
' 01.71.35.49.28
( 06.13.37.05.15
P Avant d'imprimer, pensez à l'environnement
De : karo...@googlegroups.com [mailto:karo...@googlegroups.com]
De la part de alain bregeon
Envoyé : lundi 11 juin 2012 10:21
À : karo...@googlegroups.com
Objet : Re: [karotzdev] Re: arret du code sur boucle de reconnaissance vocale
Bruno, Xavier (et tout le monde)
De
: KarMen [mailto:xavier...@gmail.com]
Envoyé : Saturday, June 09, 2012 12:26 PM
À : karo...@googlegroups.com <karo...@googlegroups.com>
Objet : Re: [karotzdev] Re: arret du code sur boucle de reconnaissance vocale
J'ai essayé de travailler juste avec les événements, mais sans plus de succès.
Au bout de 30 ça plante.
@+
Xavier
Le vendredi 8 juin 2012 18:29:58 UTC+2, KarMen a écrit :
Je regarde ce soir ...
Le vendredi 8 juin 2012 17:03:51 UTC+2, Bruno a écrit :
Ce qui me choque dans ce code, si on suit la piste du stack overflow, c'est la constitution de la boucle.
En effet on re rentre dans le code simplement en l'appelant de nouveau; ça me paraît pas tres conforme, car celui-ci doit s'empilé.
Je me demande s'il le problème ne viendrait pas d'un "return" mal placé. Si tu veux faire un test de ton cote, prends le code que j'ai envoyé dans le mail précédent, on ne peux pas faire plus simple.
De
: LORENZI Bruno [mailto:Bruno....@canal-plus.com]
Centre de Diffusion Numérique
Canal+/Canalsat
276 rue Louis Blériot
92641 Boulogne Billancourt cedex
' 01.71.35.49.28
( 06.13.37.05.15
P Avant d'imprimer, pensez à l'environnement
De : karo...@googlegroups.com [mailto:karo...@googlegroups.com] De la part de alain bregeon
Bonjour Alexoueb
Ce bug qui date maintenant de 3 mois n'est toujours pas résolu.
J'ai relancé les équipes Violet qui n'ont pas pris la peine de me répondre.
j'ai réactivé le topic, il y a 2 semaines, pas de réponses.
j'ai rempli le Wiki, pas de réponses.
Il y a pourtant eu 2 mise à jour pendant l'été, une qui ajoutait de la music lors du boot du lapin, la seconde qui l'a supprimé.
Mais pas de nouvelles sur ce bug.
C'est dommage car j'avais pleins d'idées pour ce lapin, autre que lui faire dire la météo ou jouer de la music.
Maintenant, aux vues de la réactivité des équipes de dev et du support, le lapin va terminer sa vie sur le bon coin à la rubrique gadget inutile car pas fini.
Ce qui est reprochable, ce n'est pas le bug en lui-même, mais plutôt le silence de l'éditeur à ce sujet.
Heureusement, et je sais de quoi je parle, que tous les fournisseurs de service n'ont pas le même respect de leurs clients ou abonnées.
Donc, et pour finir, puisque le support ne veux pas résoudre ce bug, et si tu veux parler à ton lapin, tu fais comme les autres tu appuis sur le bouton, ce qui parait naturel pour tout le monde, plutôt que de t'adresser directement à lui.
On n’a juste pas la même notion de l’automatisme et de la domotique.
Cordialement,
Bonsoir,
Merci pour cette piste que je n'avais pas encore exploré, dans le cas du droïde.
Je vais faire quelques recherches...
Juste pour être sûr d'avoir compris, l'acquisition du son se fait à partir d'un micro branché sur l'arduino ? Car ce qui est intéressant sur le lapin, c'est qu'il n'y a pas d'apprentissage, donc tout le monde peut lui parler.
Sur Arduino, il existe des cartes d'acquisition mais il faut impérativement faire de l'apprentissage et il ne dispose que de quelques mots, d'où la pauvreté de ce module.
Bonjour, je voudrais ici apporter quelques nouvelles précisions à propos de ce problème "des 30 ASR", qui voit l'exécution d'une application embarquée dans le Karotz s'arrêter après 30 appels à la méthode de reconnaissance vocale. Comme il a été noté dans un message précédent, ce problème n'apparait pas lors de l'utilisation de la VM Java "externe", mais uniquement lors de l'utilsation de la VM embarquée dans le Karotz. Lorsque ce problème nous a été remonté, nous avons pu le reproduire systématiquement. Nous avons réalisé un certain nombre de tests et d'investigations pour en déterminer la cause. La VM embarquée dans le Karotz n'est pas la même que la VM "externe" qui est mise à la disposition des développeurs pour la création et le débuggage des applications; il s'agit même d'une VM totalement différente, provenant d'une source différente (entre autres, elle en C++ et compilée pour le système embarqué du Karotz, à la différence de la VM "externe", qui est en Java et conçue pour être portable). Jusque là, nous n'avons pas détecté de différence de comportement dans l'exécution des applications, lorsqu'elle sont exécutées par ces deux VM, et c'est ce qui nous permet de mettre cette VM "externe" à disposition des développeurs ... et de nous en servir nous même pour développer nos propres applications et de les tester avant de les embarquer entièrement dans le Karotz. Cependant, nos tests récent montrent effectivement que la manière dont l'ASR est gérée dans le Karotz consomme beaucoup de ressources aurpès de la VM embarquée, et qu'après un certain nombre d'appels (typiquement 30), cela ne fonctionne plus. Nous n'avions pas rencontré ce problème auparavant, car, même si nous savions que les tâches liées à l'ASR consommaient une quantité non négligeable de ressources à chaque appel, l'utilisation "habituelle" de l'ASR par les applications que nous avons développées ne faisaient que peu utilisation de l'ASR (au sein du foncionnement de l'application elle-même) ... et de fait, nous n'avions simplement jamais atteint cette limite. Comme je le décrivais dans mon message précédent, le modèle même d'interaction avec le Karotz que nous avons envisagé dès le départ ne prévoyait qu'un petit nombre d'utilisations de la reconnaissance vocale au cours de l'exécution d'une application... ce qui est d'ailleurs le modèle suivi par l'ensemble des applications mises à disposition sur notre site (dans la section Appz), et que les possesseurs de Karotz utilisent très régulièrement. Les raisons pour lesquelles les tâches d'ASR consomment d'importantes ressources auprès de la VM embarquée sont liées à la fois à la manière dont le code embarqué dans le Karotz interagit avec nos serveurs d'ASR, et à la gestion de ses ressources par la VM embarquée elle-même. Ces raisons sont assez "profondes", et une correction de ce problème nécessiterait de remettre en cause une importante partie de nos développements, liés principalement à l'interaction avec nos serveurs (et qui ne posent un probème de ressources qu'en relation avec la reconnaissance vocale). Ainsi, notre décision actuelle est de ne pas modifier - à court ou moyen terme - la manière dont les ressources et la reconnaissance vocale sont gérées actuellement dans le logiciel embarqué sur le Karotz, afin de ne pas impacter le fonctionnement de l'immense majorité des applications existantes auxquels la majorité de nos utilisateurs sont habitués, ainsi que la charge potentiellement beaucoup plus lourde que nos serveurs de reconnaissance vocale devraient alors supporter. Nous sommes tout à fait conscients que cela impose une "limite dure" pour le type d'applications que vous essayez de créer, qui reposent sur un grand nombre d'interaction vocales avec le Karotz lors de leur exécution. Nous aurions évidemment préféré pouvoir vous proposer une solution où l'utilisation d'une reconnaissance vocale "illimitée" aurait été possible simplement et immédiatement (... ainsi que de manière économiquement "légère"), mais ce n'est malheureusement pas le cas aujourd'hui. Emmanuel Orain eor...@karotz.com