{"id":7288,"date":"2022-07-04T22:32:21","date_gmt":"2022-07-04T21:32:21","guid":{"rendered":"https:\/\/telefab.fr\/?p=7288"},"modified":"2026-09-07T16:53:16","modified_gmt":"2026-09-07T14:53:16","slug":"la-reconnaissance-faciale","status":"publish","type":"projet","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/projet\/la-reconnaissance-faciale\/","title":{"rendered":"La reconnaissance faciale"},"content":{"rendered":"<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Contexte<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">La reconnaissance faciale a pris une place importante au sein de notre soci\u00e9t\u00e9 notamment dans le domaine de la surveillance mais la compr\u00e9hension de son fonctionnement reste n\u00e9anmoins complexe et n\u2019est pas accessible \u00e0 tous. Le but de ce projet \u00e9tait donc d\u2019appr\u00e9hender une technique de reconnaissance faciale afin de la rendre accessible et compr\u00e9hensible par des \u00e9l\u00e8ves de premi\u00e8re ann\u00e9e d\u2019\u00e9cole d\u2019ing\u00e9nieur \u00e0 IMT Atlantique.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L\u2019\u00e9cole IMT Atlantique veut impl\u00e9menter, dans le programme de la premi\u00e8re ann\u00e9e (1A), une nouvelle UE consacr\u00e9e \u00e0 l\u2019Internet des Objets et au machine learning. Pour cela, l\u2019\u00e9cole dispose d\u2019un kit de d\u00e9veloppement et une cam\u00e9ra IA (Intelligence Artificielle). Le mat\u00e9riel \u00e0 disposition comprend plus pr\u00e9cis\u00e9ment : une cam\u00e9ra IA M5Stack, une deuxi\u00e8me cam\u00e9ra ESP-EYE DevKit et un kit de d\u00e9veloppement M5Stack.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L\u2019objectif du projet est donc de d\u00e9velopper un syst\u00e8me de reconnaissance faciale d\u00e9tectant la pr\u00e9sence d\u2019un masque sur l\u2019utilisateur, tout cela gr\u00e2ce au machine learning. Le projet avait comme contrainte une liste de mat\u00e9riel fournie par le Client. La documentation de l\u2019avancement du projet, de nos difficult\u00e9s et de la prise en main du mat\u00e9riel doit permettre \u00e0 l\u2019\u00e9cole d\u2019ajuster son UE.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L\u2019\u00e9quipe sur le projet est compos\u00e9e de 4 \u00e9tudiants de FISE A1 : <\/span><span style=\"font-weight: 400;\">Ella FERNANDEZ, Eliott GODEFROY, Ralph AYOUB et Tha\u00efs ARCHAUD. <\/span><span style=\"font-weight: 400;\">Celle-ci a \u00e9t\u00e9 guid\u00e9e et encadr\u00e9e par Sylvie Kerouedan.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Mat\u00e9riel<\/span><\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400;\">\n<h5><span style=\"font-weight: 400;\">M5stack<\/span><\/h5>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Le kit de d\u00e9veloppement M5Stack est bas\u00e9 sur un afficheur couleur 2&Prime; IPS associ\u00e9 \u00e0 un ESP32 avec interface Bluetooth et WiFi.\u00a0 Il comporte une m\u00e9moire FLASH de 16 MB accessible en SPI, un mini haut-parleur, 3 boutons-poussoirs.\u200b Il inclut \u00e9galement une batterie LiPo rechargeable via le port USB Type C (cordon inclus). L&rsquo;arri\u00e8re du bo\u00eetier comporte 4 aimants permettant le placement du module M5 sur n&rsquo;importe quelle surface m\u00e9tallique.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\">\n<h5><span style=\"font-weight: 400;\">UnitV<\/span><\/h5>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">La cam\u00e9ra IA UnitV K210 de M5Stack est aliment\u00e9e par Kendryte K210, un syst\u00e8me sur puce (SoC) edge computing avec processeur RISC-V 64 bits double c\u0153ur et processeur de r\u00e9seau neuronal avanc\u00e9. La cam\u00e9ra IA UnitV prend en charge diverses capacit\u00e9s d&rsquo;identification par vision (par exemple, acquisition en temps r\u00e9el de la taille, du type et des coordonn\u00e9es de la cible d\u00e9tect\u00e9e).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Elle prend en charge MicroPython, ce qui rend le code des utilisateurs plus concis lors de l&rsquo;utilisation du UnitV pour la programmation.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\">\n<h5><span style=\"font-weight: 400;\">ESP-EYE DevKit<\/span><\/h5>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">La cam\u00e9ra ESP-EYE DevKit est un module IoT ESP32-CAM d&rsquo;AI Thinker bas\u00e9 sur un ESP32 proposant une interface WiFi associ\u00e9e \u00e0 une cam\u00e9ra miniature. L&rsquo;ESP32 permet d&rsquo;acc\u00e9der au flux vid\u00e9o de la cam\u00e9ra via un r\u00e9seau WiFi local ou internet et est programmable gr\u00e2ce \u00e0 l&rsquo;IDE Arduino. Un convertisseur USB-s\u00e9rie est n\u00e9cessaire pour la programmation. Le module est accompagn\u00e9 par des connecteurs m\u00e2les soud\u00e9s permettant d&rsquo;enficher la carte dans une plaque de montage rapide.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">R\u00e9alisation<\/span><\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400;\">\n<h5><span style=\"font-weight: 400;\">Code<\/span><\/h5>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Pour construire notre algorithme, nous devons nous baser sur un mod\u00e8le. Ce mod\u00e8le sera bas\u00e9 sur un \u201cConvolutional Neural Network\u201d. Un CNN est un r\u00e9seau de neurones : un algorithme utilis\u00e9 pour reconna\u00eetre des mod\u00e8les dans les donn\u00e9es. Les r\u00e9seaux de neurones, en g\u00e9n\u00e9ral, sont compos\u00e9s d&rsquo;un ensemble de neurones organis\u00e9s en calques, chacun ayant ses propres poids et biais apprenables. Cet objet se rapproche de l\u2019unit\u00e9 d\u2019enseignement Pyrat vu en premi\u00e8re ann\u00e9e, qui utilisait des poids dans ses graphs.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nous avions besoin d\u2019un dataset afin d&rsquo;adapter les donn\u00e9es dans un mod\u00e8le de r\u00e9seau de neurones.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dans le dataset, nous avons utilis\u00e9 200 \u00e9l\u00e9ments dans test, et \u00e0 peu pr\u00e8s 1200 \u00e9l\u00e9ments pour entra\u00eener le syst\u00e8me. Pour avoir encore plus d\u2019images \u00e0 traiter, nous utilisons une m\u00e9thode qui va effectuer un nombre de transformations sur les images existantes pour augmenter la taille du dataset.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour tester le mod\u00e8le, il suffit d\u2019avoir la cam\u00e9ra d\u2019un ordinateur.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nous lisons la vid\u00e9o en temps r\u00e9el. On effectue plusieurs op\u00e9rations sur l\u2019image en en temps r\u00e9el pour pouvoir l\u2019analyser. Tout d\u2019abord, nous d\u00e9tectons les visages pr\u00e9sents sur la vid\u00e9o, puis pour chaque visage pr\u00e9sent, nous testons le mod\u00e8le entra\u00een\u00e9. Par souci esth\u00e9tique, nous cr\u00e9ons un rectangle qui s\u2019affiche autour du visage, rouge si la personne n\u2019a pas de masque, vert sinon. On affiche aussi l\u2019intervalle de confiance si un masque est reconnu.\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\">\n<h5><span style=\"font-weight: 400;\">Validation<\/span><\/h5>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">En reprenant les fonctionnalit\u00e9s et contraintes \u00e0 satisfaire pr\u00e9sent\u00e9es dans le cahier des charges, nous remplissons pour le moment partiellement la demande. En effet, la partie technique visant \u00e0 cr\u00e9er un algorithme de d\u00e9tection du masque est r\u00e9alis\u00e9e, nous savons \u00e9galement comment am\u00e9liorer cet algorithme. Cependant, nous sommes encore en cours de r\u00e9alisation pour la partie contrainte mat\u00e9rielle. Nous pourrons aussi faire part au client de la possibilit\u00e9 de travailler sur le projet sans le mat\u00e9riel.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Protocole d\u2019utilisation<\/span><\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400;\">\n<h5><span style=\"font-weight: 400;\">Installation des librairies<\/span><\/h5>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">La majorit\u00e9 des\u00a0 librairies peuvent \u00eatre install\u00e9es en utilisant la commande pip install [nom de la librairie] sauf pour tensorflow.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour installer tensorflow sur jupyter il faut :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">aller dans le navigateur Anaconda (apr\u00e8s avoir install\u00e9 anaconda sur son ordinateur)<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">aller dans les environnements<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">mettre \u00e0 jour les indexes<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">chercher tensorflow dans la barre de recherche<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">cliquer sur tensorflow et keras puis sur appliquer (cela peut prendre du temps)<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">En allant ensuite sur Jupyter Notebook, l\u2019import de tensorflow et des modules associ\u00e9s n\u2019affiche plus d\u2019erreur et l\u2019utilisation est alors possible.<\/span><\/p>\n<ul>\n<li>\n<h5>UnitV<\/h5>\n<\/li>\n<\/ul>\n<p>Pour l&rsquo;UnitV, il est utilisable seulement sur windows.\u00a0<span style=\"font-weight: 400;\">Tout d\u2019abord, il faut connecter la cam\u00e9ra \u00e0 l\u2019un des COM USB. Ensuite, on doit lancer l\u2019IDE et connecter l\u2019UnitV. Ne pas oublier de burn la cam\u00e9ra \u00e0 chaque utilisation avec Easy Loader, disponible sur les docs de m5. Ensuite, on t\u00e9l\u00e9verse le mod\u00e8le, construit pr\u00e9c\u00e9demment dans la section 5.2.1.1, gr\u00e2ce \u00e0 kflash_gui. Il faut bien s\u00e9lectionner le Board M5StickV dans le Board Setting. De m\u00eame, il faut v\u00e9rifier que le baudrate est bien r\u00e9gl\u00e9 (en g\u00e9n\u00e9ral la valeur par d\u00e9faut est la bonne).\u00a0 Le port COM peut \u00e9ventuellement changer suivant le branchement op\u00e9r\u00e9. Le fichier du mod\u00e8le doit \u00eatre au format .kfpkg.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ensuite, on impl\u00e9mente le code destin\u00e9 \u00e0 mettre en place le mod\u00e8le de traitement d\u2019image. Les librairies python utilis\u00e9es sont les suivantes :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">yolo : m\u00e9thode de d\u00e9tection d\u2019objet,<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">sensor, image et KPU : fonctions interne \u00e0 UnitV, dont KPU qui fait r\u00e9f\u00e9rence au <\/span><span style=\"font-weight: 400;\">neural network hardware accelerator KPU.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">D\u00e8s lors, la cam\u00e9ra va afficher l\u2019image et encadrer les visages en indiquant la pr\u00e9sence d\u2019un masque ou non. <\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\">\n<h5><span style=\"font-weight: 400;\">Utilisation de l\u2019ESP-EYE<\/span><\/h5>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">La carte est d\u00e9j\u00e0 \u00e9quip\u00e9e d\u2019un logiciel de reconnaissance faciale int\u00e9gr\u00e9e. Ainsi, pour prendre en main l\u2019outil, on peut commencer par utiliser ce logiciel. Il est utilisable sur n\u2019importe quel syst\u00e8me d\u2019exploitation.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tout d\u2019abord, il faut t\u00e9l\u00e9charger le logiciel\u00a0 Arduino, si on ne l\u2019a pas d\u00e9j\u00e0. Ensuite, il faut r\u00e9gler l\u2019onglet Outils comme sur la figure 1. Pour obtenir la carte \u201cWEMOS LOLIN 32\u201d, il suffit d\u2019aller dans l\u2019onglet \u201cBoards manager\u2026\u201d puis de t\u00e9l\u00e9charger le kit li\u00e9 \u00e0 l\u2019ESP-32.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ensuite, il faut ouvrir un terminal dans Arduino, tout en connectant la carte au bon port USB. Pour v\u00e9rifier quel port USB est utilis\u00e9 par la carte, on peut utiliser des commandes dans le terminal de l\u2019ordinateur pour le mac, de m\u00eame pour les autres syst\u00e8mes d&rsquo;exploitation.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Normalement, en cliquant sur le bouton BOOT pr\u00e9sent sur la carte, le terminal affiche ce message:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">[0;32mI (10527) esp-eye: Please say &lsquo;Hi LeXin&rsquo; to the board[0m<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">[0;32mI (10527) esp-eye: Version 1.0.0[0m<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">Ainsi, il faut dire \u201chi lexin\u201d (en pronon\u00e7ant le x\u00a0 comme en chinois, donc \u201cch\u201d) pour que la carte se lance. Le LED va donc normalement commencer \u00e0 clignoter en rouge et le terminal va afficher:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0hilexin DETECTED.<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">La carte va lancer son propre stream wifi, ainsi il faut s\u2019y connecter dans ses param\u00e8tres wifi. Pour y avoir acc\u00e8s, il faut se connecter \u00e0 ce lien:\u00a0<\/span><\/p>\n<p><b>http:\/192.168.4.1\/face_stream<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Pour enregistrer un visage, on peut s\u2019appuyer sur la notice d\u2019utilisation dans la bo\u00eete. Il faut appuyer sur un bouton sur le cot\u00e9 gauche de la carte.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Quand un visage a \u00e9t\u00e9 enregistr\u00e9, son num\u00e9ro s\u2019affiche en plus d\u2019un \u201cHello ID\u201d. Si un visage n\u2019est pas reconnu, un \u201cWHO ?\u201d s\u2019affiche en rouge.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Perspectives et pistes d\u2019am\u00e9lioration<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Le programme n\u2019est pas tr\u00e8s fonctionnel lorsque la personne n\u2019est pas bien \u00e9clair\u00e9e, ou si la personne n\u2019a pas la peau claire. Ainsi, ce probl\u00e8me peut facilement \u00eatre r\u00e9solu en ajoutant plus de personnes diff\u00e9rentes dans le dataset lors de l&rsquo;entra\u00eenement du mod\u00e8le. De plus, le mod\u00e8le n\u2019ayant \u00e9t\u00e9 entra\u00een\u00e9 qu\u2019avec des images de masque bleu, il ne marche ainsi qu\u2019avec ceux-ci. On peut aussi r\u00e9soudre ce probl\u00e8me en travaillant en profondeur sur le dataset.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">De plus, nous n\u2019avons que deux classes: avec et sans masque. Cependant, un masque peut \u00eatre mis d\u2019une mauvaise fa\u00e7on: avec le nez ou le menton qui d\u00e9passe par exemple. Ceci peut-\u00eatre facilement r\u00e9gl\u00e9 en cr\u00e9ant de nouvelles classes et en t\u00e9l\u00e9chargeant de nouvelles photos.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Avec cette premi\u00e8re mise en place du logiciel, la modification du code est ensuite tr\u00e8s facile et peut facilement \u00eatre adapt\u00e9e \u00e0 d\u2019autres projets (reconnaissance des humeurs par exemple).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le projet pourra donc servir \u00e0 cr\u00e9er une UE de premiers pas dans le machine learning. A l\u2019aide des documents techniques que nous avons et allons r\u00e9aliser dans le cadre du projet, les \u00e9tudiants pourront apprendre les diff\u00e9rents moyens de faire des algorithmes de reconnaissance faciale et les adapter \u00e0 un probl\u00e8me donn\u00e9 (et non pas seulement la d\u00e9tection du masque).<\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"categories":[15,20],"type_projet":[],"class_list":["post-7288","projet","type-projet","status-publish","hentry","category-formation","category-projets"],"acf":{"objectifs":"","categorie":"formation","fichiers_associes":""},"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/7288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/projet"}],"author":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":4,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/7288\/revisions"}],"predecessor-version":[{"id":10974,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/7288\/revisions\/10974"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=7288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/categories?post=7288"},{"taxonomy":"type_projet","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/type_projet?post=7288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}