Reconnaissance vocale : Installer SARAH sur Raspberry
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 !
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.
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 ?
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.
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).
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.
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
J’ai utilisé du Raw Device Mapping pour monter les disques dans la machine virtuelle. Est ce la même chose que le passthrough ?
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.
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 ?
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.
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é…
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.
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.
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
Par contre je ne sais pas si le kinect fonctionne directement sur la vm? moi je passe par un raspberry.
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.
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!
Je ne vois pas le rapport avec la question ? On parle de compatibilité Kinect avec vmware ESXi.
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 !
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 :/
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 ?
Je ne sais plus exactement comment j’ai configurer ça mais c’était en ligne de commande. Tu as ici un tuto où le gars configure un disque en RDM sur un esxi 5.1 (free également) :
http://forza-it.co.uk/esxi-5-1-using-raw-device-mappings-rdm-on-an-hp-microserver/
Il affiche également un comparatif des perfs entre un disque RDM et un disque VMFS5. Par contre, il y a un lien dans les commentaires indiquant un article disant que la différence de perf entre VMFS5 et RDM était négligeable … je n’ai testé qu’en RDM donc je sais pas ce qu’il en est réellement.
Je confirme : cela fonctionne.
J’ai ESXi et du RDM sur mon xpenology
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 ?
Bonjour Olivier,
Je ne trouve pas ton tuto pour installer sarah 2.95 ?
Où est-il stp ?
Chris
Salut,
Je crois que j’ai utilisé plusieurs tutos dont celui de guiguiabloc : http://blog.guiguiabloc.fr/index.php/2013/03/10/s-a-r-a-h-controler-votre-domotique-autrement/ (qui n’est pas à jour de mémoire)
Mais tu as besoin des mêmes prérequis que pour la dernière version car je switch d’une version à l’autre sur la même machine sans problème. En gros si tu as déjà la dernière version qui fonctionne, il te suffit de dézipper l’archive de la 2.95 et elle doit fonctionner.
Olivier,
Où puis-je trouver la commande pour installer SARAH 2.9.5 sur RPI ?
Merci à toi,
Christian
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
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.
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
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)
ok, merci. ET donc on perd la vidéo ;(. pas de piste de ce coté la ?
Je n’ai pas vraiment cherché car la partie vidéo ne m’intéresse pas, désolé.
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 ?
Salut, de mémoire j’ai également eu des soucis pour lire le flux directement avec ffplay. Je ne sais plus si j’y étais parvenu :/
Ok, je vais retenter directement avec le kinect alors,
merci
Il me semble que j’avais réussi à l’enregistrer quand même (peut etre avec vlc) mais je n’en suis plus très sûr, il faudrait que je refasse un essaie.
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é
Salut,
As tu activé le scan UDP (option -sU) ? si je ne dis pas de bétises RTP fonctionne sur UDP.
++
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 !!!
Salut, merci pour cette info 🙂
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 ?
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
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 ?
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
Salut,
Je ne sais pas si c’est à toujours valable pour les nouvelles versions de SARAH mais voici une explication par JPEncausse : http://blog.encausse.net/2013/05/23/sarah-google-vs-microsoft/
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
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
Bonjour,
Oui il est dispo sur le site de Sarah (http://blog.encausse.net/s-a-r-a-h/) mais c’est vrai que ce n’est pas trop visible sous le gros bouton Documentation -> http://goo.gl/8ehcu
Bon test 🙂
++
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
Salut,
Tout est expliqué sur l’article suivant -> http://connectingstuff.net/blog/reconnaissance-vocale-sarah-raspberry-et-le-kinect/
Le kinect est utilisable sous linux depuis longtps déjà. Pour ma part je n’utilise que la partie audio mais la partie vidéo est également opérationnelle.
Bonjour,
impossible de trouver la version 2.95, quelqu’un en aurait-il une copie à partager SVP ?