Proj-2013-2014-Sign2Speech

Objectif
L'objectif de notre projet est de donner la possibilité à une personne muette d'interagir avec un ordinateur au moyen de la langue des signes. Notre application devra être capable de comprendre ce langage afin d'obéir aux ordres donnés, d'afficher sous forme textuelle ce qui a été dit par la personne et de dicter la phrase au moyen d'une technologie de synthèse vocale.

L'application aura également la possibilité d'apprendre de nouveaux gestes pour augmenter sa connaissance sur le langage des signes et ainsi reconnaître plus d'idées.

Equipe

 * Tuteur : Didier Donsez


 * Membres: Arthur CLERC-GHERARDI, Patrick PEREA


 * Département : RICM 4, Polytech Grenoble

Etat de l'art
Reconnaissance de l'alphabet du langage des signes

Reconnaissance de gestes particuliers qui véhiculent des idées (caméra ZCam)

Reconnaissance de gestes particuliers qui véhiculent des idées et traduction des gestes en espagnol (OpenCV)

Reconnaissance de gestes particuliers qui véhiculent des idées (Kinect)

Outils
Les technologies de reconnaissance des gestes que nous allons explorer pour ce projet seront :

Le Leap motion est un appareil permettant de piloter un ordinateur avec les mains. Il n'y a donc aucun contact physique et la communication avec l'ordinateur est basée sur les gestes. Le Leap motion se place sous les mains, près du clavier.
 * Le Leap Motion

Le grand avantage par rapport à la Kinect est sa taille. En effet, l'appareil ne mesure que 8 x 2,9 x 1,1 cm et a un taux de rafraichissement de 200 Hz contre 30 Hz pour la Kinect. Le Leap motion possède deux webcams de 1,3 mégapixel qui filment vers le haut en stéréoscopie et 3 led infrarouges. Il est capable de détecter la position des dix doigts de la main.

Le site officiel contient une section pour les développeurs. Il est possible de télécharger la SDK 1.0 (de 47 Mo environ) qui contient des API pour les langages C++, C#, Java, Python, Objective C et JavaScript. La SDK contient également des exemples pour apprendre à utiliser les librairies et fonctions.

La caméra Creative est également une caméra qui permettra de contrôler l'ordinateur à distance. Elle se place devant la personne qui veut s'en servir.
 * La camera Creative de Intel® Perceptual Computing SDK

Cette caméra propose une reconnaissance de profondeur, ce qui permet de faire la différence entre les différents plans. Cette caméra propose environ 30 ips et peut filmer en 720p. De plus elle peut faire de la 3D en reconnaissant les contours de visages.

Intel propose également un SDK pour les développeurs :. Avec des librairies qui nous aideront pour le tracking des mains et des doigts ainsi que pour la reconnaissance faciale.

= Avancement du projet =

Le projet nous a été attribué le 21 Janvier 2014. Nous décrivons dans cette partie la progression au fil des semaines.

Semaine 1 (27 Janvier - 02 Février)

 * Découverte de la caméra Intel Creative
 * Découverte du SDK fourni par Intel
 * Choix du langage de programmation utlisé (C++)
 * Premier programme de reconnaissance des doigts
 * Premier problème : la SDK fournie par Intel n'est pas complète. Elle fournie des méthodes pour détecter le bout des doigts, le centre de la main ainsi que le poignet. En revanche, la SDK est incapable de faire la différence entre chacun des doigts
 * Détection d'un premier bug dans la caméra : pour chaque Z-image calculée par le capteur de profondeur, un même doigt est détecté plusieurs fois

Semaine 2 (03 Février - 09 Février)

 * Implémentation d'une "surcouche" de la SDK permettant de détecter efficacement chacun des doigts que l'utilisateur montre à la caméra
 * Correction du bug d'un même doigt détecté plusieurs fois
 * Prise de contact avec le forum développeur de Intel
 * Possible problème hardware sur la caméra (quelques tests à faire) ce qui nous donne une "turbulence" notable sur les Z-images calculées par le capteur de profondeur
 * Ajout d'une fonction de calibrage de la main (implémentation non terminée)
 * Définition des "symboles" qui composent les "gestes" dans le langage des signes
 * Choix de la structure de donnée pour stocker les symboles et de celle pour stocker les gestes. Lorsque l'utilisateur dessine un symbole à l'aide de ses mains, le programme recherche dans la table de symboles si ce symbole existe. La recherche dans la structure de données doit donc se faire de manière efficace (rapide) afin de garder l'aspect temps réel du programme. La table de symboles peut en effet contenir une centaine de symboles.

Semaine 3 (10 Février - 16 Février)

 * Implémentation des structures de données et d'un algorithme de recherche dichotomique (complexité en O(log n)).
 * Implémentation d'autres algorithmes de recherche. Nous comparerons ensuite l'efficacité du programme (temps de recherche) pour chacun des algorithmes pour savoir lequel est le plus adapté à notre application.
 * Recherche d'un dictionnaire de mots pour le langage des signes
 * Début de l'implémentation d'un programme du type "Skype" permettant une communication video en temps réel entre deux utilisateurs à travers le réseau. Ce programme permettra de communiquer entre un utilisateur muet et un usager non muet distants. La traduction textuelle des gestes de la personne muette sera donc envoyée sur le réseau et affichée du côté de l'utilisateur non muet.
 * Esquisse de l'interface de ce programme

Semaine 4 (17 Février - 23 Février)

 * Reconnaissance d'un premier geste et affichage de sa traduction textuelle "Africa"
 * Problème : Depuis 2013, Microsoft n'autorise plus les développeurs à créer des plugins pour skype. Nous souhaitions intégrer notre fonctionnalité Sign2Speech dans Skype. Leur API n'étant plus maintenue, nous nous orientons donc vers le développement d'une logiciel "stand-alone".
 * Exploration de la technologie OpenCV pour remplacer la caméra créative qui possède des problèmes de turbulences