Yana client for linux

edited mars 2014 in Projets
Yep ,vous avez bien lu...

Etat:

Comment l'installer

Suivez les instructions du Readme

Comment ça marche:

Yana client for linux est codé en Python / Bash
Il fonctionne à l'aide de l'API Google (qui est appelé en Bash) et est une adaptation du code de Steven Hickson Voice Command
Il enregistre sur le périphérique par défaut (une webcam par ex) des extraits de sons de 3 secondes.
Lorsqu'une élévation de volume est détecté (Par rapport à l'enregistrement précédent), il envoie l'extrait à google afin de le transformer en texte (ceci afin d'éviter de faire des requêtes en permanence à google)

A l'aide de l'algorithme de distance de Levenshtein , yana client for linux va chercher quel commande correspond le plus (à l'aide d'un ratio équivalent au confidence de Yana for Windows) la phrase prononcé.
Si une réponse vocale est disponible, elle sera envoyé à Google Translate qui va retourner un mp3 qui sera lu.

Afin d'éviter que des erreurs se présentent plusieurs tests sont fait:
-- Sur les dépendances nécessaires
-- Sur le fichier de configuration (yana.cfg)
-- Sur les réponses de serveur web

Toutes les extraits audios sont enregistrés directement dans la ram (/dev/shm) afin d'éviter de travailler sur la carte SD.

Yana for linux est composé de 4 programmes

yanavoice.py s'occupe de récupérer les commandes, d'envoyer les actions et d’exécuter les autres programmes

scripts/getvol.sh enregistre des extraits (/dev/shm/noise.wav) et de retourner le volume.
Il fonctionne comme ceci : 
./getvol.sh durée
Ex: ./getvol.sh 3

scripts/sst.sh convertit un extrait audio (enregistrer par getvol) en texte à l'aide de l'API google.
Il convertit l'extrait audio (/dev/shm/noise.wav) en flac puis l'envoi avec wget à google.
Il fonctionne comme ceci:
./sst.sh langue
Ex: ./sst.sh fr

scripts/tts.sh convertit du texte en audio à l'aide de l'API google
Si le texte est trop long, le script va le découper en morceau et l'envoyer successivement à google et créer un mp3 à partir des multiples extraits.
Il fonctionne comme ceci:
./tts.sh -l langue "texte"
Ex: ./tts.sh -l es "Muchos Burritos!"

«1

