Wall-E-Motion

De fablab
Aller à : navigation, rechercher
Wall-E-Motion
Wal.png
Vos émotions comptent !!

Présentation du Projet

Membres de l'équipe

  • Issam GHANOUCH
  • Abir BORJA
  • Omar SAMORAH
  • Amine CHADLI

Problématique

Notre projet consiste à réaliser un système intelligent qui réagira en conséquence des émotions de l'utilisateur.

A partir d'une photo qui sera prise de l'utilisateur, un ensemble de traitements seront effectués afin de déterminer l'émotion la plus prépondérante des résultats obtenus.

En fonction de cette émotion, un feedback sous forme d'animations, de couleurs et diverses formes sera projeté sur les leds Neopixels composants la salle. Un plafond, des bandes situées de part et d'autre de ladite salle, ainsi qu'une constellation de leds orneront les murs de façon à créer une atmosphère à l'image des émotions de l'utilisateur.

L’intégralité de ces retours seront paramétrables, de façon à rendre le projet plus modulable.

Contraintes du Projet

La contrainte principale du projet est le fait qu'il doit être relié à un ensemble de panneaux LED pour en faire un "Smart Wall" (en encore un "Smart Ceiling"). La caméra que l'on utilise dans notre projet sera donc positionné sur ce même mur et sera partie intégrante de l'ensemble. Le Raspberry, quant à lui, ainsi que les autres composantes matérielles telle que les fils, la breadboard etc seront camouflées.

Le système doit s'intégrer dans le Bâtiment Intelligent avec l'ensemble des autres projets. C'est pour cette raison qu'on est amenés à utiliser la technologie OpenHAB, dont l'objectif est d'assurer cette même intégration.

On notera également que notre système exige une connexion internet pour pouvoir effectuer le traitement des émotions. Le Raspberry doit donc être constamment relié à une source internet, il est ainsi primordiale de disposer d'un routeur auquel il sera relié soit par Ethernet ou bien en wireless.

Une autre contrainte est le fait de déterminer le point déclencheur de notre programme, à savoir la détection d'un visage, pour cela un module de détection de visages est ajouté.

Une dernière contrainte concerne l'expérience utilisateur. En effet, un feedback sera intégré à l'ensemble du projet afin de rendre compte à l'utilisateur de la réussite ou de l'échec de l'expérience.

Technologies et matériel

Matériel

Le matériel nécessaire pour la réalisation du projet est le suivant :

  • Raspberry Pi 3
  • Leds de modèle Neopixel
  • Caméra HD
  • BreadBoard + Fils males-femelles

Technologies

Bibliothèques et api utilisées :

  • Microsoft Emotion API pour la détection d'émotions à partir d'une image.
  • Opencv pour la gestion de la caméra et la détection de visages.
  • OpenHAB pour l'intégration du projet dans un bâtiment intelligent.
  • python-openhab Api rest OpenHAB pour la communication entre OpenHAB et les différents scripts python.
  • SQLite pour la persistance des différentes configuration et animations concernant l'affichage sur les LEDs.
  • rpi_ws281x api utilisée pour adresser les LEDs .

Architecture & Cas d'utilisation

Cas d'utilisation et Scénario d'éxecution

Diagramme de cas d'utilisation
Diagramme de cas d'utilisation

L'utilisateur est un visiteur du Bâtiment Intelligent. Il se positionnera devant la caméra qui procédera à une capture automatique dès qu'elle détectera son visage.

Une photo sera dès lors envoyé au système traitant, à savoir notre module d'émotion.

Une fois le traitement fait, une image, une couleur ou une animation sera projetée en fonction du paramètre de retour de l'application.

Le principe est que si l'utilisateur est triste par exemple, on essaiera de lui remonterle moral avec une animation avec des couleurs adéquates spécifiquement à cette émotion. ces retours visuels seront affiché sur l’écran LED.

L'administrateur est le deuxième acteur. Il fera en sorte d'intervenir lors de la configurationdes émotions et de leurs feedbacks. Il sera également en mesure d'ajouter d'autres animations à la guise de l'utilisateur.

Le but étant de "décorer" la pièce et instaurer ainsi une ambiance en fonction de l'émotion de l'utilisateur. Un invité heureux par exemple, verra son mur décoré de couleurs joviales ou d'un arc-en-ciel se mouvra sur les murs.

En voici un schéma décrivant le scénario d'éxecution du système :

Scenario wally 1.gif

Architecture du Projet

Architecture logicielle du projet
Architecture logicielle du projet

Le séquencement du projet se décrit comme suit :

  • Tout commence par OpenHAB qui se chargera de démarrer le script correspondant à la détection des émotions dès qu’un visage est détecté par le module.Une fois lancé, le script s’occupe alors de charger l’émotion correspondante.Pour ce faire, le Raspberry disposant d’une connexion à internet va charger le module adéquat de Microsoft Azure et sélectionner la plus grande probabilité d’émotion.Ceci fait, l’Item Emotion est modifié.
  • Place ensuite au second module qui lui se charge de récupérer l’Item et d’en extraire la configuration correspondante pour ensuite la calquer sur les autres Items (Fréquence, Couleur etc).
  • En fin, l'heure est au dernier module qui se charge d’extrapoler l’ensemble sur la matrice LED et cela en récupérant les précédents items en paramètres ainsi que l’animation correspondante. Finalement l’amalgame de toutes ces étapes sera affiché sur les murs et le plafond.

Programmes principaux sous Python

  • Programme de détection de visage :

C'est le script face_detection.py qui est responsable de la détection de visage sur le flux de la caméra. Ce script utilise le fichier lbp_cascade.xml , cet xml définit exactement une disposition de la face avant du visage, en termes de points, c'est-à-dire: - il y a des points définis pour les lèvres , la joue droite, la joue gauche, etc. Nb : Classificateur en cascade est un exemple d'apprentissage collectif (ensemble learning) qui repose sur la concatination de plusieurs classificateurs.

  • Programme de détection d'émotion :

Ce sont les deux scripts emotion_api.py et emotion_process.py qui sont responsable de la détection d'émotion à partir de l'image, pour cela nous utilisons l'api de Microsoft Azure :
Microsoft Emotion API : Microsoft Emotion API est une API qui prends une expression faciale dans une image donnée en input pour retourner le taux de confiance en pourcentage pour chacune des émotions supportées, et pour chaque visage identifié dans l'image.Les émotions supportées par cette API sont la colère, la joie, la tristesse, la surprise, la neutralité, le dégoût, et le mépris. Limitations: L'API Microsoft Emotions n'est toutefois pas libre, et est régie par plusieurs limitations:

  • Le nombre de traitements est limité à 20 par minute.
  • L'API ne peux traiter que quatre visages à la fois dans une même image.
  • L'utilisation gratuite de l'API n'est possible qu'à travers une clef d'évaluation de 30 jours, qu'il faudra régénérer après expiration.

En pratique, rien de ceci n'est particulièrement grave puisqu'on ne s’intéresse qu'à un seul visage à la fois, et qu'on excédera rarement voire jamais les 20 transactions par minute. Seule la régénération de la clé pourrait déranger, nécessitant un maintien régulier.

  • Programme de détection de paramétrage personnalisé :

Ce programme interagit avec une base de données (Sqlite), dans l'objectif de récupérer l'ensemble des paramètres personnalisé suivant un tel sentiment, les étapes suivies sont :

  • Récupération l'intitulé de l'émotion:
    • Récupérer le sentiment visé qui est déjà détecté par le module 'Programme de détection d'émotion', cela se fait à travers un Client REST du serveur OpenHub.
  • Extraction de la configuration correspondante : Suite à ce sentiment, nous récupérons l'ensemble des paramètres convenable, qui sont :
    • Couleur, Fréquence, intensité, le couleur secondaire, La liste des couleurs, une animation
  • Édition des Items correspondants : Puisque notre architecture est basée sur le serveur OpenHub, nous changeons l'ensemble des Items correspondants à travers le même REST API Client.
  • Utilisation de Openhab :

Tout commence par OpenHAB qui se chargera de démarrer le script correspondant à la détection des émotions dès qu’un visage est détecté par le module. Une fois lancé, le script s’occupe alors de charger l’émotion correspondante. Pour ce faire, le Raspberry disposant d’une connexion à internet va charger le module adéquat de Microsoft Azure et sélectionner la plus grande probabilité d’émotion. Ceci fait, l’Item Emotion est modifié. Place ensuite au second module qui lui se charge de récupérer l’Item et d’en extraire la configuration correspondante pour ensuite la calquer sur les autres Items (Fréquence, Couleur etc). En fin, l'heure est au dernier module qui se charge d’extrapoler l’ensemble sur la matrice LED et cela en récupérant les précédents items en paramètres ainsi que l’animation correspondante. Finalement l’amalgame de toutes ces étapes sera affiché sur les murs et le plafond.

Mise en place et configuration du matériel

Notre projet s'appuie sur plusieurs technologies intéressantes :

Les différentes technologies Neopixel et leurs libraires, pour l'affichage Led:

Des leds faciles à manipuler, ils peuvent prendre la forme de led individuelles aussi bien que de bandes ou encore de matrices. Adressable par la bibliothèque fournie qu'il a fallut cependant mapper pour convenir à notre cas d'utilisation (Matrice) car uniquement disponible pour un "Led Strip".

Utilisation et configuration des Raspberry:

Dans le cadre de notre projet, nous avons employé un seul Raspberry en tant qu'opérateur central de notre projet: Il regroupera l'intégralité des programmes à utiliser, il sera également relié à toutes les sources d'input et d'output, entre autres, la caméra et les LED d'affichage.

Nous avons commencé par y installer et configurer la distribution Raspbian . Python étant integré à cette distribution, il nous a suffit d'y installer en premier lieu OpenCV pour pouvoir le connecter à notre caméra:

Prototypage

On décrit sur cette partie l'ensemble des étapes nécessaires à la mise en pratique du porjet.

Partie 1 : Détection de visage et récupération d'émotion

Nous avons commencer par détecter le visage sur une image prise par la caméra en suivant le tutoriel d'opencv.


Wally face detection.jpg

L'image récupérée est ensuite traitée pour détecter l'émotion prépondérante à l'aide de Microsoft Emotion API , et un fichier json contenant les pourcentages des différentes émotions est récupéré :

Json emotion 1.png

Partie 2 : Géneration du paramétrage personnalisé

Un mapping sert à récupérer l'émotion puis l'ensemble des configurations (couleur d'éclairage, animation, fréquence, luminosité...) de leds correspondants à cette émotion. Comme est déja mentionné , nous avons utilisé openhab tout au long du projet , ainsi en voici les résultats de cette partie sur l'interface d'openhab :

Oh wally.png

Partie 3 : Adressage des Leds

Aprés avoir récupéré l'ensemble des configurations, il est temps d'adresser nos leds selon ces configurations, pour cela différents cas de figures ont été élaboré :

  • Animation de type arc en ciel :

Wally rainbow 1.gif

  • Animation de type "Party" :

Wally party.gif

  • Animation avec texte :

Christmas.gif

  • Un simple éclairage uniforme, mais plutôt sur des "Strips LED" :

Wally strip.jpg


Gestion du Projet

Nous avons utilisé durant la réalisation de ce projet plusieurs outils de travail collaboratif pour bien mener celui ci. Nous citons entre autres :

  • Slack, une plate-forme de communication collaborative, pour communiquer entre membres de façon organisée et structurée sous divers canaux dédiés.
  • Trello, un outil de gestion de projet en ligne, pour effectuer un suivi des tâches réalisées sous forme de "cartes" ayant divers status (Réalisé, en cours de réalisation, non encore réalisé); de façon à avoir une meilleure visibilité et organisation.
  • Github, le fameux service d'hébergement et de gestion de développement de logiciels, pour gérer efficacement l'intégralité des codes que nous utilisons dans notre projet. Le lien de notre git figurera entre autres parmi les livrables.

Livrables du Projet

Le code source du projet est disponible sur GitHub : GitHub E-Wally