SARAH: un client Oxford pour Raspberry Pi comme Alexa ?
J’ai rapidement essayé de combiner plusieurs technos afin de réaliser une version expérimentale d’un client SARAH utilisant Microsoft Oxford pour la reconnaissance vocale. En théorie ce client devrait pouvoir tourner sur un Raspberry Pi (modulo quelques ajustements)
Microphone
Problème :
La capture d’un flux audio de manière cross-platforme n’est pas simple. NodeJS manipule très peu les flux audio.
Solution :
Le petit utilitaire SoX est une boite à outil de l’audio un peu comme FFmpeg pour la vidéo. Il est capable de capturer un flux audio de parole entre 2 silences. Je ne maîtrise pas toutes les options mais le résultat semble assez satisfaisant avec mon microphone.
Microsoft Oxford
Problème :
La reconnaissance vocale « speech 2 text » en français nécessite des algorithmes de deep learning hébergé dans le cloud. C’est le cas de SIRI, Google Now, Alexa, Cortana.
Solution :
Le projet Oxford développé par Microsoft est le service de reconnaissance vocale utilisé par Cortana. C’est une alternative à Google avec la possibilité de faire 1000 req/mois gratuitement.
Soundex
Problème :
Une fois l’audio converti en texte il faut comprendre la sémantique de cette chaîne de caractère. Et en français c’est d’autant plus compliqué. Oxford propose le projet LUIS mais qui me semble assez complexe.
Solution :
En attendant de tester LUIS, je fais une conversion du texte en sonorité avec l’algorithme Soundex adapté au Français. Cela permet d’éliminer toutes les tournures de mot. Par exemple Quoi ? deviendra KOI.
Levenshtein
Problème :
Enfin même si la phrase est ultra simplifiée et nettoyée il faut toujours la comprendre !
Solution :
J’utilise la distance de Levenshtein pour rechercher une phrase (parmi un ensemble de grammaire) qui soit la plus proche de celle prononcée.
Conclusion
Ca semble bien marcher sous windows, il faudrait tester un SoX sous Raspberry Pi. Les sources sont ici:
https://github.com/JpEncausse/SARAH-Client-NodeJS
Mais il reste un gros problème… toutes les phrases sont balancées à Microsoft Oxford alors qu’il faudrait tester avant, localement un mot clef comme « Hey Cortana » ou « Ok Google ».
Ca s’appel Keyword Spotting et c’est la question que j’ai posé à Microsoft (si vous voulez faire +1). Visiblement Google embarque un réseau de neurones entraîné sur 40.000 samples …
Ca doit être la raison pour laquelle ce Tuto d’Alexa (qui maintenant marche sur Raspberry Pi merci Korben) nécessite un bouton physique pour lui parler… pas top !
Un compte sympa à suivre: David Isbitski. Malheureusement Amazon ne recherche pas d’évangéliste en France 🙁 Peut-être quand elle parlera Français ! Ne ratez pas l’article de Domadoo et Stuffi #BringEchoToFrance
Bon si vous avez une piste (autre que CMUSphinx) pour faire du Keyword Spotting ça m’intéresse ! Ou sinon faut que je spam Microsoft pour comprendre comment fait Cortana …
Et si vous maîtriser les chaussettes ! euh SoX ça m’intéresse aussi.
Korben vient de sortir un article : http://korben.info/amazon-echo-raspberry-pi-cle-de-choix.html
De ce que j’ai compris snowboy permettrait de faire du Keyword Spotting
Un mec a dev une brique NodeJS
– Mais le machin n’est pas compatible Windows
– et une partie du machin est en SaaS propriétaire
Un article intéressant:
https://www.netguru.co/blog/voice-recognition-tools-review
j’ai essayé sans succes :
{ « statusCode »: 401, « message »: « Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription. » }
Sans comparer, car ce n’est pas la même chose, mais l’idée de combiner la reconnaissance d’un mot déclencheur parmi les autres pour ensuite faire de la reco pur et dure est intéressante, je trouve : https://www.youtube.com/watch?v=27E_BK1rUKI