Commentaires

  • oh yeah!!
  • Est-ce qu'il y a moyen d'améliorer la reconnaissance vocale?
    Car quand j'utilise l'appli android, il a parfois du mal.
    J'ai une prise que j'ai appelée LED
    du coup le "YANA, éteint LED", il comprend "Rihanna est un laide" et ça marche pas :(
  • Hello,
    Y aurait-il une bonne ame qui pourrait faire une petite note d'installation ? voire un exemple de conf...

    Je me retrouve avec l'erreur suivante, et ne sais ou trouver le module manquant.

    Traceback (most recent call last):
      File "./yanavoice.py", line 17, in <module>
        import Levenshtein
    ImportError: No module named Levenshtein

     en tout cas merci pour le partage, ce client m’intéresse bcp :)
  • Désolé j'ai été pris dans une embuscade apéritive hier soir, du coup j'ai pas fini à temps!
    Ca devrait être réglé ce matin (si github arrête de se faire DDOS ^^)

    ^
    |
    Do not trust this guy , he knows nothing about computer science or electronics, it is just here for your wallet
  • edited mars 2014
    Si vous voulez suivre l'évolution en live ^^
    http://youtu.be/rZ-6Tm8as2w

    J'ai stoppé les vidéos ça faisait tout planter avec virtualbox à coté.
    ^
    |
    Do not trust this guy , he knows nothing about computer science or electronics, it is just here for your wallet
  • edited mars 2014
    Est-ce qu'il y a moyen d'améliorer la reconnaissance vocale?
    Car quand j'utilise l'appli android, il a parfois du mal.
    J'ai une prise que j'ai appelée LED
    du coup le "YANA, éteint LED", il comprend "Rihanna est un laide" et ça marche pas.

    Pour toute te dire j'ai eu le même problème c'est pour ça que j'ai utilisé un algo pour qu'il reconnaisse des phrases similaires mais pas identique.
    Le coté négatif c'est que ça peut générer des faux positifs mais jusque là il s'en sort pas trop mal.

    Sinon j'ai remarqué que la reconnaissance vocale de google interprète les phrases.
    Par exemple pour lui "YANA éteins lampe" n'est pas une phrase donc il va chercher une autre phrase
    Alors que "YANA éteins LA lampe" est une phrase donc il va la comprendre.

    ^
    |
    Do not trust this guy , he knows nothing about computer science or electronics, it is just here for your wallet
  • Ah oui pas bête le coup de la phrase. Je vais tester ça à l'occasion.
    Pour le moment j'ai enlevé le YANA et ça le trompe moins, par exemple éteins LED il comprend un peu mieux.

    Je n'ai pas encore testé les versions windows et linux, n'ayant pas windows. Du coup je compte bien tester la version linux un de ces 4 :P

    J'ai une question/proposition de fonctionnement :
    Est-ce qu'il est envisageable d'écouter en permanence et lorsque l'on détecte un silence de quelques secondes, on récupère les quelques dernières secondes. Dans cet échantillon, on recherche un "yana" via requête google si on veut.... Ensuite si yana est reconnu, on joue un son par exemple "oui" et la phrase suivante est enregistrée et interprétée.
    En fonctionnement ça donnerait donc

    moi : bla bla je discute avec mes potes
    moi : YANA?
    ... silence de quelques secondes max
    yana : Oui chef
    moi : allumes la lumière
    yana : tout de suite chef

    ? :P
  • Avec un peu de retard, merci maditnerd pour la note d'install.

  • Je viens de tester yana client linux et je dois dire que ça marche assez bien.
    J'ai encore un peu de mal à me caler pour parler, mais la reconnaissance marche bien.

    par exemple :
    ----------------------                                                                                                                                                                                                                      
    Searching for commands
    ---------------------
    I heard :"Rihanna et un aquarium"

    I understood : Yana, eteint aquarium

    il arrive à bien traduire! :)


    Note je suis sur mon pc portable et j'ai du modifier le hardware en #hardware="plughw:0,0"
    à part ça, "out of the box" ! :D
  • Pour ma part, j'ai eu un plantage au démarage... une histoire de charset ... j'ai du ajouter les lignes suivantes en début de yanavoice.py :
    import codecs
    streamWriter = codecs.lookup('utf-8')[-1]
    sys.stdout = streamWriter(sys.stdout)
    Sinon , pour ce qui est de la reconnaissance, il a bcp de mal chez moi.
  • une petite modi pour permettre l excecution de plusieurs commande à la suite
    try:
                    response = json.loads(json_response)




                    i = 0
                    i2 = len(response["responses"])
                    i2 -=1
                    while i <=i2:
                        print i2
                        if ("talk" in response["responses"][i]["type"]):
                            speak = response["responses"][i]["sentence"].encode("utf8","ignore")
                            banner_yellow("Response")
                            print speak
                            speak = urllib2.quote(speak)
                            text2speech(speak)
                            i += 1
                        elif ("sound" in response["responses"][i]["type"]):
                            print response["responses"][i]["file"]
                            playsound(response["responses"][i]["file"])
                            i += 1       
                        elif ("command" in response["responses"][i]["type"]):
                            os.system(response["responses"][i]["program"] + " & ")
                            i += 1
                        else:
                            banner_yellow("Response Non Supported")
                            print response
                            i += 1
                       
               
                except ValueError, e:
                    banner_yellow("Erreur Json Answer")
  • le print i2 ne sert a rien juste au debug oupsss
  • Salut,
    j'ai envie de tester et j'ai procédé a l'installation. Comment vérifier que le son du micro est capté? (oui, car pour l'instant yana ne veut pas m'obeir... :D )
  • tu as bien un micro branché sur la bébête ou tu as installé ça?
    si c'est bien sur le pi, de base y'a pas d'entrée micro, faut soit une webcam avec micro intégré (et qui soit reconnu correctement) soit une carte son usb avec entrée micro ...
  • en effet, j'ai branché une webcam logitech qui trainait dans un fond de tiroir. Elle apparait bien dans la liste sous alsamixer en temps que USB device, mais je n'arrive pas a savoir si le son est capté ou pas...
  • Le micro de ma webcam semble bien être reconnu dans alsamixer (F6 pour le choisir puis F5 pour voir la capture): http://www.ipicit.net/picit/1408183848.8734.CaptureMicro.JPG
    J'ai bien renseigné le fichier cfg mentionné dans le readme du pluggin: http://www.ipicit.net/picit/1408184071.6703.Cfg.JPG
    Quand je parle, je n'ai pas de bip confirmant que la reconnaissance détecte une différence de volume
    Quelqu'un a mis ça en place sur son raspberry?
  • edited août 2014
    bonjour,

    est-ce gênant ce message (en gras) ? car même si le micro fonctionne, rien ne semble être compris.

    ----------------------
    Waiting for Audio Elevation
    ---------------------
    Home directory /home/céline not ours.
    Volume Differential:7.56787

    ----------------------
    Searching for commands
    ---------------------
    I heard :


    ----------------------
    No Command Detected
    ---------------------



  • ça a vue de nez c'est que c'est pas le bon utilisateur qui tente de lancer un script qui est placé dans le répertoire home d'un autre utilisateur ...
    faudrait au minimum déplacer le script ou changer le répertoire de destination pour un ou l'utilisateur (www-data?) a le droit d’écrire
  • Tu peux les voir où tous ces messages lvisigo stp?
  • bien en lançant le script
    sudo ./yanavoice.py
  • Merci!
    Je crois que je sélectionne mal mon micro....
    J'ai suivi le procédure suivante: dans alsamixer je tape F6 pour sélectionner le micro, je descend sur mon peripherique usb qui est reconnu, puis F5 pour régler le volume du micro, puis ESC pour sortir
    Puis je lance le script ./yanavoice.py
    Le message délivré est le suivant:

    **** List of CAPTURE Hardware Devices ****
    card 1: U0x46d0x8b2 [USB Device 0x46d:0x8b2], device 0: USB Audio [USB Audio]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    ERROR: No Microphone detected / Bad Microphone Configuration

    Ma démarche n'est pas la bonne?
  • edited août 2014
    Quand je lance le script, toutes les etapes se passent bien hormis la dernière. Vu ce message, y-a-t'il un problème avec arecord?

    ----------------------
    Recording Silence
    ---------------------
    arecord: set_params:1145: Unable to install hw params:
    ACCESS:  RW_INTERLEAVED
    FORMAT:  S16_LE
    SUBFORMAT:  STD
    SAMPLE_BITS: 16
    FRAME_BITS: 32
    CHANNELS: 2
    RATE: NONE
    PERIOD_TIME: (124988 124989)
    PERIOD_SIZE: NONE
    PERIOD_BYTES: (7996 8000)
    PERIODS: (4 5)
    BUFFER_TIME: 500000
    BUFFER_SIZE: 8000
    BUFFER_BYTES: 32000
    TICK_TIME: 0
    **** List of CAPTURE Hardware Devices ****
    card 1: U0x46d0x8b2 [USB Device 0x46d:0x8b2], device 0: USB Audio [USB Audio]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    ERROR: No Microphone detected / Bad Microphone Configuration

  • faut-il permuter l'ordre de bcm2835 alsa et de mon micro dans alsamixer afin que mon micro devienne le périphérique par défaut?
  • edited août 2014
    J'ai testé la commande: arecord -D plughw:1,0 -d 3 -r 16000 -t wav /tmp/test.wav
    Mon micro enregistre effectivement, mais la qualité du son n'est pas bonne (alors quej'utilise ce micro avec Yana windows et ça marche impeccable). On entend le son a enregistrer en fond, et un espèce de ronflement... J'ai joué sur le volume dans alsamixer, peut-on agir sur autre chose? Mon message d'erreur est sans doute lié à la config du micro.... Quelqu'un aurait une idée? merci
  • edited août 2014
    alsamixer c'est juste pour gérer le volume/mute de tes périphériques..

    le nom du périférique est codé en dure dans getvol.sh #hardware="plughw:1,0"

    tu peux obtenir la liste en tapant:

    sudo arecord -L
    ou
    sudo arecord -l


    la seule chose qui fonctionne ici c'est le script tts.sh (même si je trouve la diction un chouilla trop lente) que j'essai de faire cohabiter avec mpd,
    mais alsa et moi on est pas copain :D

    ps: maditnerd MERCI ^^
  • Qu'entends tu qd tu dis "la seule chose qui fonctionne ici c'est le script tts.h"? As-tu réussi a piloter yana grace a ce plugin?
  • Bien, non
  • edited septembre 2014
    salut,

    niveau TTS, je suis tombé sur le site http://www.voxygen.fr qui propose des voix fort sympathiques.

    je l'utilise via un petit script php qu'il me suffit de lancer pour l'entendre parler.
    de cette façon
    http://pi/tts.php?voice=Eva&text=bonjour

    tts.php

    <?php
     if(isset($_GET['text']) && isset($_GET['voice'])){
     exec('mpg321 -g 100 "http://www.voxygen.fr/sites/all/modules/voxygen_voices/assets/proxy/index.php?method=redirect&text='.urlencode($_GET['text']).'&voice='.urlencode($_GET['voice']).'&ts=14030902642"');
    }
     ?>


    bien sure, avoir mpg321 d'installé et que www-data soit dans le group audio
    sudo adduser www-data audio
  • Wow c'est cool ça de pouvoir utiliser voxygen, merci pour l'astuce, faudra que j'implémente ça un de ces quatres.

    J'ai réparé la reconnaissance vocale (par réparer je veux dire copier/coller ce qu'à fait Steven Hickson ^^ pour résoudre le problème).
    Google a mis à jour son api ce qui a rendu inutilisable celle-ci.
    Curl est utilisé à la place de wget et d'après lui ça devrait augmenter la rapidité de la reconnaissance.

    D'ailleurs je dis ça je dis rien mais cette application n'a été possible que grâce à son travail donc hésitez pas à lui faire des donations ^^
    ^
    |
    Do not trust this guy , he knows nothing about computer science or electronics, it is just here for your wallet
Sign In or Register to comment.