Interface vocale
- Catégories: Domotique
J’ai comme projet de créer une interface vocale pour contrôler mon domicile, voire d’autres chose. Il est naturel pour moi de séparer en services ce qui va composer mon Jarvis :)
La reconnaissance vocale
Service important, il doit permettre de reconnaitre des commandes simples, c’est à dire des mots clés que j’aurai préalablement choisis. Pour le moment, les commandes libres ne m’intéressent pas encore. Je ne veux pas faire de recherches sur internet ni dicter des messages.
J’aimerai aussi si possible qu’il y ait une reconnaissance de la personne. On parle de Speech recognition le fait de convertir une voix en mot. Et le Voice recognition est l’identification d’une personne par la voix.
Le matériel
Il y a un Shield Arduino qui m’intéresse : le EasyVR Shield 3
Sur le papier, on peut définir un nombre limité de commandes avec ou non une identification vocale. C’est très intéressant mais dans un environnement bruyant, ça ne marche plus. Il faudra tout de même que je fasse des tests.
Mais avant de chercher la reconnaissance, il faut d’abord capturer la voix correctement. Et ça passe par un micro efficace. Tout le monde est d’accord qu’il faut un microphone array. Cela permet d’avoir un bon appareil pour une pièce et non plusieurs disséminés dans les recoins. L’appareil est un ensemble de micros qui fonctionnent en tandem pour mieux isoler et localiser les voix.
Malheureusement, il ne semble pas possible d’utiliser ce genre d’appareil sur le EasyVR.
J’ai retenu ces micros :
Le logiciel
Après pas mal de recherches sur les logiciels qui permettent de reconnaitre des mots à partir d’un son, je n’ai rien trouvé de satisfaisant à part passer sur du propriétaire.
Et puis, le choix du logiciel est lié à celui du matériel. Du coup j’ai fait un premier test avec SARAH. Ça marche plutôt bien. Et comme il faut un Windows parce que ça utilise le Microsoft Speech Platform SDK pour reconnaître les mots, le choix de la Kinect est un bon rapport qualité/prix.
Synthèse vocale
Le feedback vocale est un service qui fait classe :)
En effet, la plupart du temps, je n’ai pas besoin qu’on me réponde. Par exemple, si je contrôle la lumière, la musique ou la télé, je n’ai pas vraiment besoin d’un retour.
Par contre, si c’est pour me donner des indications, comme arroser les plantes, m’alerter des événements du calendrier, me lire les sujets des nouveaux mails, etc.
Le matériel
J’aimerai entendre la voix distinctement depuis n’importe quel endroit.
J’ai repéré quelques matériels à tester, mais ça revient vite cher le test. J’ai pensé au très onéreux système Sonos. Je ne suis pas obligé de tout acheter d’un coup, ça peut être progressif comme les lumières.
Pour le moment, je vais me contenter d’un simple speaker. Je me suis acheté le Sonivo SW100. Il est bluetooth et intègre même un micro, je pensais faire une pierre 2 coups en installant des micros et haut parleurs partout :)
Il est puissant et fera parfaitement l’affaire pour les tests. De toute façon, chaque service doit pouvoir évoluer indépendamment.
Le logiciel
J’aurai déjà une machine sous Windows assez puissante pour la reconnaissance vocale, je vais l’utiliser pour synthétiser la voix. Il y a tout ce qu’il faut dans le projet SARAH.
La synthèse est intéressante seulement si on ne veut lire du texte. La plupart du temps, ce ne sont que des confirmations. Je peux préenregistrer les sons et les jouer par déclenchement.
Je pense que le service devrait proposer les 2 solutions et pouvoir mixer.
Les appareils à contrôler
Voilà la liste de ce que j’aimerai contrôler :
- les lumières (multicolor)
- l’allumage de la télé (je pense à un émetteur infrarouge sur un arduino/raspberry)
- Kodi (il a déjà une API, sans problème)
- les ventilateurs (avec variateur)
- le chauffage
- les stores
Le contrôle ne doit pas être exclusivement par la voix. On sait tous que les systèmes ne sont pas fiables à 100% et une panne est si vite arrivée.
Pour cela, il me fallait un protocole domotique. Il en existe plusieurs. Je choisi le Z-Wave parce qu’il a l’air répandu. Même pour les stores qui sont généralement contrôlés par le système fermé Somfy, le fabriquant vend une passerelle pour être compatible Z-Wave.
J’ai acheté une ampoule RGBW, le RazBerry, une prise et un interrupteur simple pour tester. Ça marche très bien, la réactivité est immédiate.
Je peux donc commander du matériel à l’aide de vrais interrupteurs ou via ordinateur. Il me faut juste un service qui gère le réseau Z-Wave.
Pour le moment, je vais utiliser Z-Way. Une licence est fournie avec le RazBerry.
Le système
Ok, on a donc :
- un service de reconnaissance vocale qui permet de déclencher des événements
- un service qui joue du son en prenant du texte ou des clés en entré
- un service qui contrôle les appareils Z-Wave
- un service qui contrôle Kodi
- un service qui contrôle des capteurs (déclencheurs ou actionneurs)
Chacun de ces services est une abstraction qui permettra d’utiliser d’autres solutions. Je veux qu’il soit possible de les installer dans des machines différentes, voire distantes.
Cela veut dire que si une personne est intéressée par un seul service, par exemple la synthèse vocale, elle n’a pas besoin d’installer tout le reste.
En parlant du reste, je pense surtout au moteur de règles. C’est un service qui va utiliser tous les autres. Les règles sont des scripts qui observent l’environnement pour faire des actions.
Je pensais faire tout ce système en NodeJS pour le sport. C’est l’occasion de travailler sur SolfegeJS :)
Conclusion
C’est un long projet, mais il peut être utilisable rapidement. Tout n’a pas besoin d’être implémenté et les services sont des abstractions, donc le travail a déjà été fait (en bien j’espère).
Il faut maintenant que j’investisse dans du matériel et que je crée les API des services.
Pour ceux qui se poseraient la question, même si le gestionnaire du réseau Z-Wave est en rade, on peut contrôler la lumière car les interrupteurs dialoguent directement avec les ampoules.
Commentaires