PAGE WIKI ETUDIANTS 2011-12 SERRURE VOCALE
Présentation du projet
Le but de ce projet est de développer un système de reconnaissance vocale. Le projet consiste à réaliser un programme permettant d'ouvrir une gâche électronique simplement par la parole. Les voix des locuteurs seront préalablement enregistrées, et devront être identifiées par un système de reconnaissance vocale afin de permettre ou non l'ouverture de la gâche électronique. Pour réaliser ce projet, nous disposons d'un montage électronique de la gâche qui sera ouverte ou non selon l'acceptation ou le rejet du signal reçu en entrée. Pour la démonstration du projet, nous réaliserons une interface graphique qui permettra l'enregistrement des voix ainsi que leur reconnaissance. La partie IHM sera plus expliquée en détail grâce à des sketchs par la suite.
Nous étudierons aussi à la fin du projet les performances et la robustesse de notre système.
Déroulement du travail
Etude de l'existant
Ce projet a déjà été réalisé l'année précédente, pour cela,la première étape sera d'analyser le travail effectué par les élèves de l'année précédentes, afin de garder les parties fonctionnelles et les améliorer. Ce projet est essentiellement composé de trois grandes parties:
- Montage électronique de la gâche
- Acquisition et Reconnaissance des données
- IHM de pilotage de la gâche
Pour la réalisation de la phase d’acquisition, les travaux se sont appuyés sur le TP Biométrie préparatoire à ce projet.
Les signaux de départ correspondent aux voix des membres du groupe enregistrées au format raw comme dans le TP. Les vecteurs paramètres de ces voix ont ensuite été générés grâce à l’outil spro, puis le modèle du monde créé en suivant les étapes décrites dans le TP préparatoire. Les modèles de locuteurs correspondant à ces 12 voix qui seront reconnues par le système ont également été créés.
L’an dernier, en plus de l’acquisition des signaux de 12 membres du groupe, deux scripts ont été également faits pour l’acquisition du signal d’un nouveau locuteur et la reconnaissance d’un locuteur quelconque par le système. Le script d’acquisition de signaux permet donc d’enregistrer le signal d’un nouveau locuteur, de créer le vecteur de paramètre, de traiter le signal (normaliser, détecter l’énergie, renormaliser) et de l’ajouter au modèle du monde. Lors de l’acquisition le locuteur peut choisir d’être reconnu par le système ou non. S’il souhaite être reconnu alors son modèle de locuteur est généré. Une méthode java permettant d'exécuter un script shell a été réalisée mais nous ne disposons pas de cette méthode dans la documentation fournie. Le script de reconnaissance du locuteur permet de tester l’appartenance d’un locuteur au système. Il enregistre le signal du locuteur pendant quelques secondes, crée le vecteur de paramètres, traite le signal (normalisation, détection de l'énergie, re-normalisation) puis teste, en fonction de son nom, si ce locuteur est reconnu par le système ou non. Vu que cette partie du projet a été bien réussie, nous réutiliserons, les 2 scripts fournis. Pour ne pas avoir à chercher en permanence des personnes extérieures à notre système pour les tests, nous utiliserons les membres de notre groupe de 6 : 4 locuteurs reconnus par le système et 2 imposteurs.
Concernant l'IHM réalisée l'année précedente, il existe 2 modes distincts:
- Le mode acquisition qui sert à récupérer le signal et créer un modèle à partir de celui-ci.
- Le mode test qui sert d’identification. L’authenticité de l’utilisateur est vérifiée en comparant au modèle enregistré.Ces modes sont aussi utilisés dans notre application, mais l’interface est différente.
Mode acquisition :
Il faut entrer le nom de l’utilisateur et la durée souhaitée de l’enregistrement. En dessous se trouve un texte important que l’utilisateur doit lire, après avoir lancé l’enregistrement à l’aide d’un bouton. Le problème de ce type d’interface vient du texte à lire. En effet, celui-ci représente un pavé énorme, pas forcément facile à lire pour l’utilisateur. Il serait plus aisé de lire plusieurs phrases courtes, apparaissant l’une après l’autre, plutôt que de lire cet imposant paragraphe.
Mode test :
Il y a un champ disponible pour l’identifiant de l’utilisateur, ainsi qu’un slider permettant de définir le seuil. Une fois le nom entré et le seuil réglé, l’utilisateur lance l’enregistrement à l’aide d’un bouton. Il prononce alors la phrase de son choix (environ 3secondes).
Ce modèle possède des défauts. Le plus flagrant est de donner à l’utilisateur le choix du réglage du seuil :
- Il ne sait pas forcément ce qu’est ce seuil, et ne comprend donc pas l’utilité du slider.
- S’il connait l’utilité, il peut alors le régler pour essayer de fausser la reconnaissance.
Les développeurs de cette précédente version ont précisé qu’il s’agissait d’une interface de « test » et non « d’identification », ce qui explique les libertés données à l’utilisateur.
Le second défaut est la liberté donnée pour la phrase à dire :
- D’un point de vue purement IHM, il est moins déroutant (et donc plus rapide) pour l’utilisateur de réciter une phrase affichée que d’en inventer une.
- D’un point de vue reconnaissance vocale, il est aussi plus facile de comparer une phrase connue au modèle. On limite aussi les risques (phrase trop courte par exemple).
Répartition des tâches
Nous avons réparti les différentes parties sur les différents membres du groupe. Nous allons démarrer en parallèle les trois parties: Montage, acquisition et IHM afin de gagner un maximum de temps. Une fois ces parties finies, on se penchera tous sur l'interfaçage entre l'IHM et les scripts de reconnaissance ainsi que les tests de performances. Voici les rôles de chaque membre de l'équipe:
Chef de projet:
- NAHUM Solis
Développeurs Acquisition/ Reconnaissance:
- MALKAS Benjamin
- NAHUM Solis
- EL BAKKOURI Nysrine
Montage gâche:
- ODUL Jonathan
Développement IHM:
- ODUL Jonathan
- RIOT Emilien
- SEISSON Julien
Responsable wiki:
- EL BAKKOURI Nysrine
Diagramme prévisionnel de tâches
Requis non fonctionnels
Pour ce projet, nous avons choisi de mettre l’accent sur la fiabilité, l’utilisabilité, la maintenabilité et la robustesse du système.
Interface intuitive
L'utilisateur doit passer par une interface d'interaction afin de piloter le système, pour cela, nous avons jugé important de réaliser une interface intuitive, ergonomique et très facile d'utilisation.
Test des performances et robustesse de notre système
Afin de tester les performances de notre système, il est nécessaire de fixer une valeur seuil d’acceptation/rejet. Cette valeur doit permettre au mieux de deviner si la personne qui est en train de s’identifier est la bonne personne ou non. Nous allons donc effectuer plusieurs tests à partir de notre modèle du monde. La bonne valeur du seuil sera trouvée lorsque le nombre de faux rejets sera égal au nombre de fausses acceptations.
Requis fonctionnels
Montage électronique de la gâche
Description Cette partie consiste à réaliser un simple montage électronique qui nous permettra de tester le système à la fin du projet.Voici une petite vidéo montrant les différents composants du montage ainsi que le fonctionnement de celui-ci:
Objectif L’objectif est de piloter la gâche électrique depuis un PC en passant par une carte Arduino. Cette dernière devra donc être reliée à un PC en série (via USB), et la gâche électrique branchée à une sortie digitale du microcontrôleur. La carte Arduino devra être pourvue d’un programme qui sera en mesure d’acquérir les commandes reçues via le port série, donc du PC, et ainsi, après interprétation, envoyer un signal d’ouverture ou de fermeture à la gâche. La réalisation d’un programme sur PC sera nécessaire dans le but de pouvoir envoyer sur le port série, correspondant à la carte Arduino, les commandes d’ouverture et de fermeture. Pour cela, il existe la librairie RXTX permettant cela dans un programme Java. De plus, avec cette librairie, nous pouvons trouver beaucoup de tutoriels sur internet expliquant son utilisation pour communiquer avec une carte Arduino depuis un programme Java. En regroupant toutes ces technologies, nous devrions être en mesure de piloter depuis un programme Java tournant sur un PC, la gâche électrique.
Matériel requis
- Gâche électrique
- Carte Arduino (ou de la même famille)
- Batterie
- Breadboard
- Quelques fils et câbles
Arduino
Une sortie digitale (aussi appelée « pin ») sur une carte Arduino permet une commande à deux états pouvant être « haut » et « bas ». Quand on envoie un signal « haut » à une sortie digitale, alors cette dernière sera alimentée en 5 volts, tandis qu’au contraire, si un signal « bas » correspondra à une tension nulle.
Ainsi, selon la configuration de notre câblage, un signal haut correspondra à l’ouverture de la gâche électrique, et un signal bas correspondra à sa fermeture.
Afin de faire fonctionner le système, la carte Arduino devra inclure un programme compilé permettant ces actions :
- Initialisation de la communication sur le port série
- Initialisation de la sortie digitale correspondant au branchement de la gâche électrique
- Lire en continue les données reçues via le port série :
o Si commande ‘o’ reçue, envoyer signal haut à la sortie digitale
o Si commande ‘c’ reçue, envoyer signal bas à la sortie digitale
Programme Java
Afin de communiquer avec la carte Arduino, la librairie RXTX est nécessaire. L’objectif ici est simplement de créer une fonction envoyant la commande ‘o’ à la carte Arduino pour ouvrir la gâche électrique, ou bien la commande ‘c’ pour la fermer.
Un tutoriel complet est disponible à cette adresse http://arduino.cc/playground/Interfacing/Java expliquant comment établir une communication entre un programme Java et une carte Arduino.
Dans notre projet, l’environnement utilisé est un environnement Windows, ainsi certaines des indications qui suivront ne sont valables seulement pour cet environnement. Pour faire de même dans un autre environnement, se reporter au tutoriel indiqué ci-dessus.
Pour utiliser RXTX dans un projet Java, cela nécessite plusieurs choses à faire :
- ajouter la librairie RXTXcomm.jar de RXTX dans le buildpath du projet ;
- copier le fichier rxtxSerial.dll dans le répertoire du projet ;
- ajouter le paramètre « -Djava.library.path=. » dans les arguments de la JVM. Le chemin doit correspondre à l’emplacement du fichier .dll copié auparavant.
Par la suite, il faut aussi que les drivers de la carte Arduino soient installés et que cette dernière soit reconnue par le PC en tant que port COM. De plus, il faudra bien noter quel numéro est attribué au port de la carte Arduino lors de l’installation du matériel (COMX). Il est aussi possible de le voir dans la liste des matériels du PC. En effet, il servira à indiquer dans le programme à quelle adresse joindre la carte Arduino.
Acquisition et Reconnaissance des données
Cette partie demande la mise en place de l'environnement de travail, pour cela, il faut faire le TP: http://www-clips.imag.fr/geod/User/laurent.besacier/NEW-TPs/TP-Biometrie/ qui explique bien toutes les étapes d'installation.
IHM de pilotage de la gâche
Voici quelques prises d'écran du système: