la reconnaissance faciale

Envoyé par le 4 Juil 2022

  1. Contexte

La reconnaissance faciale a pris une place importante au sein de notre société notamment dans le domaine de la surveillance mais la compréhension de son fonctionnement reste néanmoins complexe et n’est pas accessible à tous. Le but de ce projet était donc d’appréhender une technique de reconnaissance faciale afin de la rendre accessible et compréhensible par des élèves de première année d’école d’ingénieur à IMT Atlantique.

L’école IMT Atlantique veut implémenter, dans le programme de la première année (1A), une nouvelle UE consacrée à l’Internet des Objets et au machine learning. Pour cela, l’école dispose d’un kit de développement et une caméra IA (Intelligence Artificielle). Le matériel à disposition comprend plus précisément : une caméra IA M5Stack, une deuxième caméra ESP-EYE DevKit et un kit de développement M5Stack.

L’objectif du projet est donc de développer un système de reconnaissance faciale détectant la présence d’un masque sur l’utilisateur, tout cela grâce au machine learning. Le projet avait comme contrainte une liste de matériel fournie par le Client. La documentation de l’avancement du projet, de nos difficultés et de la prise en main du matériel doit permettre à l’école d’ajuster son UE.

L’équipe sur le projet est composée de 4 étudiants de FISE A1 : Ella FERNANDEZ, Eliott GODEFROY, Ralph AYOUB et Thaïs ARCHAUD. Celle-ci a été guidée et encadrée par Sylvie Kerouedan.

 

  1. Matériel
  • M5stack

Le kit de développement M5Stack est basé sur un afficheur couleur 2″ IPS associé à un ESP32 avec interface Bluetooth et WiFi.  Il comporte une mémoire FLASH de 16 MB accessible en SPI, un mini haut-parleur, 3 boutons-poussoirs.​ Il inclut également une batterie LiPo rechargeable via le port USB Type C (cordon inclus). L’arrière du boîtier comporte 4 aimants permettant le placement du module M5 sur n’importe quelle surface métallique.

  • UnitV

La caméra IA UnitV K210 de M5Stack est alimentée par Kendryte K210, un système sur puce (SoC) edge computing avec processeur RISC-V 64 bits double cœur et processeur de réseau neuronal avancé. La caméra IA UnitV prend en charge diverses capacités d’identification par vision (par exemple, acquisition en temps réel de la taille, du type et des coordonnées de la cible détectée).

Elle prend en charge MicroPython, ce qui rend le code des utilisateurs plus concis lors de l’utilisation du UnitV pour la programmation.

  • ESP-EYE DevKit

La caméra ESP-EYE DevKit est un module IoT ESP32-CAM d’AI Thinker basé sur un ESP32 proposant une interface WiFi associée à une caméra miniature. L’ESP32 permet d’accéder au flux vidéo de la caméra via un réseau WiFi local ou internet et est programmable grâce à l’IDE Arduino. Un convertisseur USB-série est nécessaire pour la programmation. Le module est accompagné par des connecteurs mâles soudés permettant d’enficher la carte dans une plaque de montage rapide.

 

  1. Réalisation
  • Code

Pour construire notre algorithme, nous devons nous baser sur un modèle. Ce modèle sera basé sur un “Convolutional Neural Network”. Un CNN est un réseau de neurones : un algorithme utilisé pour reconnaître des modèles dans les données. Les réseaux de neurones, en général, sont composés d’un ensemble de neurones organisés en calques, chacun ayant ses propres poids et biais apprenables. Cet objet se rapproche de l’unité d’enseignement Pyrat vu en première année, qui utilisait des poids dans ses graphs.

Nous avions besoin d’un dataset afin d’adapter les données dans un modèle de réseau de neurones.

Dans le dataset, nous avons utilisé 200 éléments dans test, et à peu près 1200 éléments pour entraîner le système. Pour avoir encore plus d’images à traiter, nous utilisons une méthode qui va effectuer un nombre de transformations sur les images existantes pour augmenter la taille du dataset. 

Pour tester le modèle, il suffit d’avoir la caméra d’un ordinateur.

Nous lisons la vidéo en temps réel. On effectue plusieurs opérations sur l’image en en temps réel pour pouvoir l’analyser. Tout d’abord, nous détectons les visages présents sur la vidéo, puis pour chaque visage présent, nous testons le modèle entraîné. Par souci esthétique, nous créons un rectangle qui s’affiche autour du visage, rouge si la personne n’a pas de masque, vert sinon. On affiche aussi l’intervalle de confiance si un masque est reconnu. 

  • Validation

En reprenant les fonctionnalités et contraintes à satisfaire présentées dans le cahier des charges, nous remplissons pour le moment partiellement la demande. En effet, la partie technique visant à créer un algorithme de détection du masque est réalisée, nous savons également comment améliorer cet algorithme. Cependant, nous sommes encore en cours de réalisation pour la partie contrainte matérielle. Nous pourrons aussi faire part au client de la possibilité de travailler sur le projet sans le matériel.

  1. Protocole d’utilisation
  • Installation des librairies

