Sign2speech ricm4 2015 2016

Objectifs
Le projet a pour but de retranscrire en temps réel (de façon textuelle la langue des signes française afin de faciliter la communication entre une personne muette et une personne qui ne maîtrise pas ce langage. La communication se ferait avec du WebRTC. L'idée est également de permettre à l'utilisateur de sauvegarder les mots qu'il souhaite pour agrandir le dictionnaire.

Equipe

 * Tuteur : Didier Donsez


 * Membres : Edwin NIOGRET, Matthieu NOGUERON, Reatha TITH


 * Département : RICM 4, Polytech Grenoble

LeapMotion



 * Nous disposons d'un capteur type Leap Motion permettant la reconnaissance des doigts d'une main, mais aussi de gestes simples. Le Leap Motion est fourni avec un SDK propriétaire compatible avec tous les systèmes d'exploitation.

Caméras Intel



 * Nous disposons de la caméra Creative Senz3D qui permet la reconnaissance de gestes et la détection de la profondeur. Elle est fournie avec un SDK RealSense, compatible uniquement avec Windows.


 * Nous disposons également de la caméra Intel RealSense. Elle possède les mêmes fonctionnalités de base que la précédente, auxquelles ont été rajoutées quelques fonctionnalités très utiles telle que la détection et la reconnaissance précise des différents doigts. Elle est fournie avec le SDK RealSense, compatible uniquement avec Windows encore une fois.

Langages de programmation
Le SDK RealSense fourni avec les caméras Intel permet l’utilisation de nombreux langages. Nous avons donc décidé d’utiliser le C++ ou le C# car ces deux langages sont très populaires et ce projet serait donc une bonne façons pour nous d’en découvrir un d’entre eux.

= Avancement du projet =

Le projet nous a été attribué le 11 janvier 2016, cependant nous avons pu le commencer qu’à partir de la semaine du 18. Nous décrirons donc dans cette partie la progression de notre projet pour chaque semaine.

Semaine 1 (18 Janvier - 24 Janvier)

 * Nous considérons pour l'instant que nous allons reprendre le sujet à zéro, n'ayant pas pu obtenir le code du projet des années précédentes.


 * Familiarisation avec la technologie de la caméra Creative Senz3D, dans l'attente de la réception d'une caméra nouvelle génération Intel RealSense.


 * Réflexion sur nos objectifs de projet, et sur les technologies à utiliser (SDK, langage...). Le choix du langage supporté par le SDK RealSense a été porté sur le C# ou C++.

Semaine 2 (25 Janvier - 31 Janvier)

 * Installation des SDK LeapMotion et Intel RealSense, comparaison de leurs fonctionnalités


 * Réflexion sur la reconnaissance des gestes en utilisant un automate


 * Réalisation de diagrammes UML (cas d'utilisations, séquence et composants)


 * Nous apprenons également que nous allons repartir du code du projet précédent, et non de zéro comme nous le pensions.

Semaine 3 (01 Février - 07 Février)

 * Compréhension du code précédemment fait
 * Décision de repasser sur un code nouveau face aux incompatibilités avec le nouvel SDK
 * Mise en place d'un Scrum Board sur Trello

Semaine 4 (08 Février - 14 Février)

 * Ecriture des patrons de conception - S2S par HABLOT Jules et BRANGER Matthias (nous avons fait le leur en retour)
 * Début de l'implémentation du dictionnaire et du serveur de négociation WebRTC (signalling server - utilisation de Wisdom Framework)
 * Implémentation d'un chat sous WebRTC avec affichage de "sous-titres"
 * Implémentation d'un parser JSON pour remplir le dictionnaire (lecture seulement)

Semaine 5 (15 Février - 21 Février)



 * Chat en WebRTC avec sous-titre fonctionnel
 * Implémentation finale du parser avec l'écriture d'un dictionnaire dans un fichier JSON
 * Reconnaissance basique de gestes (poing, victoire, signe des cornes)

Semaine 6 (22 Février - 28 Février)

 * Implémentation d'un système de reconnaissance plus générique
 * Réflexion sur les moyens permettant de diminuer les erreurs de la caméra
 * Recherche d'une librairie C++ permettant la mise en œuvre de Websocket pour la communication avec le serveur

Semaine 7 (29 Février - 06 Mars)

 * Interface utilisateur
 * Communication entre le dictionnaire, le parser et la reconnaissance pour reconnaître les mots du dictionnaire
 * Implémentation de la communication par WebSockets en C++
 * Reconnaissance des jours de la semaine (sauf dimanche)

Problèmes/difficultés :
 * Utilisation des WebSockets en C++ : multitude de librairies, exemples très peu expliqués
 * Impossibilité de lancer le programme sous Chrome à cause de la nécessité de lancer la page en HTTPS ce qui implique la demande d'un certificat SSL

Semaine 8 (07 Mars - 13 Mars)

 * Soutenance intermédiaire

Semaine 9 (14 Mars - 20 Mars)

 * Ajout de bits supplémentaires dans l'encodage pour intégrer les trajectoires. Un symbole est maintenant composé de 18 bits au lieu de 10.
 * Implémentation des trajectoires : rectiligne (vertical, horizontal, diagonal) et elliptique
 * Mise en place du calcul d'erreur pour trouver dans le dictionnaire le signe qui ressemble le plus à celui reconnu par la caméra, pour faire face au manque de précision de cette dernière
 * Implémentation de la fonctionnalité "tchat écrit"
 * Déploiement du serveur web sur une VM Amazon

Problèmes et difficultés :
 * Définir des marges d'erreur correctes pour qu'une trajectoire soit acceptée ou non (la trajectoire verticale est souvent reconnue comme étant une ellipse partielle si le mouvement n'est pas exactement rectiligne)
 * Les demi ellipses sont reconnues, mais nous avons beaucoup plus de mal avec les ellipses complètes
 * Calibrage du taux d'erreur (définition du poids pour les différents types d'erreurs en fonction de leur importance et du seuil d'erreur à partir duquel on considère qu'il est correct d'accepter un geste)

Semaine 10 (21 Mars - 27 Mars)

 * Mise en place d'une fonction de scoring pour évaluer les erreurs et les traiter en fonction de leur "gravité". Par exemple, si la caméra capture un geste où le pouce est complètement ouvert et tous les autres doigts sont fermés, alors que dans le dictionnaire il existe un mot pour lequel tous les doigts sont fermés, cette erreur sera considérée comme majeure (encodage 11 au lieu de 00 pour le pouce) et nous supposons qu'il s'agit d'une erreur de l'utilisateur et non de la caméra. Cela nécessite la définition des seuils d'acceptation du mot.

Semaine 11 (28 Mars - 03 Avril)

 * Réflexion et implémentation du "mode apprentissage"
 * Amélioration de la gestion des erreurs lors de la récupération de nouvelles frames

Difficultés rencontrées :


 * La caméra est trop imprécise lors des captures. En apprentissage, nous n'avons pas de modèle de référence permettant de connaître à l'avance le "geste parfait" qui aurait dû être reconnu. La correction d'erreur est donc beaucoup plus délicate qu'en "mode reconnaissance".

Semaine 12 (04 Avril - 10 Avril)

 * Derniers tests
 * Mise au propre du code
 * Rédaction du rapport
 * Création des flyers
 * Préparation de la soutenance finale (Powerpoint + démonstration)