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.

Software Requirements Specification

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)
Avantages : L'avantage certain de cette technologie est que l'on peut utiliser n'importe quel caméra pour la détection des mains. Il est notamment possible d'utiliser la caméra incorporée dans tous les ordinateurs portables. L'utilisateur n'a ainsi pas besoin d'acheter une caméra créative Intel pour utilier notre programme.
 * 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 :

Inconvénients : Un premier problème observé avec OpenCV est la vitesse de traitement des images. La reconnaissance de formes comme le contour de la main est plus lente qu'en utilisant la technologie de Intel (capteur de profondeur). Un deuxième problème plus contraignant est la position de la main. Pour qu'une main puisse être reconnue, elle ne doit pas se trouver devant le visage de l'utilisateur. En effet, les mains et le visage possédant une même couleur (couleur de la peau), les contours sont nettement moins bien détectés. Pour une bonne détection, la main doit se trouver à côté du visage, devant un fond d'une autre couleur. Les contraintes exposées ici sont bien trop importantes pour un utilisateur qui ne cherche qu'à réaliser de simples gestes. Nous continuons donc avec la technologie de Intel.

Semaine 5 (24 Février - 02 Mars)

 * Incorporation des mouvements dans notre algorithme de détection de gestes : à l'aide d'équations mathématiques, il nous est maintenant possible de détecter les mouvements rectilignes, elliptiques ou au contraire affirmer que le geste de l'utilisateur est resté statique.
 * Reconnaissance du symbole "poing fermé", que l'on retrouve dans beaucoup de signes.
 * Discussion autour de la manière de contenir le dictionnaire dans le disque dur de l'utilisateur. Nous avons opté pour un fichier XML.
 * Implémentation d'un mécanisme de chiffrement pour que l'utilisateur ne puisse pas voir en clair le contenu du dictionnaire sur son disque dur : le fichier XML est en effet le reflet du fonctionnement de notre application.

Semaine 6 (03 Mars - 09 Mars)

 * Implémentation de l'interface utilisateur de notre logiciel de type "Skype" (aperçu à droite)
 * Mécanisme de chiffrement fonctionnel
 * Création d'un programme d'échange de flux vidéo via différents protocoles
 * Ecriture du rapport dans lequel nous avons mis tous les détails techniques de notre programme
 * Incorportation du mot "I LOVE YOU" dans le dictionnaire
 * Problème de couplage entre l'interface et le programme "moteur" que nous avons réalisé les précédentes semaines. Nous n'arrivons pour l'instant pas à faire communiquer le thread "interface" avec le thread "moteur"

Semaine 7 (10 Mars - 16 Mars)

 * Soutenance intérmédiaire du projet
 * Couplage Interface/Moteur de détection du programme

Semaine 8 (17 Mars - 23 Mars)

 * Rajout du mot "AIRPLANE" dans le dictionnaire
 * Rajout du mot "ALL" dans le dictionnaire
 * Création du dictionnaire en XML
 * Intégration d'un parser XML dans le programme et reconstitution de l'arbre des gestes à partir du dictionnaire XML

Semaine 9 (24 Mars - 30 Avril)

 * Rajout de la fonctionnalité de synthèse vocale
 * Rajout des mots "UP","ACCIDENT" et "OBSTINATE"
 * Correction de bugs lors d'insertions de noeuds dans l'arbre
 * Correction de bugs lors de l'apprentissage automatique

Semaine 10 (31 Mars - 06 Avril)

 * Préparation de la soutenance
 * Création des flyers
 * Finalisation du manuel développeur