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

Python Discussion :

traitement de phrases assistent vocal


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut traitement de phrases assistent vocal
    bonjours a tous ! (désoler par avance pour les fautes, je suis dyslexique) je développe un assistent vocal domotique sans prétention depuis quelque temps en python 3.X. pour la reconnaissance vocal j'utilise l'API de google et je lance la reconnaissance vocale a l'aide d'un mot clef grâce a snowboy. il peut allumer des lampes, le chauffage mai aussi effectuer de recherche web, des traduction, donner de définition avec la librairie Wikipedia etc. il tourne sous Raspbian sur une rpi. mon problème est le suivent :

    quand je récupère la phrase reconnue par google. je doit la traiter pour déterminer l'action a effectuer (recherche, définition etc.), cependant pour l’instant je fonctionne par mot clef avec des ligne de codes bête et méchant. le code n'est qu'un alignement de :

    if mot_clef1 in phrase or mot_clef2 in phrase and mot_clef3 in phrase : effectuer l'action

    cependant ce système est fastidieux a coder, et peut perforent car le temps de travaille serai très long si on devais programmer tout les phrase possible or si on met peut de mot clef dans notre condition cela peut être présidentiable pour la précision (faut positifs).

    j'aimerai donc savoirs si il y aurai un moyen plus élégant que des condition à outrance ou/et plus préci pour analyser les phrase reconnue ?

  2. #2
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Bonjour,
    Je ne connaît pas L'api Google, mais quand je voit : if mot_clef1 in phrase or mot_clef2 in phrase and mot_clef3 in phrase : effectuer l'action est-ce que faire quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if phrase.split()[0] == "recherche":
    	a = phrase.split().pop(0)
    	fonction_recherche_google(' '.join(a))
    elif phrase in "allume les lampes":
    	...
    elif ..
    Ce n'est qu'une proposition, sinon si tu souhaite avoir plein de commande je suis pas sur que tu puisse le faire autrement que comme ça.
    Le seul truc que tu peut faire c'est à la limite passer ta phrase en argument d'une fonction (ex recherche_google)

  3. #3
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    oui c'est ça, vous auriez une idée plus élégante que mon fonctionnent actuel ? quand à l'API google elle ne fais que transcrire en texte un enregistrent audio.

  4. #4
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Bah je pense pas qu'il va y avoir 15 000 fonctions.
    Détecter le mot clef de l'instruction (ex recherche Google, recherche wikipedia, recherche YouTube, Ect ..) qui sera le premier mot de la phrase, et tu passes en argument le reste de la phrase, exemple d'utilisation dans mon précédant post.


    Pour des instructions du type 'allume les lampes' le mot clef peut être 'allumer':
    et après je ne sais pas comment tu gères ça et je n'y connaît rien mais si tu passes par un controller physique qui gère lampe, chauffage et compagnie je pense que l'utilisation d'un dictionnaire du type {'lampe' : 1, 'gaz': 2, 'volet': 3, ... } peut être intéressant, tu passes au controller juste un ID et lui pourrait switch on/off la sortie n°ID ?
    Bien sur c'est dans le cas où tu aurais un controller physique, m'enfin maintenant avec l'explosion du "tout connecter" je suis pas certains..

  5. #5
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    si si j'ai un contrôle physique, je gère ça avec des des relais ou j’émule les télécommandes IR de mes lampes led. et le dictionnaire serai une bonne idée, j'ai aussi entendu parler du xml mai je sais pas trop si c'est adapter a cette situation.

  6. #6
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Citation Envoyé par micka.Lo Voir le message
    si si j'ai un contrôle physique, je gère ça avec des des relais ou j’émule les télécommandes IR de mes lampes led. et le dictionnaire serai une bonne idée, j'ai aussi entendu parler du xml mai je sais pas trop si c'est adapter a cette situation.
    Je peut donner des pistes mais difficile de vous donner le meilleur système sans connaître la configuration exacte.
    Avec un bout de code pour l'allumage de la lampe ou autre je pourrait toujours voir comment ça marche.

  7. #7
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    en fait c'est tout con ca resemble en gros a ca : je détecte l'action a effectuer avec mes condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ('table' in phrase and 'nuit' in phrase) or 'chevet' in phrase:
                    self.control_arduino(1)
    ensuite avec la fonction controle_arduino j'envoi un chiffre entre 1 et 14 (mes 14 appareilles contrôlable) a mon arduino (les GPIO de ma rpi sont mort). elle regarde ensuit si la lampe est allumé ou non et elle change son état.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def controle_arduino (self, lemps):
                    port = self.port
                    port.write(lemps.encode('ascii'))
                    port.write(b'\n')

  8. #8
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Sinon utiliser des synonymes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    lampe = (ampoule, le truc qui brille, lampe, chevet, ect..)
    for i in lampe:
    	if i in phrase:
    		self.control_arduino(1)
    		break
    Bon bien sur l'ordinateur ne sait pas se qu'une une lampe, ou le chauffage, si tu veut un véritable système intelligent il faut lui apprendre se que c'est (ou plutôt quoi en faire)
    Sinon est-ce que tu à réellement besoin d'utiliser 48 mots différents pour faire le même truc ?

  9. #9
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Oui , déjà c'est plus simple d'utilisation et ensuite il y a déjà une quarantaine d'actions que mon assistant peut effectuer, si je dois me souvenir de la phrase exacte pour tout les actions ça deviendrai tout de suite mouins intéressant et puis je compte implémenter beaucoup d'autres fonctionnalités comme envoyer de mails, créer des réveil, ce connecter à mon téléphone pour par exemple envoyer des SMS. c'est pour ça que j'aurais besoin d'un système plus intelligent pour traiter une requête.

  10. #10
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Bonjour,
    Il n'y à pas 36 solutions malheureusement.
    Soit tu crées ton AI de A à Z soit tu utilises une ( assistant Google https://developers.google.com/assist...ibrary/python/, Cortana, Siri, ect...)

  11. #11
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    en tout cas c'est sûr que je veux pas utiliser cette librairie parce que si non j'achète un Google home et c'est plié, ce qui m'intéresse c'est de le faire moi-même. donc si personne n'a d'autres idées je vais être obligé de rester sur la technique des conditions à la chaîne.

  12. #12
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    comme dit plus haut ça dépend complètement de ce que tu veux faire, quel niveau de "compréhension" tu cherches à obtenir de la part de ton programme

    tu pourrais par exemple implémenter un étiquetage morphosyntaxique (ou POS tagging), qui te permettrait d'identifier la fonction de chaque mot dans la phrase, sujet, verbe, complément etc.

    "réserve moi un billet sur toto.com"
    "trouve moi le nom d'une réserve naturelle au Kenya"

    on sent bien qu'avec des if "réserve" in phrase on va difficilement s'en sortir...

    on peut ajouter à ça la reconnaissance d'entités nommées, ce qui permet justement de reconnaitre "Charles de Gaulle" et non pas juste un dénommé Charles qui habiterait la Gaulle, ou de savoir qu'on veut la page wiki de Paris Hilton, et non des hotels Hilton à Paris etc. (même si l'API Google le fait déjà en partie pour toi, ce qui évite de se retrouver avec "François Xavier deux maisons" par exemple)

    au delà il y a la partie compréhension en elle-même, identifier par exemple que toutes ces phrases ont la même finalité :

    "trouve moi un article sur Elon Musk"
    "affiche moi la page wiki du PDG de SpaceX"
    "En parlant d'Elon Musk, tu peux aller me sortir sa fiche wikipédia stp ?"

    il n'y a pas de méthode miracle (c'est par ailleurs un domaine de recherche très actif), uniquement des compromis entre "quelque chose qui fonctionne pas trop mal" et "quelque chose qui soit facile à coder", la suggestion des alias plus haut ça pourrait être une idée à creuser, faut juste accepter que ça a ses limites...

  13. #13
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse ! Maintenant j'ai plusieurs pistes de recherche je vais donc les creuser. je vous tiendrai au courant de mon avancé.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/04/2014, 14h53
  2. Réponses: 5
    Dernier message: 21/02/2014, 15h06
  3. Réponses: 1
    Dernier message: 03/04/2013, 18h21
  4. Traitement des commandes vocales
    Par bliblo dans le forum MATLAB
    Réponses: 3
    Dernier message: 20/03/2013, 09h06
  5. TechDays 2012 : Angie crée des assistants personnels pilotés en mode vocal
    Par Gordon Fowler dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 09/02/2012, 16h06

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