Reconnaissance vocale : Installer SARAH sur Raspberry

sarah-logo

Bonjour a tous !

Et non il n’est pas mort ! (comment ça dommage ??!). Depuis que je suis locataire, ne pouvant pas démonter toute la maison, la domotique est passée un peu au second plan :/ J’ai également quitté mon emploi douillet de salarié pour devenir freelance et créé une entreprise mi 2013 ce qui occupe une bonne partie de mon temps. Voila pour l’histoire.

Après cette période d’hibernation, nous (The Royal « we »! You know) allons racheter une maison cette année. Du coup fin de l’hibernation, vive la domotique ! 🙂

[adsGrandRectangleTexte] Ça fait un moment que j’entends parler de SARAH, un logiciel de reconnaissance vocale pour la domotique développé par Jean-Philippe Encausse et autour duquel gravitent tous pleins de plugins. Un article expliquant tout ça mieux que moi : sarah-installation-premiers-pas. J’avoue ne pas y avoir prêté attention plus que cela puisqu’il utilise le système de reconnaissance vocale de Microsoft et ne tourne donc que sur Windows :/ et si je peux me passer d’une machine Windows dans mon salon (coût, énergie, bruit?, Windows…) tant mieux 🙂

Mais, je suis récemment tombé sur une vidéo du plugin XBMC et ça semble vraiment fiable et rapide, la synthèse vocale est assez agréable et du coup ça m’a vraiment donné envie de tester SARAH (en tout bien tout honneur!).

