URL: https://linuxfr.org/news/nocomprendo-continue-son-chemin
Title: NoComprendo continue son chemin
Authors: be.root
Ysabeau, palm123 et ZeroHeure
Date: 2020-02-24T09:45:56+01:00
License: CC by-sa
Tags:
Score: 5
Il y a quelque temps, je vous présentais [NoComprendo, logiciel de commandes vocales](https://linuxfr.org/users/be-root/journaux/nocomprendo-la-commande-vocale-pour-linux) en cours de développement. Deux mois plus tard sortait [la version 1.0](https://linuxfr.org/news/nocomprendo-version-1-0).
Depuis j’ai été contacté par l’équipe de Mageia et celle de [DVKBuntu](https://dvkbuntu.org/) un projet handy opensource.
Pour les premiers, j’ai amélioré et simplifié le processus de build et les outils utilisés. Pour les seconds, j’ai apporté quelques modifications d’ergonomie. Pour le plaisir, j’ai éliminé les outils externes de création de « Language model » pour le remplacer par un interne, codé en Qt/C++.
Voici donc une nouvelle version numérotée 1.1.
----
----
Nouveautés
==========
Rappel
------
NoComprendo est fourni avec un ensemble de commandes de démonstration (orienté Plasma/KDE). Ces commandes ne prétendent pas être adaptées à tout le monde, elles sont là comme exemples de ce qu’on peut faire.
C’est à chacun de constituer des groupes de commandes adaptés à son environnement et aux applications qu’il utilise.
Vérifier si les commandes disponibles correspondent bien à vos besoins.
Nouveautés dans l’interface
---------------------------
### Sélecteur de langue :
- NoComprendo utilisait par défaut la variable d’environnement « LANGUAGE » pour sélectionner la langue par défaut ;
- maintenant, au premier démarrage, l'application vous propose de choisir parmi les langues disponibles (fr_FR et en_US) ;
- elle pourra être changée plus tard dans le dialogue de configuration ;
- les groupes de commandes sont bien sûr différenciées pour chaque langue.
### Zone de notification
- Apparition d’une icône dans la zone de notification, pour surveiller l’état de NoComprendo la fenêtre repliée.
### Barre des tâches
- NoComprendo peut être supprimé de la barre des tâches.
- La fenêtre reste accessible par la zone de notification ou par méta-commande vocale.
### Localisation de la souris
- Quand on a perdu de vue le pointeur sur nos écrans devenus trop grands, on a l’habitude de secouer un peu la souris pour le retrouver. Mais sans les mains ?
- Une nouvelle méta-commande lance une petite animation pour localiser le pointeur (dire « chercher souris »).
### Nouvelles méta-commandes
- Une commande de réduction de la fenêtre de l’application dans la barre des tâches : **Minimize**.
- Une commande pour ré afficher et faire passer NoComprendo au premier plan : **Raise**.
- La commande de localisation du pointeur : **MouseShow**.
### Confirmation de sortie
- Une fenêtre de confirmation est activable avant de quitter l’application. C’est facile de lancer une commande vocale de sortie par erreur.
### Options de ligne de commandes
```
[user@localhost]$ nocomprendo --help
Utilisation : nocomprendo [options]
Commande vocale pour Linux/X.org
Basé sur Qt et PocketSphinx.
Options :
-h, --help Afficher cette aide.
-v, --version Afficher les informations de version.
-a, --author Afficher les informations sur l’auteur.
-i, --license Afficher les informations de licence.
-b, --libs Afficher la version des librairies.
-p, --pocket Log pocketsphinx complets.
-w, --words Tracer les mots reconnus.
-l, --languageModel Afficher le fichier "Language model".
```
- Les logs pocketsphinx sont maintenant cachés depuis un terminal et accessibles avec l’option « pocket ».
- L’option « words » permet de suivre depuis le terminal les énoncés reconnus par NoComprendo.
- L’option « languageModel » affiche le fichier statistique utilisé par NoComprendo (dépend des groupes de commandes sélectionnés).
Simplification du build
-----------------------
Suite à quelques remarques de l’équipe Mageia, j’ai simplifié le processus de build.
- Suppression de la dépendance à Python 2 (utilisés par défaut dans le build des librairies).
- Suppression des CMU Tools pour créer le « Language model ».
Quelques mots sur les « Language models »
=======================================
Pour fonctionner, NoComprendo a besoin d’un « Language model » (LM).
- Un LM est un fichier statistique sur les probabilités d’occurrences de mots et de groupes de mots.
- On forme d’abord un corpus (ensemble des énoncés disponibles), qu’on « mouline » pour obtenir un LM.
- Avec le corpus suivant :
```
afficher bureau
arrêter écoute
avancer onglet suivant
basculer
chercher souris
descendre page
démarrer console
```
- On obtient ce LM :
```
\data\
ngram 1=17
ngram 2=10
ngram 3=1
-grams:
-1.1027 -0.3010
-1.5798 -0.2653
-1.5798 -0.2653
-1.5798 afficher -0.2894
-1.5798 arrêter -0.2894
-1.5798 avancer -0.2894
-1.5798 basculer -0.2653
-1.5798 bureau -0.3010
-1.5798 chercher -0.2894
-1.5798 console -0.3010
-1.5798 descendre -0.2894
-1.5798 démarrer -0.2894
-1.5798 onglet -0.2894
-1.5798 page -0.3010
-1.5798 souris -0.3010
-1.5798 suivant -0.3010
-1.5798 écoute -0.3010
-grams:
-0.3010 -0.3010
-0.3010 -0.3010
-0.3010 afficher bureau -0.3010
-0.3010 arrêter écoute -0.3010
-0.3010 avancer onglet 0.0000
-0.3010 basculer -0.3010
-0.3010 chercher souris -0.3010
-0.3010 descendre page -0.3010
-0.3010 démarrer console -0.3010
-0.3010 onglet suivant -0.3010
-grams:
-0.3010 avancer onglet suivant
\end\
```
Les chiffres affichés sont des log10 (probabilités) : -0.3010 correspond à 0.5 (50 %).
En démarrant l’application, j’ai d’abord utilisé un outil en ligne les [LM tools version 3](http://www.speech.cs.cmu.edu/tools/lmtool-new.html). Mais NoComprendo a commencé à beaucoup solliciter le site et ça ne pouvait pas être une solution durable.
Je n’ai pas trouvé le code des LM tools 3, mais j’ai mis la main sur les [LM tools version 2](http://www.speech.cs.cmu.edu/SLM/toolkit.html). C’était compilé/installé et intégré par un script bash dans la première mouture de NoComprendo.
À l’usage, j’ai compris que ces outils étaient trop évolués pour mes besoins. Ils sont faits pour ingurgiter un énorme corpus et produire des probabilités sur des groupes de mots possibles, mais non présents dans le corpus. Le LM produit contenait des énoncés supplémentaires qui perturbaient le fonctionnement de l’application.
Puis j’ai (re)trouvé un script Perl qui faisait l’affaire : [QuickLM en ligne](http://www.speech.cs.cmu.edu/tools/lm.html) et disponible à cette adresse : [QuickLM en Perl](http://www.speech.cs.cmu.edu/tools/download/quick_lm.pl). Je l’avais déjà croisé, mais je n’avais pas compris à l’époque que sa simplicité en faisait un outil particulièrement adapté.
Après quelques jours de tests, j’ai décidé de réécrire QuickLM en Qt/C++.
Perl est un langage qui terrifie un peu, mais dans ce cas-là le code est relativement simple, linéaire et clair (pour du Perl) et les QMap et QRegExp de Qt peuvent facilement remplacer les structures et expressions régulières de Perl. Au final : 170 lignes de Perl transformées en 170 lignes de Qt/C++ maintenant intégrées dans l’application. On ne peut pas dire que le code final soit beaucoup plus lisible que l’original, mais plus besoin d’outil extérieur et de dépendance à Perl.
Le fichier quick_lm.pl reste présent dans l’archive (comme référence) mais n’est plus installé avec les paquets.
Pour les plus curieux, la traduction de quick_lm.pl en Qt/C++ est dans le fichier languagemodeler.cpp.
Pérennité de l’application
==========================
Pérennité des outils
--------------------
### Xdotool et X.org
[xdotool](https://www.semicomplete.com/projects/xdotool/) n’est pas un projet des plus actifs. La page d’accueil est datée de 2015.
D’un autre côté, avec l’arrivée de Wayland, il ne faut pas s’étonner qu’il n’y ait pas de frénésie de développement autour de cette librairie. Elle est stable depuis cinq ans et NoComprendo n’utilise que quelques commandes basiques.
### Pocketsphinx
La page d’accueil du [CMUSphinx project](https://cmusphinx.github.io/) nous rappelle (octobre 2019) qu’ils sont toujours actifs même si la reconnaissance vocale a pris d’autres voies récemment (Deep learning, etc.). PocketSphinx reste un outil qui fonctionne bien et adapté à de petites configurations (RPi).
### eSpeak (facilement désactivable)
[eSpeak](http://espeak.sourceforge.net/) est un TTS (Text To Speech) de qualité moyenne, il pourra être facilement remplacé par un TTS de meilleure qualité.
J’avais ajouté la synthèse vocale un peu pour m’amuser. Je l’ai laissé parce que c’est pratique dans certains cas, même si j’ai pris l’habitude de la désactiver.
Il a l’avantage d’être disponible dans toutes les distributions. L’interface avec eSpeak est regroupée dans un seul fichier de cinq fonctions. Une option de compilation permet de le supprimer du build.
Pérennité du développeur
------------------------
Comme je l’ai sous-entendu dans mon premier journal, le développeur non plus n’est pas de première fraîcheur. Il serait même plus vieux ~~que Linux~~ qu’Unix.
Je compte bien assurer le suivi quelques années, mais il y a peu de chances que je sois encore là pour entretenir ce code dans quinze ans.
Dans cette perspective le code a été organisé pour qu’il n’y ait à intervenir que sur un seul module pour changer d'outil de pilotage du GUI.
L’avenir avec Wayland
---------------------
Pour le moment, je n’ai encore jamais installé de machine avec Wayland. Si un module (genre rdesktop ou autre) permet un jour d’adapter NoComprendo, il suffira de remplacer une dizaine d’appels de xdotool vers Wayland et de mettre à jour une table de conversion de séquences de touches si nécessaire (tout est dans le fichier guicontrol.cpp).
J’aimerais écrire cette évolution moi-même, mais je ne fais pas vraiment de veille technologique autour de Wayland.
Quand un outil sera disponible, je me pencherai volontiers sur le problème.
Conseils de configuration et d’utilisation
==========================================
Halte à la technique informatique, voici un peu de technique acoustique pour bien commencer avec NoComprendo.
Avale ta haine, étouffe ta joie !
---------------------------------
Un commentaire d’un journal précédent me demandait si je ne me sentais pas fou à parler tout seul à mon ordinateur.
Après réflexion, je crois que beaucoup de gens parlent à leur ordinateur et souvent sur un ton pas très amical (trucs qui plantent, machins qui rament trop).
Avec NoComprendo j’ai dû changer d’habitude, pas d’énervement, mais pas d’enthousiasme non plus, une ton neutre, une bonne respiration et bien articuler. Ce type de reconnaissance vocale n’est pas vraiment compatible avec l’expression d’émotions.
Effet collatéral inattendu : ces exercices imposent un certain calme intérieur pour être bien compris, j’en ressors plus détendu, on peut presque considérer ça comme un exercice respiratoire apaisant.
En fin de journée quand la voix et le tonus faiblissent, l’efficacité de la reconnaissance vocale s’en ressent.
Évite les commandes monosyllabiques
-----------------------------------
Il est tentant d’associer les touches flèches vers le haut et bas aux mots « haut » et « bas ».
Pourtant les commandes formées d’une seule syllabe ont la fâcheuse manie de se déclencher de façon intempestive.
Le moindre bruissement, grincement de chaise, reniflage ou soupir (de désespoir face à un bug) risque d’être interprété comme des mots brefs « fin », « flux », « fort » etc. Il vaut mieux qu’ils ne déclenchent rien.
Tous ces mots peuvent faire partie du vocabulaire, mais devraient être combinés pour former un énoncé de plusieurs syllabes : « plus fort », « ouvrir flux », « touche fin » par exemple.
A l’usage, on s’aperçoit qu’un bon énoncé est formé d’au moins deux à trois syllabes. Plus un énoncé est long, plus il sera identifiable avec précision.
Choisir le mot « quitter » pour émettre la touche Ctrl+Q est trop risqué, un énoncé comme « quitter application » est plus sûr.
Malgré ces bons conseils, j’ai laissé dans les commandes de démonstration le mot « clic » pour l’action clic gauche, parfois PocketSphinx préfère entendre « quitte ».
Prends garde aux homophonies
----------------------------
Parfois on a un ensemble de commandes qui fonctionne bien, mais l’ajout d’un nouveau mot peut déstabiliser ce bel équilibre.
Il vaut mieux ne pas trop étendre le vocabulaire, car cela risque de multiplier les possibilités que des mots s’entrechoquent.
Réutiliser les mots déjà là pour former de nouveaux énoncés.
Ne tapote pas sur le clavier avec l’écoute active
-------------------------------------------------
Si votre micro est proche de votre clavier, il est préférable de suspendre l'écoute avant de faire de la saisie continue. Le clapotis des touches peut être pris pour des commandes et provoquer de mauvaises surprises (changement de ligne au milieu d’un mot, clic ailleurs dans la fenêtre ou dans une autre fenêtre).
Sauve la planète
================
Il serait inconcevable en 2020 de présenter une application qui ne soit pas durable et qui ne sauve pas la planète.
NoComprendo vous permet d’atteindre ce but.
En effectuant une reconnaissance vocale locale, vous :
- faites l’économie du transfert de votre voix jusqu’à un serveur étasunien ;
- réduisez la surchauffe d’un serveur rempli de processeurs parallèles pour décoder votre parole à l’autre bout du monde ;
- faites l’économie du retour à travers la planète des trois mots que vous avez articulés vers votre ordinateur ;
- votre parole étant restée chez vous, elle n’occupera pas d’espace de stockage sur les serveurs de gens bien intentionnés.
Liens
=====
- Plus d’infos sur le site de [NoComprendo](http://be.root.free.fr/?soft=nocomprendo), visitez l’aide.
- Les paquets d’installation chez OBS : [Téléchargement](https://software.opensuse.org/download.html?project=home:be-root:nocomprendo&package=nocomprendo)
- Quelques [tutoriels vidéos](http://be.root.free.fr/?soft=nocomprendo&menu=tutos) (qui n’intègrent pas les dernières nouveautés).