Reconnaissance vocale, traitement du langage naturel et controle commande

  • Réponses :0
Arnaud BOIS
  • Posts de Forum 1

14 oct. 2013 à 19:05:56 via site

Pour réaliser l’analyse d’une commande vocale j’utilise trois mots, le premier décrit l’action, le second l’élément et le troisième l’emplacement
Ex Allumer lumière salon, éteindre lumière salon

Je dispose de trois tableaux contenant les actions, éléments et emplacements.
Lorsqu’une commande vocale est reconnue l’api androïd renvoie un tableau de chaine,
Je parcourt les tableaux et recherche les mots dans la chaine si je trouve une occurrence je sauvegarde l’index du tableau.
Ex
ACTION = 0 (allumer), ELEMENT=0 (lumière), EMPLACEMENT=2(salon).
ACTION = 1 (éteindre), ELEMENT=0 (lumière), EMPLACEMENT=2(salon).

Ensuite je détermine un code commande avec une formule de la forme :
65536 *ELEMENT +256* EMPLACEMENT+ ACTION
Soit 0*65536+2*256+0=512 pour allumer lumière salon
Et 0*65536+2*256+1=513 pour éteindre lumière salon

J’envoie ensuite ce code à une méthode de la classe qui se charge d’envoyer une commande Modbus à l’automate. La méthode lit les états des lumières, une structure switch case sélectionne les instructions a exécuter selon l’état de la lumiere.et le code commande calculé

La solution actuelle suffisait pour des actions simples, et encore j’ai dut tricher par exemple pour les 2 volets de la cuisine ; j’ai rajouté les emplacments : cuisine coté et cusine arrière 2 mots au lieu d’un mais bon cela fonctionne

Maintenant je me trouve devant le problème suivant : je veux commander l’amplificateur home cinéma, pour l’allumer et l’éteindre mon code actuel suffit. : Allumer amplificateur salon
Mais dès lors que je veux par exemple : sélectionner radio amplificateur

Je me retrouve devant le problème suivant : L’amplificateur doit se trouver dans la liste des éléments pour :
Allumer amplificateur salon
Mais également dans la liste des emplacements pour
Sélectionner radio amplificateur

Je parcours les listes emplacement puis élément puis action, je songe à comparer les occurrences emplacement et element en ignorant l’occurrence element si un emplacement à été déjà trouvé.

Ainsi pour Sélectionner radio amplificateur

En parcourant la liste des emplacements je trouve une occurrence amplificateur index = empX j’arrête le parcours de la liste

Ensuite je parcours la liste des elements je trouve la aussi amplificateur elmX. Je compare les chaines emplacements[empX] et elements[elmX] ils sont identiques aussi j’ignore cette occurrence pour elements et je passe au suivant et là je trouve radio à l’index elmY. j’arrête le parcours de la liste elements

Enfin je parcourt la liste des actions et je trouve l’action sélectionner. j’arrête le parcours de la liste
Bon dans ce cas je peux différencier un même objet selon qu’on emplacement ou qu’on lui demande d’accomplir l’action

Maintenant imaginons que j’ai deux amplificateurs comment puis-je différencier les amplificateur ?
En stockant la chaine au moment du traitement de la commande sélectionner radio amplificateur la méthode gérant les commandes doit savoir que deux amplificateurs existe et quels sont leur emplacement. Ensuite on peut chercher l’emplacement dans la chaine que l’on a gardé ...Cela doit pouvoir se faire

Maintenant je veux gérer le volume de ces deux amplificateurs compte tenu des instructions de la méthode j’arrive a déterminer quel amplificateur ; mais je n’ai pas donné de valeurs. J’ai seulement dit :
augmenter volume amplificateur du salon

La je peux soit programmer un échange question, réponse ou utiliser un incrément de volume par défaut. De même pour sélectionner radio, je voudrais que le programme me demande quel station ou en choisisse une par défaut
Je voudrais me rapprocher du modèle objet Objet méthode (paramètre) objet . propriété

Bon en fait je l’avoue c’est un sujet qui éprouve sérieusement mes compétences, je me perds en conjoncture et je sens qu’il faut me poser pour ne pas coder, recoder et surcoder. Aussi j’en appel à l’aide des bonnes volontés pour quelques conseils judicieux.:*)
Je vous remercie de votre sollicitude

PS : l’ensemble du code de mon application est disponible ici :CENSURE NEWBIE:vader:
La classe qui nous intéresse est RECENSURE NEWBIE:vader:

Répondre