Voila ce que j’ai entrepris: installer SARAH sur une machine virtuelle de mon serveur et utiliser un raspberry pour servir de « passerelle » entre SARAH et l’utilisateur (oui bonnn ok, le titre est un peut racoleur 🙂

Dans un article précédant j’expliquais comment installer nas4free sur le microserver HP N40L (On trouve maintenant son grand frère, le N52L autour des 200€) mais ayant besoin d’un serveur pour mon nouveau Job, je lui ai ajouté 8go de la ram et j’y ai installé vmware ESXi 5. J’ai réinstallé mon nas4free en virtuel, un serveur Linux et un Windows 7 à coté. Ayant maintenant cette machine Windows à disposition, j’ai installé SARAH dessus. Un article très complet la dessus :

Capturer le son sur le Raspberry et l’envoyer à SARAH

Jusque là, rien de magique. C’est ici que ça commence. Sur le Raspberry, j’ai installé un archlinux et je stream le son du micro en RTP vers SARAH via ffmpeg :

ffmpeg -f alsa -i hw:1 -ar 16000 -acodec pcm_s16le -f rtp rtp://ip_sarah:7887

hw:1  : ID de mon device de capture (faire un cat /proc/asound/card ou /proc/asound/device pour le trouver)

Note : SARAH est capable d’origine de prendre un flux RTP en entrée. Il faut pour cela lui indiquer un numéro de port dans le fichier config.ini (variable rtpport) puis relancer WSRMicro.cmd. Attention, il semble y avoir un bug dans la dernière version (315), j’utilise donc pour l’instant la version 2.95.
Coté Raspberry, il faut un ffmpeg récent (exit raspbian, à moins de le recompiler soit même).

Une fois ceci fait, on peut déjà tester et voir dans les logs de SARAH si les phrases dictées sont bien reconnues et traitées. Normalement tout est ok.

Renvoyer le son de SARAH vers le Raspberry

Il va falloir maintenant renvoyer le son produit par SARAH vers le Raspberry (ou une autre machine). Pour cela deux méthodes :

  • Modifier SARAH pour que les phrases générées par le système soient à leur tour streamées en RTP vers le Raspberry.
  • Capturer et streamer le son produit par la machine vers le Raspberry à l’aide d’un programme extérieur.

La première solution serait la mieux intégrée, j’ai commencé à travailler dessus mais je galère un peu. En attendant, j’ai trouvé un soft libre qui permet de créer un device audio virtuel qui restitue le son qui sort du PC (« Capture what you hear »). Il suffit ensuite, à l’aide toujours de ffmpeg, d’utiliser ce device et de streamer le son en RTP comme pour la première étape.

Le soft s’appelle « virtual-audio-capture-grabber-device » et la commande ffmpeg qui va bien :

ffmpeg -f dshow -i audio= »virtual-audio-capturer » -acodec libmp3lame -f rtp rtp://ip_rasp:7888

Réception du son sur le Raspberry

Maintenant que le son sorte de SARAH, il faut le réceptionner coté Raspberry. J’utilise ffplay pour le moment :

ffplay rtp://ip_rasp:7888

Et voila la boucle est boulée 🙂 le son part du Raspberry, est envoyé à SARAH qui le traite et produit ou pas une réponse qui elle même est retournée au Raspberry qui la joue, c’est magique 🙂 !

Démonstration

C’est plutôt réactif. Malgré le stream des flux, les temps de réponse sont corrects: < 2 secondes.

Je suis en déplacement, je vous ferai une petite vidéo ce Week End. Bon finalement pas de vidéo avec le micro casque mais une avec le Kinect -> ici

Et le Kinect dans tout ça ?

J’utilise pour l’instant un casque/micro Logitech USB mais l’utilisation du Kinect pour son micro array semble incontournable. D’après ce que j’ai lu, le micro array du Kinect est supporté sous Linux. J’ai également trouvé des sources indiquant la détection des devices audio et vidéo du Kinect sur Raspberry.

J’ai acheté un Kinect récemment mais j’attends encore l’adaptateur secteur/USB qui va bien et qui ne devrait pas tarder (d’ailleurs, je me suis fait enflé,11€ sur ebay alors qu’il est à 5€ sur amazon). Je vous ferai un retour de mes essais.

Vous aurez également compris que les fonctions de reconnaissance gestuelle et faciale ne sont pas disponibles.

[adsGrandRectangleHTexte]

Conclusion et améliorations

Même si un Windows est toujours nécessaire, cette solution permet d’éviter de déployer une machine dans son salon et pourrait être utilisée (?) pour déployer plusieurs micros assez facilement et à moindre coût. Deux inconnues :

  • Je ne sais pas quelle serait la complexité pour que SARAH puisse traiter plusieurs flux RTP ?
  • A défaut, est il possible de lancer plusieurs client SARAH sur la même machine ?

Autre question: La caméra de sony PS3 eye possède également un micro array. Je sais qu’il est utilisable sous Linux mais obtient on les mêmes résultats qu’avec un kinect ? si quelqu’un a déjà testé sous Windows quel est son verdict ? Vu le prix, il serait intéressant d’avoir un retour.

Suite au prochain épisode !

here
https://jumpboobs.com/videos/27330

Partagez moi ...Tweet about this on TwitterShare on Facebook11Share on Google+57Digg thisEmail this to someone

Vous aimerez aussi...

52 réponses

  1. Olivier dit :

    Je me réponds à moi même. D’après Jean-Philippe Encausse, la PS3 eye ne permet pas d’obtenir de bons résultats.
    Dommage.

  2. Loïc dit :

    Salut,

    Je me posé une question au niveau de VMware as tu une licence ? Si non as tu le vSphere ? Je suis en train de me motiver a mettre un esxi sur mon serveur (pour une vm windows et linux sur le même serveur) mais vu le prix des licences pour un particulier c’est pas donné mais je sais qu’il y a des versions free mais je ne connais pas les limitations ?

    • Olivier dit :

      Salut,

      VMware ESXi 5 est gratuit. Je ne suis pas un expert mais pour une utilisation personnel ou pme il n’y a pas vraiment de limitation gênante ->
      – Limitation a 32go de ram (il me semble, ça laisse de la marge)
      – Obligation de gérer serveur par serveur si plusieurs serveurs.
      Mais pas de limitation au niveau du nb de processeurs.

      J’utilise le client vSphere pour créer les machines et y accéder via la console intégrée.

      Un détail concernant les VM Windows: si c’est pour SARAH tu auras besoin d’une carte son virtuelle et on ne peut pas en créer sur ESXi. J’ai due éditer le fichier .vmx de la VM pour lui ajouter la carte à la main, je détaillerai ça si besoin.

      • Loïc dit :

        Merci pour ta réponse rapide. Si tu peux faire un tuto c’est génial (en particulier pour la carte son, pour le reste je suis en formation vmware jusqu’à la fin de la semaine ça devrait m’aider). Pour les limitations ça devrait aller, me reste plus qu’a regarder pour le passthrough au niveau disque (je veux que mes disques dur de stockage, environ 22To quand même soit lisible or vmware, typiquement si je sors un disque) et la remonté de périphérique USB (disque dur externe et clef GSM).

        • Olivier dit :

          Je fini mes tests avec le Kinect (j’ai quelques soucis pour faire accepter le son streamé à SARAH) et je ferai un tuto sur l’ensemble.

          Pour le passthrough, c’est également ce que j’ai fais pour nas4free qui est virtualisé sur le serveur.

          • Loïc dit :

            Donc on peut faire du passthrough avec la licence free ? Le formateur vient de me dire qu’il faut la licence standard… En gros je veux prendre un de mes disques ext4 et les monter directement dans ma vm esxi sans le reformaté avec le systeme de fichier vmware. Je vais attendre que tu es finis avec le kinect je veux faire exactement la même chose ça permet de faire du multiroom à moindre cout

          • Olivier dit :

            J’ai utilisé du Raw Device Mapping pour monter les disques dans la machine virtuelle. Est ce la même chose que le passthrough ?

          • Loïc dit :

            Alors la je sais pas faudrait prendre un disque le mettre sur une machine physique non virtuel et voir si le disque est lisible mais j’ai pas l’impression. je te dis dès qu’on arrive sur la partie stockage.

          • Loïc dit :

            Erreur de ma part RDM est bien en passthrough donc c’est bon. Par contre je comprend pas pourquoi il me dit que c’est pas disponible en mode free. Tu as ton systeme depuis plus de 60 jours ?

          • Olivier dit :

            Oui, depuis début octobre (ESXi 5.0). Je ne me souviens plus comment je les ai créé mais il sont reliés directement à ma VM nas4free.
            Je les ai formaté en zfs sur nas4free alors je ne pourrais pas tester d’en sortir un pour le lire ailleurs.

          • Loïc dit :

            Une dernière question (promis après je t’embête plus avec vmware), As tu essayé de mettre une clef modem USB sur une machine virtuel ? En gros j’ai une clef USB Huawei e220 qui me sert a envoyer des SMS a partir de script PHP qui accède directement par communication série a la clef USB et je voudrais savoir si ça pose des problèmes au niveau Vmware donc si tu as essayé…

          • Olivier dit :

            Non je n’ai branché aucun périphérique externe sur le serveur à par un disque USB que j’ai monté directement dans la VM nas4free.

      • Thomas dit :

        Bonjour Olivier, je suis intéressé pour faire reconnaître la kinect sous la VM Windows. Pourrais tu me dire ce que tu as rajouté dans le fichier VMX pour créer une carte son virtuelle ? Par avance merci.

        • Olivier dit :

          Salut,
          Désolé pour le retard (j’étais en vacances).
          Dans mes souvenirs, il faut sortir la vm du pool de machine puis dans le .vmx il faut ajouter cela :

          sound.present = « true »
          sound.allowGuestConnectionControl = « false »
          sound.virtualDev = « hdaudio »
          sound.fileName = « -1 »
          sound.autodetect = « true »
          sound.pciSlotNumber = « 34 »

          Ensuite remettre la vm dans le pool et tu auras un périphérique HD Audio dans la config de la machine.

          J’ai suivi ce tuto : http://kendrickcoleman.com/index.php/Tech-Blog/virtual-hd-audio-hardware-in-vsphere-5.html

        • Olivier dit :

          Par contre je ne sais pas si le kinect fonctionne directement sur la vm? moi je passe par un raspberry.

          • Thomas dit :

            Non en effet la kinect ne fonctionne pas directement sur VM. Il faut obligatoirement passer par un raspberry, malheureusement.

            J’ai acquis un model B+ et espéré que la nouvelle version des ports USB me permettent d’échapper au hub USB mais j’ai peur de ne pouvoir y faire l’impasse. Il est bien référencé sur lsusb mais quand je fais un « cat /proc/asound/card » il n’y apparaît pas.

          • article 15 dit :

            L’univers linux est comme ça!
            1. soit tu apprends a compiler toi même les modules que tu as besoin pour ton projet!
            2. Soit tu perd ton temps en cherchant sur des forums si une personne autre que toi s’interesse au même projet pour echanger des connaissances!
            3. Tu peux aussi trouver les dépôts sur des autre version linux(knoppix, ubuntu,edubuntu, etc…) et les adapter sur rasp en les compilant!
            4. Tu paie une personne certifier Linux pour t apprendre à le faire et t’apporte une assistance technique ex:mes tarif sont 25€ de l’heures!
            5. Contrairement aux autres OS free ne veux pas dire gratuits mais free to use ou payer pour une assistance!

          • Olivier dit :

            Je ne vois pas le rapport avec la question ? On parle de compatibilité Kinect avec vmware ESXi.

  3. kornflex dit :

    Bonjour,

    Je viens de trouver un moyen d’utiliser un raspberry pi avec kinect et qui soit reconnu dans ton windows :
    usb over ethernet : http://store.raspberrypi.com/projects/virtualhere

    cela te permettra d’utiliser kinect sous windows, de le mettre plus loin qu’a coté de ton serveur et pourquoi pas d’en mettre partout dans la maison

    Sinon, je rebondit sur la question du passtrough. J’aimerai bien aussi pouvoir lire mes données de mes disques sur une machine physique en cas de souci !

    • Olivier dit :

      Salut,
      Je connais ce soft mais il est payant et je ne sais pas si ça fonctionne avec le kinec. J’ai vu plusieurs demandes à ce sujetmais je n’ai pas trouvé de réponse positive, à tester.
      J’ai par contre depuis l’article réussi à streamer le son du kinect depuis le Raspberry (post à venir) ce qui permet de ne rien ajouter coté SARAH.

      Pour le passtrough, je ne suis pas assez compétent dans le domaine pour t’assurer que c’est ok. A priori oui mais je n’ai pas d’autre machine capable de lire du ZFS pour faire le test :/

  4. Loïc dit :

    Je viens de faire une installation d’un ESXi en version 5.5 et ajouté la licence free mais je ne peux ajouter un disque RDM dessus la case est grisé…. je pense que c’est du à un probleme de licence. Pourrais tu me confirmer que tu es en RDM avec une licence free ?

  5. Bzh69 dit :

    Sur mon Rpi:

    ffplay : commande introuvable ?

    Je suis un noob
    Je suis un noob
    Je suis un noob
    Je suis un noob

    ffmpeg est bien installé…
    Mais qu’ai je sauté comme étape ?

  6. Christian dit :

    Bonjour Olivier,

    Je ne trouve pas ton tuto pour installer sarah 2.95 ?

    Où est-il stp ?

    Chris

  7. Christian dit :

    Olivier,

    Où puis-je trouver la commande pour installer SARAH 2.9.5 sur RPI ?

    Merci à toi,

    Christian

  8. chtiloft dit :

    hello l’ami, j ai un mv wk7 sous esx 5.5, mais impossible de faire fonctionne la kinect windows.
    est ce possible de confirmer que ta procédure plus haut fonctionne avant qu eje casse tout (assez newbie avec vmware :)).
    Dans mes souvenirs, il faut sortir la vm du pool de machine puis dans le .vmx il faut ajouter cela :

    sound.present = « true »
    sound.allowGuestConnectionControl = « false »
    sound.virtualDev = « hdaudio »
    sound.fileName = « -1″
    sound.autodetect = « true »
    sound.pciSlotNumber = « 34″

    Ensuite remettre la vm dans le pool et tu auras un périphérique HD Audio dans la config de la machine.

    J’ai suivi ce tuto : http://kendrickcoleman.com/index.php/Tech-Blog/virtual-hd-audio-hardware-in-vsphere-5.html

    tks
    NoNo

    • Olivier dit :

      Salut, oui c’est exactement ça. Par contre tu ne pourras pas connecter le kinect directement sur la VM si c’est ta question ? Il faudra que tu passe par le streaming du son.

      • chtiloft dit :

        Merci pour ta réponse Olivier.
        ok, donc pas de kinect en jeu sur ce point. juste un micro sur le rpi par ex, c’est bien ca ?
        NoNo

        • Olivier dit :

          Ce que je voulais dire c’est que tu ne pourras pas brancher le kinect directement sur la VM. Par contre tu peux le brancher sur un raspberry et streamer le son du micro du kinect vers la VM, c’est à cela que sert la carte son virtuelle que tu vas créer (via la modif du .vmx)

  9. olfax dit :

    Bonjour,
    J’ai compilé ffmpeg afin d’avoir le support support alsa sur la kinect.
    Je lance le stream d’un microphone usb à l’aide de la commande

    SARAH=192.168.1.8
    PORT=7887
    LD_LIBRARY_PATH=/usr/local/lib ffmpeg -ac 1 -f alsa -i hw:1 -ar 16000 -acodec pcm_s16le -f rtp rtp://$SARAH:$PORT

    J’ai été obligé d’ajouter le parametre -ac sinon j’avais l’erreur

    [alsa @ 0x10a8450] cannot set channel count to 2 (Invalid argument)

    Et coté Sarah 2.95 , je recois bien des données mais rien de reconnu coté reco.
    Si je teste l’écoute sur un autre PC sous Linux

    avplay version 0.8.13-6:0.8.13-0ubuntu0.13.10.1, Copyright (c) 2003-2014 the Libav developers
    built on Jul 15 2014 13:48:35 with gcc 4.8.1
    [rtp @ 0x7f75680008c0] Unable to receive RTP payload type 72 without an SDP file describing it
    [rtp @ 0x7f75680008c0] Estimating duration from bitrate, this may be inaccurate
    Input #0, rtp, from ‘rtp://192.168.1.19:7887’:
    Duration: N/A, bitrate: N/A
    rtp://192.168.1.19:7887: could not open codecs
    1413648279.77 A-V: 0.000 s:0.0 aq= 0KB vq= 0KB sq= 0B f=0/0

    Je n’arrive pas à écouter le flux streamé

    Une idée ?

  10. Alex dit :

    Bonjour, j’ai un problème avec le port rtp quand le serveur est lancé en faisant un nmap sur le port 7887 celui ci est fermé

  11. MUNIER Frédéric dit :

    J’ai réussi en VT-D a rattacher un kinect X360 à une VM sous proxmox en passthrough via une carte PCIe USB 3.0. Tout fonctionne y compris la vidéo.

    En USB passthrough j’avais le même problème que vous donc en attachant une carte Pcie à la VM où est branché le kinect on contourne le problème !!!

    • Olivier dit :

      Salut, merci pour cette info 🙂

    • DomoJimbo dit :

      Bonjour,

      J’ai plein de questions de débutant dans ce monde serveur (je viens de l’embarqué contraint…)
      – proxmox est un hyperviseur de type 1 (ie baremetal, concurrent de ESXi ou Xen ?)
      – proxmox est-il gratuit pour un usage perso ?
      – à part le VT-D ? y’a t-il d’autres besoins HW ? en gros j’ai un PC lambda avec un i5 (VT-D), 8Go de RAM => ça peut le faire ?
      – Avais-tu aussi le soucis avec proxmox en usb passthrough ?
      – y’a t-il des précautions à prendre pour choisir la carte PCIe USB ? ou n’importe quelle carte ira bien ?

      Je comprends que tu as mis une carte USB 3.0 en PCIe dans ta machine, dédiée cette carte à la VM qui tourne Windows, et hop tu vois et utilise correctement la kinect depuis cette VM Windows, c’est bien ça ?

      – tu as une kinect de Xbox 360 ou une kinect Xbox one ? à priori 360 d’parès ton post. Sais-tu si cela fonctionne avec une one ?

  12. bibiyanki dit :

    bonjour:
    Je n’ai pas compris pourquoi, aurais t’on besoin de windows?

    je suis débutant mais en gros
    je connecte n’importe quel micro en usb sur mon raspberry
    quand je parle, il entend bien ma voix et par un autre programme envoi les informations à un périphérique selon ce que je dis?

    bien on peut déjà connecter des capteurs via les gpio, non?

    ou plus simplement on peut envoyer les informations sur le serveur local à un serveur domotique type zibase?

    merci pour vos informations

    • Olivier dit :

      Bonsoir,
      Le logiciel utilisé ici pour faire la reconnaissance vocale est SARAH, qui ne fonctionne que sous Windows.

      Comme je ne souhaite pas installer un PC dédié à cette tache sous Windows, j’utilise une VM sur mon serveur et je streame le son du kinect (relié à un raspberry) vers cette machine.

      Est ce plus clair ?

  13. Vincent dit :

    Bonjour, je connais pas grand chose en code, scrip…t. Mais je m’intéresse au raspberry pi et au commande vocale. et donc Sarah. Et je me demande pourquoi on utilise pas l api de reconnaissance vocale de google ? http://www.grafikart.fr/tutoriels/javascript/web-speech-api-424

  14. answer dit :

    Vous pouvez mettre le tout sur un readynas ultra ou 2 duo v1 environ 40 euro, il y a un script pour installer debian total
    Voilà ce que fait le mien
    Téléchargé toutes les dernières sériés,films, tuner TNT, Sarah avec micro HP classique et serveur zibase, 8watts le tout….
    Les raspberry je m en sers comme console, serveur multimédia, cryptomonnaie

    Tout est possible sur linux

  15. bertrandj2 dit :

    Bonjour,

    je m’intéresse fortement à ce projet, kinect + rasp + sarah sur vm déportée
    pour le moment le pi et la kinect sont ok mais impossible de trouver une vieille version de sarah puisque la dernière semble ne pas marcher avec le rdp,
    auriez vous ça quelque part s’il vous plait ?
    Merci

  16. help dit :

    tu peux m’expliquer comment tu fais pour faire marcher kinect sous linux?? car tu es un des premiers à réussir, je vois pas ou tu as lu que c’etait possible

    je suis sous debian
    merci

  17. Hervé dit :

    Bonjour,
    impossible de trouver la version 2.95, quelqu’un en aurait-il une copie à partager SVP ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *