English

Construire Jenkins

Depuis quelques semaines, je comble mes temps libres avec un nouveau projet: Jenkins.

Inspiré de Jarvis, l'assistant robotisé de Tony Stark, Jenkins donne la température et les horaires d'autobus, ouvre la porte aux invités et raconte quelques (mauvaises) blagues. Grâce à l'élégante simplicité de son système d'interprétation des commandes, ses capacités grandissent à la vitesse de mon imagination.

Le but

Le but du projet Jenkins est de rendre les tâches quotidiennes accessibles par commande vocale. Au lieu de devoir aller voir ma liste de tâches, la balance de mon compte de banque et l'heure de passage du prochain autobus en ligne, je préfère déléguer la tâche à un assistant personnel qui les trouvera instantanément.

Les défis

Lorsqu'une commande est donnée ("Jenkins, what time is it?", car il est anglophone), elle est reçue par gstreamer, décodée en anglais par pocketsphinx, et envoyée à un interpréteur écrit en Python qui assigne chaque commande à une action. Lorsque nécessaire, la réponse est donnée en utilisant un logiciel de synthèse vocale.

Plusieurs défis incombent le développement de Jenkins. Contrairement à Siri et Google Now, Jenkins est toujours à l'écoute et doit faire distinguer les commandes des conversations. Du coup, Jenkins répond encore à la télévision, donnant la météo lorsque personne ne le sollicite. La semaine dernière, il méprenait ses propres réponses pour des commandes. Malgré mes meilleures intentions, Jenkins n'est pas encore prêt à surveiller mon neveu.

De plus, pocketsphinx, le seul logiciel libre de reconnaissance vocal, n'offre aucune documentation utilisable. À l'instar de la majorité des projets open source, les instructions sont souvent abstraites ou incomplètes, et une bonne majorité du projet reste sans documentation depuis plusieurs années. Ironiquement, sphinx est aussi le nom d'un module de génération de documentation.

Presque tous les programmes qui utilisent pocketsphinx et gstreamer sont des copies exactes du seul exemple offert pour Python, ce qui a rendu les premiers pas très difficiles.

Heureusement, une fois que la commande est extraite de pocketsphinx, c'est business as usual: On prend une phrase et on l'associe à une fonction qu'on exécute. J'ai suffisamment simplifié cette partie pour qu'une commande puisse y être ajoutée en quelques secondes. Contrairement aux autres implémentations de pocketsphinx en Python, celle-ci est modulaire, configurable et assidûment documentée.

Lorsque Jenkins doit se prononcer, il utilise festival, un logiciel de synthèse vocale pour Linux. Celui-ci n'arrive pas à la cheville de Siri pour ce qui est de la prononciation, mais il fait bien le travail pour l'instant.

Le statut du projet

En ce moment, ajouter des commandes à Jenkins est une tâche très simple. Cependant, il a toujours de la difficulté à ignorer les conversations qui ne l'impliquent pas. C'est un problème sur lequel repose le futur du projet, et je dois encore y trouver une solution.

Dans le futur

J'ai déjà quelques idées pour des commandes futures que Jenkins pourra interpréter. J'aimerais y intégrer l'éclairage de l'appartement, le contrôle de la télévision et plusieurs autres idées farfelues. Une fois que le système de base est fiable, l'ajout de nouvelles commandes n'est pas terriblement compliqué.

Laisser un commentaire