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 :

Capture du texte notepad en temps réel


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Amateur
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut Capture du texte notepad en temps réel
    Bonjour!

    Je souhaite utiliser la reconnaissance vocale microsoft pour faire bouger des objects dans le Blender Game Engine (logiciel de modélisation 3D avec un moteur de jeu).

    Avec la reconnaissance vocale windows, on peut dicter du texte qui s'écrit directement dans notepad. Je voudrais transmettre ce texte à mon programme python, mais je ne sais pas trop comment m'y prendre.

    J'ai essayé quelques trucs avec le module subprocess, mais sans succès. Sinon, j'ai aussi essayé avec fichier = open('test.txt', 'r') puis print(fichier.read()) ou fichier.readline() et ça marche mais il faut auparavant sauvegarder le document test.txt (fichier>enregistrer) pour avoir accès au nouveau contenu de test.txt.

    Ce que je voudrais, c'est vraiment qu'à chaque fois qu'un nouveau mot est écrit dans notepad, mon programme python soit immédiatement informé sans qu'il soit besoin de sauvegarder le document notepad (ou trouver un moyen d'automatiser la sauvegarde dans notepad à chaque fois qu'on écrit quelque chose dedans (je suppose qu'il faudrait utiliser l'API de windows mais je ne connais pas du tout...)

    Vous avez des idées? Merci!!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Citation Envoyé par youle31 Voir le message
    (je suppose qu'il faudrait utiliser l'API de windows mais je ne connais pas du tout...)


    Pourquoi ne pas regarder la documentation de Microsoft Speech et/ou poser des questions dans les forums Windows?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Amateur
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    Oui je pense que je vais également poser la question sur le forum Windows. Merci! En attendant, si vous avez d'autres idées, pas forcément en utilisant notepad, je suis preneur! (Après avoir jeté un coup d'oeil à la doc de Microsoft speech, il ne semble pas possible de "contrôler" l'output directement. Donc il faudrait trouver un workaround.) Merci!

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut Key Event Handling
    Bonjour,

    je ne connais pas bien le logiciel de reconnaissance en question mais quand vous dites « notepad », est-ce lié à certaines applications seulement ou peut-on dicter/écrire sur n'importe quel "input" entrée/zone de texte ?

    Un exemple simple qui me vient à l’esprit c'est un lecteur de code barre plug-and-play PS2/USB, pour pouvoir écrire automatiquement le code en scannant une étiquette il se contente d'émuler un clavier sans aucun pilote nécessaire, pour venir écrire sur n'importe quelle zone de texte.

    Ici c'est sans doute pareil, il émule l'écriture des touches, comme le fait certains logiciels de macro générique : déplacement souris et séquencement d’appui de touche.

    Si c'est le cas, il suffit d'intercepter l'action des touches en input, ou en interface avec tkinter par exemple, lib standard.

    Le terme exacte en anglais c'est key (event) handling, le fait de capturer les événements liés aux touches du clavier.

    Voici un exemple donné par l’excellent guide pour Tkinter v2: http://effbot.org/tkinterbook/tkinte...d-bindings.htm

    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
    # -*- coding: utf-8 -*-
    # Python 2 & 3
     
    from __future__ import print_function # Replace print function
     
    try: # v2
    	from Tkinter import *
    except: # v3
    	from tkinter import *
     
     
    root = Tk()
     
    def key(event):
    	print("pressed", repr(event.char))
     
    def callback(event):
    	frame.focus_set()
    	print("clicked at", event.x, event.y)
     
    frame = Frame(root, width=100, height=100)
    frame.bind("<Key>", key)
    frame.bind("<Button-1>", callback)
    frame.pack()
     
    root.mainloop()
    Il suffit ensuite de sélectionner la fenêtre/cadre et d'appuyer sur des touches pour qu'il les intercepte.

    Nom : tkinter Key Event Handling.png
Affichages : 549
Taille : 8,1 Ko

    Pour capturer des mots je suppose qu'il faille utiliser un buffer et de vérifier l’existence dans un dictionnaire pour en exécuter la fonction.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 192
    Par défaut
    hello,
    Youle31 j'ai plusieurs questions à te poser :

    1 - Quel genre de texte veux-tu transmettre à ton programme python (donne nous un exemple) ?
    2 - Pourquoi ne pas directement faire la reconnaissance vocale avec le programme python ( avec les modules pyspeech ou dragonfly par exemple) ?

    Ami calmant, J.P

  6. #6
    Membre confirmé
    Homme Profil pro
    Amateur
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    @YCL-1: Salut! Mon but n'est pas de capturer le clavier. Dans l'idéal je n'aurai pas à m'en servir (tout se ferait par la reconnaissance vocale). Avec la reconnaissance vocale windows, on peut dicter du texte dans plusieurs logiciels. J'ai choisi notepad parce que ça me semblait le plus simple, mais peut-être existe-t-il d'autres logiciels qui me permettraient plus facilement de faire ce que je veux faire.

    @jurassik pork: Salut! Voici une vidéo explicative de ce que je voudrais faire:

    https://drive.google.com/file/d/0B3G...ew?usp=sharing

    Pourquoi je n'utilise pas dragonfly ou pyspeech? Parce qu'ils sont prévus pour fonctionner avec python 2.x. Il faut donc avoir une installation de python 2 pour les faire fonctionner (à moins qu'il existe des versions mises à jour pour python 3 mais je n'en ai pas trouvé). Pourquoi je ne veux pas utiliser une version de python 2? Parce que mon logiciel Blender utilise une version propre à lui de python 3.4 et que dans l'idéal, pour partager mon fichier, j'aimerai soit pouvoir directement me servir de modules extérieurs compatibles avec la version 3.4 intégrée à Blender (je pourrais directement coder dans l'IDE propre à Blender et joindre seulement le module de reconnaissance vocale pour partager mon fichier (sans qu'il soit besoin pour l'utilisateur d'installer une version complète de python 2 + d'installer le module de reconnaissance vocale), soit me passer complètement de modules extérieurs et faire avec notepad (que tous les utilisateurs windows ont par défaut).

    Sinon, j'ai essayé avec speech recognition 1.1.4 https://pypi.python.org/pypi/SpeechRecognition/ (qui marche avec l'API google speech) mais la procédure d'installation est vraiment galère (il faut créer un compte et récupérer une clé... pour avoir accès à l'API et la clé n'est valable qu'un jour... Il faut aussi PyAudio) et de toute façon je n'ai pas réussi à le faire fonctionner sur mon PC.

    Donc je me suis replié sur cette solution notepad+reconnaissance vocale microsoft. Dans le principe, ça marche, mais il faudrait que je puisse contrôler la sauvegarde du document notepad depuis python. J'ai pas trouvé de version de pywinauto compatible avec python 3.4, alors je suis à cours d'idées...

    Donc si vous avez un tuyau, je vous en serais très reconnaissant. Merci!

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Citation Envoyé par youle31 Voir le message
    @YCL-1: Salut! Mon but n'est pas de capturer le clavier. Dans l'idéal je n'aurai pas à m'en servir (tout se ferait par la reconnaissance vocale). Avec la reconnaissance vocale windows, on peut dicter du texte dans plusieurs logiciels. J'ai choisi notepad parce que ça me semblait le plus simple, mais peut-être existe-t-il d'autres logiciels qui me permettraient plus facilement de faire ce que je veux faire.
    Je n'ai peut-être pas été clair dans mon explication, mais pour que ça puisse écrire automatiquement avec la reconnaissance vocale c'est que soit ça écrit des touches, tout comme le fait un clavier, ou deuxième hypothèse que je vois c'est qu'il colle les mots depuis le presse-papiers/Clip board. Il est possible de vérifier le clip board sous windows en exécutant (Windows + R): Clipbrd

    Dans le premier cas il est possible de récupérer l'écriture de ces touches.

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Pour se faire une idée du principe, avec le clavier virtuel sous windows (Windows + R) ouvrir: osk
    Il est possible d'écrire des touches sans passer par un clavier physique, le principe est simple, les boutons vont envoyer l'instruction d'écrire un caractère.

    Une macro touches clavier/souris fait de même: on réalise une séquence qui dira par exemple : [Press A key][Press Z key][Press down shift][Press E key][Press up shift]

    Le script réalisera l'écriture suivante: azE

    Le principe est sans doute le même avec la reconnaissance vocale, il traduit la voix en texte, et le pilote se charge d'envoyer l'instruction des touches, comme le ferait un clavier.

  9. #9
    Membre confirmé
    Homme Profil pro
    Amateur
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    Ok. Merci! J'ai vérifié le clipboard avec ça http://www.thewindowsclub.com/downlo...wer.zip?75a050 (il n'y a plus clipbrd.exe dans windows 8!) et donc le texte capturé par le micro ne transite pas par le clipboard... Hey, c'est cool ce truc avec tkinter! Mais malheureusement il ne se passe rien quand je parle dans mon micro (enfin si il y a une petite fenêtre qui s'ouvre et qui me demande si je veux insérer du texte et quand je l'insère ça apparaît dans la petite fenêtre tkinter). Par contre pour les touches du clavier c'est cool!

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Ah c'est un environnement python directement intégré dans Bender?

    Je suppose qu'il est possible d'y rajouter des modules.

    Vous pouvez déjà vérifier si le principe fonctionne en utilisant les fonctions natives input_raw() ou input() pour savoir si ça écrit bien le texte dessus, mais ça nécessite d'envoyer / dire la touche Entrée / 'Return'.

    Il est possible que Bender réinterprète ces fonctions en proposant des popup, ce que fait certains IDE comme PyScripter par exemple.

  11. #11
    Membre confirmé
    Homme Profil pro
    Amateur
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    En fait non, on ne peut pas se servir directement de input() à part dans un thread séparé j'imagine et avec une queue pour récupérer l'input j'imagine... On utilise d'autres moyens intégrés au moteur de jeu. Mais je ne crois pas que cette solution puisse fonctionner dans mon cas (enfin, faut voir), et comme vous dites, on aurait de toute façon besoin de se servir de la touche entrée...

    Sinon oui, il est possible d'utiliser des modules supplémentaires. Je me suis déjà servi de PyAudio par exemple.

    Voilà ce que ça fait quand on se sert de la reconnaissance vocale sans avoir le curseur dans notepad:

    https://drive.google.com/file/d/0B3G...ew?usp=sharing

  12. #12
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 192
    Par défaut
    hello,

    j'ai réussi à faire fonctionner pyspeech en python 3.4 :

    1 - Récupérer le zip de la version pour 3.x de pyspeech ici ( Download zip)

    Dézipper le fichier. Apparemment il y a des choses qui ne se compilent pas avec la version 3.4 de python :
    Dans le fichier speech.py remplacer import thread par import _thread, le print prompt par print (prompt) et le thread.start_new_thread(loop, ()) par _thread.start_new_thread(loop, ())

    Installer le module avec par exemple la commande python3 setup.py install.

    Et voici un petit programme de test qui fonctionne chez moi dans winpython spyder sous windows 7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import speech
     
    while True:
        # on attend un des mots pour passer à la ligne suivante  
        phrase = speech.input("Dans quelle direction ?",['Haut', 'Bas','Stop'] )
        # la robote essaie de répéter le mot détecté
        speech.say("tu as dit %s" % phrase)
        # Si le mot est stop on arrête
        if phrase == "Stop":
            break
    Ami calmant, J.P

  13. #13
    Membre confirmé
    Homme Profil pro
    Amateur
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    Youpi!!!!!!!! Je teste ça et je vous tient au courant. Un grand MERCI! Et bravo!

    Aie! : https://drive.google.com/file/d/0B3G...ew?usp=sharing

    Euh je vais voir si je peux faire quelque chose mais en tant que débutant...

    Yes ça marche! Alors maintenant je vais essayer avec Blender et je vous tiens au jus!

  14. #14
    Membre confirmé
    Homme Profil pro
    Amateur
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Par défaut
    Et voilà!

    http://www.mediafire.com/download/ms...ecognition.rar

    Merci beaucoup pour votre aide!

    Si vous avez envie de tester, il faut télécharger Blender 32 bits: http://www.blender.org/ , ouvrir le fichier speechRecognition.blend, et appuyer sur P avec le curseur de la souris dans le vue 3D pour lancer le moteur de jeu (echap pour quitter).

    Donc au final, j'ai utilisé ton pyspeech modifié Jurassik pork (MERCI!) et puis des fichiers de pywin32.

    Testé sous Windows 8.1 avec Blender 2.73 32 bits.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Capture d'écran en «temps réel»
    Par silverlight dans le forum C#
    Réponses: 3
    Dernier message: 27/06/2012, 18h35
  2. Fichier texte et Temps Réel, comment faire ?
    Par prog_ dans le forum Langage
    Réponses: 14
    Dernier message: 30/03/2010, 00h29
  3. colorier texte en temps réel
    Par greg08 dans le forum Composants
    Réponses: 2
    Dernier message: 31/10/2008, 16h35
  4. afficher un texte dans un cadre en temps réel.
    Par lunyboy dans le forum Débuter
    Réponses: 1
    Dernier message: 19/06/2008, 09h54
  5. Capture du corps du mail en temps réel; lors de la frappe
    Par cavo789 dans le forum VBA Outlook
    Réponses: 3
    Dernier message: 01/06/2007, 05h38

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