View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Programmer le pcDuino : Voix : Lancer une application système à la voix (en mode connecté) !

Par X. HINAULT - Juin 2013

Ce que l'on va faire ici

  • Dans ce code, je vous montre comment lancer à la voix n'importe quelle application du systeme très simplement avec la librairie Pyduino.
  • Une reconnaissance vocale avec Pyduino se fait en 2 étapes :
    • tout d'abord enregistrement d'un fichier audio avec le fonction recordSound() pendant la durée voulue : 3 secondes suffisent.
    • puis analyse vocale du fichier par envoi du fichier son vers le serveur de reconnaissance vocale avec la fonction analyzeVoice() : la fonction renvoie la chaîne reconnue !
  • Le serveur "Google Voice" utilisé a un taux de reconnaissance très bon de l'ordre de 90% avec des voix différentes et sans paramétrages préalable ! La réponse du serveur est également rapide.
  • Pour plus de détails sur la reconnaissance vocale, voir l'instruction Pyduino analyzeVoice()

Pré-requis

Schéma fonctionnel

  • Ici, l'entrée audio permet la capture du son et son analyse vocale par connexion au serveur distant. D'autre part, la librairie Pyduino exécute une ligne de commande à partir de la chaîne reconnue :

Matériel nécessaire

Système

  • Le pcDuino
  • Une entrée audio opérationnelle :
    • le micro intégré d'une webcam (le plus simple)
    • une carte audio USB avec entrée audio et un micro

E/S

  • aucun matériel

Instructions de montage

  • Connecter également le micro en entrée (le plus simple étant une webcam avec micro)
  • On suppose également que le pcDuino est connecté au réseau local avec accès internet disponible.

Le montage à réaliser

Le fichier *.py

Copier/coller ce code dans l'éditeur Geany :

#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juillet 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# test analyzeVoice

from pyduinoMultimedia import * # importe les fonctions Arduino pour Python

# entete declarative
#noLoop=True

#--- setup ---
def setup():

        return
# -- fin setup --

# -- loop --
def loop():

        filepathAudio=homePath()+dataPath(AUDIO)
        filename="test.wav"
        #print (filepathAudio+filename)

        print ("--------------------------------")
        print("********* Lancer une application par reconnaissance vocale *********" )
        print ("===> Quelle application lancer ? ")
        print ("parmi : terminal , nagivateur, fichier, webcam, programmer, python, ..")
        print ("> Enregistrement du fichier voix (2 sec.) ...")

        recordSound(filepathAudio+filename,2) # enregistre son fichier voulu et duree voulue en secondes

        #playSound(filepathAudio+filename)

        chaine=analyzeVoice(filepathAudio+filename) # reconnaissance vocale

        if chaine=="":
                #speak("Vous n'avez rien dit.")
                print("Vous n'avez rien dit.")
        else:
                #speak("Vous avez dit " + chaine)
                print("Vous avez dit " + chaine)

                # analyse chaine
                chaine=chaine.lower() # met en minuscule

                if "terminal" in chaine:
                        executeCmdWait("lxterminal") # lance lxterminal
                elif "navigateur" in chaine or "internet" in chaine:
                        executeCmdWait("midori ") # lance midori
                elif "fichier" in chaine :
                        executeCmdWait("pcmanfm") # lance pcmanfm
                elif "webcam" in chaine :
                        executeCmdWait("guvcview") # lance guvcview
                elif "programm" in chaine :
                        executeCmdWait("geany") # lance geany
                elif "python" in chaine :
                        executeCmdWait("dreampie") # lance dreampie
                else:
                        print("Chaine non valide")



# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin

 

Ce code est également disponible ici : https://raw.github.com/sensor56/pyduino-exemples/master/Voice/AnalyzeVoiceLancerApp.py

Utilisation

  • Réaliser le montage et connecter le micro (le plus simple = une webcam avec micro-intégré)
  • Vérifier les niveaux de son au préalable avec Audacity
  • Appuyer sur le bouton exécuter dans Geany
  • Une fenêtre de Terminal doit apparaître :
    • Juste après le message vous y invitant, parlez ! (vous avez 2 secondes)
    • la chaîne correspondante s'affiche ensuite
    • si la chaine est reconnue, l'application voulue est lancée.

Discussion technique

  • Noter ici l'utilisation de executeCmdWait() : l'application lancée bloque le programme tant que l'application ouverte n'est pas refermée. Ceci permet de stopper la reconnaissance vocale tant que l'application est ouverte.