La majorité des  librairies peuvent être installées en utilisant la commande pip install [nom de la librairie] sauf pour tensorflow.

Pour installer tensorflow sur jupyter il faut :

  • aller dans le navigateur Anaconda (après avoir installé anaconda sur son ordinateur)
  • aller dans les environnements
  • mettre à jour les indexes
  • chercher tensorflow dans la barre de recherche
  • cliquer sur tensorflow et keras puis sur appliquer (cela peut prendre du temps)

En allant ensuite sur Jupyter Notebook, l’import de tensorflow et des modules associés n’affiche plus d’erreur et l’utilisation est alors possible.

  • UnitV

Pour l’UnitV, il est utilisable seulement sur windows. Tout d’abord, il faut connecter la caméra à l’un des COM USB. Ensuite, on doit lancer l’IDE et connecter l’UnitV. Ne pas oublier de burn la caméra à chaque utilisation avec Easy Loader, disponible sur les docs de m5. Ensuite, on téléverse le modèle, construit précédemment dans la section 5.2.1.1, grâce à kflash_gui. Il faut bien sélectionner le Board M5StickV dans le Board Setting. De même, il faut vérifier que le baudrate est bien réglé (en général la valeur par défaut est la bonne).  Le port COM peut éventuellement changer suivant le branchement opéré. Le fichier du modèle doit être au format .kfpkg.

Ensuite, on implémente le code destiné à mettre en place le modèle de traitement d’image. Les librairies python utilisées sont les suivantes :

  • yolo : méthode de détection d’objet,
  • sensor, image et KPU : fonctions interne à UnitV, dont KPU qui fait référence au neural network hardware accelerator KPU.

Dès lors, la caméra va afficher l’image et encadrer les visages en indiquant la présence d’un masque ou non.

  • Utilisation de l’ESP-EYE

La carte est déjà équipée d’un logiciel de reconnaissance faciale intégrée. Ainsi, pour prendre en main l’outil, on peut commencer par utiliser ce logiciel. Il est utilisable sur n’importe quel système d’exploitation.

Tout d’abord, il faut télécharger le logiciel  Arduino, si on ne l’a pas déjà. Ensuite, il faut régler l’onglet Outils comme sur la figure 1. Pour obtenir la carte “WEMOS LOLIN 32”, il suffit d’aller dans l’onglet “Boards manager…” puis de télécharger le kit lié à l’ESP-32.

Ensuite, il faut ouvrir un terminal dans Arduino, tout en connectant la carte au bon port USB. Pour vérifier quel port USB est utilisé par la carte, on peut utiliser des commandes dans le terminal de l’ordinateur pour le mac, de même pour les autres systèmes d’exploitation.

Normalement, en cliquant sur le bouton BOOT présent sur la carte, le terminal affiche ce message:

[0;32mI (10527) esp-eye: Please say ‘Hi LeXin’ to the board[0m

[0;32mI (10527) esp-eye: Version 1.0.0[0m

Ainsi, il faut dire “hi lexin” (en prononçant le x  comme en chinois, donc “ch”) pour que la carte se lance. Le LED va donc normalement commencer à clignoter en rouge et le terminal va afficher:

 hilexin DETECTED.

La carte va lancer son propre stream wifi, ainsi il faut s’y connecter dans ses paramètres wifi. Pour y avoir accès, il faut se connecter à ce lien: 

http:/192.168.4.1/face_stream

Pour enregistrer un visage, on peut s’appuyer sur la notice d’utilisation dans la boîte. Il faut appuyer sur un bouton sur le coté gauche de la carte.

Quand un visage a été enregistré, son numéro s’affiche en plus d’un “Hello ID”. Si un visage n’est pas reconnu, un “WHO ?” s’affiche en rouge.

 

  1. Perspectives et pistes d’amélioration

 

Le programme n’est pas très fonctionnel lorsque la personne n’est pas bien éclairée, ou si la personne n’a pas la peau claire. Ainsi, ce problème peut facilement être résolu en ajoutant plus de personnes différentes dans le dataset lors de l’entraînement du modèle. De plus, le modèle n’ayant été entraîné qu’avec des images de masque bleu, il ne marche ainsi qu’avec ceux-ci. On peut aussi résoudre ce problème en travaillant en profondeur sur le dataset.

 

De plus, nous n’avons que deux classes: avec et sans masque. Cependant, un masque peut être mis d’une mauvaise façon: avec le nez ou le menton qui dépasse par exemple. Ceci peut-être facilement réglé en créant de nouvelles classes et en téléchargeant de nouvelles photos.

 

Avec cette première mise en place du logiciel, la modification du code est ensuite très facile et peut facilement être adaptée à d’autres projets (reconnaissance des humeurs par exemple).

Le projet pourra donc servir à créer une UE de premiers pas dans le machine learning. A l’aide des documents techniques que nous avons et allons réaliser dans le cadre du projet, les étudiants pourront apprendre les différents moyens de faire des algorithmes de reconnaissance faciale et les adapter à un problème donné (et non pas seulement la détection du masque).

Laisser une réponse

Votre adresse e-mail ne sera pas publiée.