$ cd /home/Lu/

Keep-learning Lu

19 Sep 2020

Face Server

Clara Bomy – Amine El Khiati – Arnaud Tabbara - Hedi Zekri – Lu Xu – Zoé Moulart

Introduction

Dans la vie quotidienne, chacun a l'habitude d'identifier tout au long de la journée les différents visages qu'il a croisé. Lorsqu'on rencontre une personne, notre cerveau va chercher dans notre mémoire et vérifier si la personne considérée est connue ou non. Reconnaître un individu est une tâche relativement simple pour les êtres humains, en est-il de même pour une machine ?

C'est dans cette optique que s'est créé le projet Face Server dont l'objectif final est de concevoir un moteur de reconnaissance faciale, pilotable par une interface utilisateur intuitive et utilisant des modèles d'intelligence artificielle récents et performants.

1 Présentation du projet

1.1 Fonctionnement général et architecture

Initialement, ce projet devait combiner différents domaines : l'intelligence artificielle avec l'utilisation de modèles de détection et de reconnaissance faciale, l'électronique embarquée avec l'utilisation du micro-ordinateur NVIDIA Jetson Nano et le développement web pour la conception d'une interface utilisateur. Néanmoins, en raison de l'épidémie du COVID-19, la partie embarquée n'a pas pu aboutir faute d'accès au matériel.

Ce projet se divise donc en deux parties : une partie dédiée à la conception d'un moteur de reconnaissance faciale et une autre dédiée à l'interface utilisateur et au serveur web. Ces deux parties communiquent à travers un système de logs fournis par le moteur de reconnaissance faciale.

2020-09-19-14-20-51.png

Après apprentissage du modèle de reconnaissance faciale sur un jeu de données contenant des photos de différentes personnes, le système va, via un flux vidéo fourni par une caméra réseau, identifier les personnes présentes dans le champ et le notifier dans un fichier CSV (statue inconnue/connu de la personne, heure de passage et éventuellement son nom) – chaque jour, un nouveau fichier sera créé. Si une personne n'a pas été reconnue par le système, une photo de son visage sera également prise par le système et sauvegardée dans un dossier prévu à cet effet.

En parallèle, un serveur web se chargera de récupérer l'ensemble des logs (fichiers CSV et dossier des photos prises pour les personnes inconnues) et de les mettre à disposition de l'utilisateur via une interface. Cette interface permettra à l'utilisateur :

  • De voir le flux vidéo de la caméra réseau
  • De consulter l'ensemble des dernières personnes identifiées par le système avec leurs heures de passage
  • De consulter l'ensemble des personnes sur lesquelles le système s'est entraîné et d'y ajouter de nouvelles photos
  • D'enregistrer des individus non reconnus dans le jeu de données d'entrainement

1.2 Organisation

Ce projet a été divisé en trois périodes dédiées :

  • Du 28 au 31 octobre 2019 (à Urbawood)
  • Du 13 au 17 janvier 2020 (à Urbawood)
  • Du 4 au 15 mai 2020 (en télétravail)

Chacune des périodes comportait différents objectifs à réaliser. A chaque fin de période, nous répertorions le travail effectué de façon à bien nous organiser pour la suite.

À partir du mois de mai, en raison du télétravail, nous avons travaillé entièrement sur l'application Teams, qui nous a permis de recréer l'ambiance du projet dans sa globalité (réunions en visioconférence, partage des documents, etc.). Un suivi des tâches sur Teams a d'ailleurs été mis en place :

2020-09-19-14-25-54.png

Afin de maintenir une communication permanente et d'assurer le bon déroulement du projet, nous organisions régulièrement des réunions d'environ 15 minutes entre les membres de l'équipe afin d'avoir un aperçu du travail de chacun, de nos difficultés et nos objectifs. En plus de ces réunions, chaque semaine, nous faisions le point avec notre responsable de projet pour qu'il soit au courant de notre avancement et qu'il puisse nous aiguiller et nous conseiller si besoin.

2 Le moteur de reconnaissance faciale

2.1 Principe

La reconnaissance faciale repose sur un pipeline comportant différentes étapes.

2020-09-19-14-27-53.png

2.1.1 Détection faciale

La première étape du pipeline repose sur la détection faciale. Pour ce faire, nous devons utiliser un modèle d'intelligence artificielle pré-entrainé capable de détecter et de localiser tous les visages contenus sur une photo ou un frame dans le cas de flux vidéo, qu'importe la taille et la position du visage, la qualité de l'image, etc.

2020-09-19-14-29-03.png

2.1.2 Alignement des visages

Chaque visage détecté est ensuite croppé. Pour pallier le fait que les visages peuvent être orientés de différentes manières, une étape de normalisation est nécessaire – elle consiste à faire en sorte que les points d'intérêt qui existent sur chaque visage (haut du menton, bord extérieur de chaque œil, bord intérieur de chaque sourcil, etc.) soient positionnés au même endroit pour chaque image croppée.

2020-09-19-14-29-54.png

2.1.3 Extraction des caractéristiques du visage

La troisième étape du pipeline repose sur un réseau de neurones à convolution pré-entrainé capable d'extraire les caractéristiques de chaque visage en un unique vecteur de n dimensions (face embedding) – la dimension dépendant du modèle utilisé.

2020-09-19-14-32-19.png

Entrainer de zéro ce type de modèle pourrait prendre des jours et nécessiterait des téra-octets de données et une carte graphique extrêmement puissante pour obtenir de bons résultats.

2.1.4 Comparaison du vecteur généré avec des vecteurs de personnes déjà connues

À partir du vecteur de caractéristiques établi, le réseau de neurones à convolution pré-entrainé est ensuite capable de le comparer avec les vecteurs des visages déjà connues. Le modèle utilise la cosine similarity pour mesurer la similitude entre deux vecteurs. Lorsqu'un vecteur similaire à celui généré est trouvé, la personne est considérée comme reconnue par le modèle.

Ainsi, pour mettre en œuvre notre moteur de reconnaissance faciale, nous avons dû concevoir un pipeline similaire à celui ci-contre, en ayant recours à plusieurs réseaux de neurones.

2020-09-19-14-33-35.png

2.2 Réalisation technique

2.2.1 Modèles utilisés

Pour réaliser le moteur de reconnaissance faciale, nous avons utilisé deux réseaux de neurones à convolution pré-entrainés :

  • Un réseau de neurones de type MTCNN_(__Multi-task Cascaded Convolutional Networks - 2016)_ pour la détection faciale et la détection des points d'intérêt des visages.

  • Un réseau de neurones de type Arcface_(__Additive Angular Margin Loss for Deep Face Recognition – 2019),_ modèle très performant qui a atteint des statistiques de pointe sur différents jeux de données de reconnaissance faciale tels que LFW et MegaFace.

Notons que le modèle Arcface possède différentes variantes parmi lesquelles nous trouvons:

  • Le modèle LResNet100E-IR qui a pour base un modèle convolutif ResNet100 dont les couches d'entrée et de sortie ont été modifiées.
  • Le modèle LResNet50E-IR qui a pour base un modèle convolutif ResNet50 dont les couches d'entrée et de sortie ont été modifiées.

Pour le projet, nous avons téléchargé les modèles MTCNN et Arcface version LResNet100E-IR au format ONNX, format open source souvent utilisé pour le stockage des modèles de Machine Learning et de Deep Learning. Pour pouvoir les importer correctement, nous avons eu recours au framework__MXNet CUDA de Python.

Pour les parties suivantes, nous nous sommes basés sur un code Github que nous avons dû prendre en main pour l'adapter à nos besoins.

2.2.2 Entrainement du modèle de reconnaissance faciale

Tout d'abord, nous avons dû entrainer le modèle de reconnaissance faciale sur nos propres photos. Pour ce faire, nous avons procédé comme suit :

2020-09-19-14-35-53.png

  • Constitution du dataset d'entrainement

Nous avons commencé par constituer un jeu de données d'entrainement avec des photos de nous et de nos amis. Ce dataset est composé d'un ensemble de dossiers : un dossier au nom de chaque individu enregistré, qui contient différentes photos de lui - chaque image devant contenir un seul visage. Le modèle apprendra à reconnaître les personnes enregistrées dans le dataset.

2020-09-19-14-36-53.png

Structure du dataset d'entrainement

Bien qu'il n'y ait pas de contraintes sur la taille des images utilisés pour l'entrainement, il est préférable que celles-ci soient de bonne qualité et d'une taille suffisante pour que le visage puisse être convenablement détecté par la suite par le MTCNN.

  • Étape de préprocessing (MTCNN)

Toutes les images du dataset sont ensuite récupérées puis fournies au modèle MTCNN pré-entrainé pour la détection et l'alignement des visages. Pour chaque image, ces étapes incluent la recherche des coordonnées de la zone encadrante du visage (bounding box) et l'alignement du visage.

  • Génération de l'embedding des visages

Les images normalisées et leur label correspondant (nom de la personne associée) sont ensuite fournis au modèle Arface pour la reconnaissance faciale. A partir de ces images, avec le modèle utilisé (LResNet100E-IR), nous obtenons un embedding des visages du dataset à 512 dimensions. Nous sauvegardons ensuite cet embedding dans un fichier pickle, faces.pkl – cela nous évite de devoir entrainer constamment le modèle de reconnaissance à chaque redémarrage du programme. Il suffira, en effet, de fournir directement cet embedding lors de l'instanciation du modèle.

2.2.3 Programme de reconnaissance des individus en temps réel

Après avoir réalisé quelques tests avec le programme trouvé sur Github sur nos propres photos, nous avons développé un script pour la reconnaissance des individus en temps réel.

2.2.3.1 Principe

La méthode utilisée peut-être schématisé de la façon suivante :

2020-09-19-14-36-53.png

Nous avons utilisé la librairie OpenCV pour récupérer le flux vidéo de la webcam de l'ordinateur (ou d'une caméra reliée à l'ordinateur). Pour éviter de ralentir le flux, le processus de reconnaissance faciale est réalisé tous les cinq frames et se présente comme suit :

  1. Entraînement du modèle de reconnaissance faciale ou injection de l'embedding des visages au modèle (fichier faces.pkl)

  2. Détection et reconnaissance de toutes les personnes présente dans le champ de la caméra (même processus que celui expliqué dans la partie 2.1)

  3. Pour chaque personne identifiée, deux cas peuvent alors se produire :

  • Pour un individu reconnu par le système, un rectangle vert encadre le visage de la personne. Son nom et le niveau de confiance du modèle de reconnaissance sont également affichés à l'écran.

2020-09-19-14-40-22.png

  • Pour un individu non reconnu par le système, un rectangle rouge encadre le visage de la personne. Le nom associé à ce visage sera noté Unknown et le niveau de confiance du modèle de reconnaissance sera également affiché.

    2020-09-19-14-41-25.png

  1. Le programme s'arrête lorsque l'utilisateur appuie sur la touche q.

2.2.3.2 Système de logs et prise de photos pour les personnes non reconnues par le système

Pour pouvoir enregistrer toutes les personnes non reconnues, le système de reconnaissance prend en parallèle des photos des visages inconnus. Ces photos sont toutes stockées dans un répertoire.

De plus, un système de logs par fichiers CSV a été mis en place pour avoir une trace des personnes identifiées (reconnues ou non) et de leur(s) heure(s) de passage. Chaque jour, un fichier CSV est créé - une ligne correspondant à une personne identifiée à un temps donné. Pour chaque individu, nous stockons alors les informations suivantes : date, heure, nom, confiance_du_modèle, id_photo. L'ensemble des logs est répertorié en local dans un répertoire prévu à cet effet.

Ces informations seront ensuite utilisées par l'interface web pour afficher au fur et à mesure les personnes identifiées par le système et permettre à l'utilisateur d'ajouter de nouvelles personnes dans le dataset voire même, de compléter le profil d'une personne enregistrée en y ajoutant de nouvelles photos (cas où la personne n'a pas été reconnue par le système bien qu'elle soit présente dans le dataset). Cette dernière fonctionnalité pourra d'ailleurs améliorer grandement les performances du modèle de reconnaissance après réentraînement sur le dataset mis à jour.

2.2.3.3 Calcul des distances entre les bounding boxes pour éviter les logs intempestifs

Pour éviter les logs intempestifs, tout au long du programme, nous calculons les distances entre les bounding boxes prises à l'instant t et celles prises à l'instant t-1.

Pour le calcul des distances, nous avons utilisé l'IOU (Intersection over Union) entre les bounding__boxes. L'IOU est un score entre 0 et 1 qui nous permet de déterminer le pourcentage de recouvrement entre deux bounding boxes.

2020-09-19-14-42-58.png

Initialement, l'IOU est utilisée pour mesurer la performance des modèles de détection tels que YOLO (mesure entre les bounding boxes réels et les bounding boxes prédites par le modèle). Dans cet exemple, intuitivement, on peut dire que plus l'IOU sera proche de 1, plus le modèle de détection sera performant.

2020-09-19-14-43-43.png

Dans notre cas, nous recherchons l'effet inverse puisque des bounding boxes dont l'IOU est élevée nous indiquent que le visage de la personne considérée n'a quasiment pas bougé entre deux frames – le changement de coordonnées n'est donc pas significatif et il est donc inutile d'ajouter des logs supplémentaires. Nous avons décidé de mettre à jour les coordonnées d'une bounding box lorsque l'IOU entre cette box et celle de l'instant t-1 vaut 0 – c'est-à-dire lorsque les deux boxes ne se chevauchent pas.

Lorsque plusieurs personnes sont présentes dans le champ de la caméra, nous commençons par trier la liste des boxes en fonction des coordonnées du centre de chaque bounding box sur l'axe horizontal, de gauche à droite. Puis, tant que le nombre de personnes reste fixe, pour chaque box de l'instant t, nous réalisons le calcul de l'IOU entre celle-ci et celle de l'instant t-1. Si le nombre de personnes présentes évolue, la liste des bounding boxes est réinitialisée et nous réitérons le processus. Cela signifie que chacune des personnes présentes dans le champ de la caméra sera de nouveau enregistrée dans le fichier de logs par le système.

2.2.3.4 Fichier de configuration du programme

Pour simplifier l'utilisation du programme, nous avons inclus au système de reconnaissance un fichier de configuration, config.json. Cela évite de devoir parcourir la totalité du code lorsque l'on souhaite modifier des paramètres de configuration.

Ce fichier se présente de la façon suivante :

2020-09-19-14-44-56.png

Parmi les paramètres du fichier de configuration, nous trouvons la possibilité d'entrainer le modèle de reconnaissance au démarrage du programme (paramètre train_recognition_model), de spécifier les chemins d'accès des modèles, des données (dataset d'entrainement, dossier de stockage de l'embedding, dossier de stockage des photos des personnes non identifiées, dossier de stockage des logs).

Le paramètre confidence_threshold permet de fixer le seuil à partir duquel une personne serait considérée comme inconnue au système.

Le paramètre camera_ip permet d'indiquer l'adresse ip de la caméra réseau que l'on souhaite utiliser – si ce paramètre vaut 0, la caméra utilisée sera la webcam de l'ordinateur sur lequel le programme tourne.

2.2.3.5 Utilisation d'une caméra réseau

Initialement, nous utilisions la webcam de nos ordinateurs pour faire nos tests de détection et de reconnaissance faciale. Néanmoins, étant donné que la partie serveur a également besoin du flux pour l'affichage sur le site web, il n'était pas possible d'utiliser ce type de caméra – cela impliquerait de plus, que les parties IA et serveur web soient configurées sur la même machine, ce qui n'est pas possible en raison du télétravail. Nous avons donc décidé d'utiliser une caméra réseau qui nous permettra d'avoir accès au flux vidéo depuis n'importe quelle connexion.

Faute de matériel à cause du confinement, nous avons pour le moment fait des tests en utilisant des flux de cameras réseaux disponibles en ligne.

2020-09-19-14-46-05.png

2.2.3.6 Résultats observés

D'un point de vue général, le moteur de reconnaissance faciale développé avec le modèle Arcface version LResNet50E-IR est très performant : il ne suffit que d'une ou deux photos enregistrées pour que le système parvienne à reconnaître une personne en temps réel. Notons néanmoins que plus il y a de photos différentes enregistrées dans le jeu de données pour une personne considérée, plus le modèle sera performant pour reconnaître cette personne.

2020-09-19-14-47-10.png2020-09-19-14-48-03.png

Il ne faut pas non plus négliger le fait que ce modèle est très lourd et qu'il nécessite une bonne puissance de calcul et une configuration matérielle appropriée. En raison de l'épidémie du COVID-19, avec le télétravail, nous avons été contraints d'installer le projet sur nos propres ordinateurs et d'utiliser, de ce fait, le modèle Arcface version LResNet50E-IR : c'est un modèle plus léger mais nécessairement moins performant en raison d'un nombre de couches inférieur. Toutefois, les résultats restent corrects et le modèle parvient à reconnaître rapidement les individus sur lesquels il s'est entraîné. Avec la version LResNet50E-IR, il est conseillé d'utiliser un jeu de données avec plusieurs photos différentes pour une personne considérée (au minimum trois photos par personne).

Le modèle utilisé pour la détection faciale en temps réel semble également être très bon. Contrairement à des algorithmes plus anciens comme par exemple Haar Cascade, le MTCNN parvient – la plupart du temps – à détecter rapidement des visages éloignés, quelles que soient les conditions (image floue, environnement sombre, visage de profil ou légèrement déformé…).

3 L'interface web

3.1 Général

Il est important que notre technologie soit facile d'accès pour que tout le monde puisse l'utiliser. La cible de notre logiciel pourrait-être par exemple le personnel administratif d'une école qui peut ne pas être à l'aise avec les nouvelles technologies.

En réaction à ces besoins, nous avons structuré le site de la manière la plus ergonomique possible : une page d'accueil et trois onglets cliquables sur un menu visible à gauche de notre écran. Parmi eux :

  • L'onglet "Streaming" qui affiche le flux vidéo de la caméra et les informations déduites par l'IA (présence de visage, identification).

  • L'onglet "Logs" qui affiche la liste des dernières reconnaissances constatées en indiquant le statut du reconnu (connu/inconnu), si possible son nom, ainsi que la date du cliché.

  • Onglet "Répertoire" qui permet de voir la liste des personnes déjà identifiées et de rajouter les identités inconnues.

Les fonctions proposées sur chaque onglet devront également être compréhensible rapidement par un utilisateur néophyte.

3.2 Outils et technologies utilisées

Le projet utilise plusieurs piliers technologiques :

  • Node.js nous permet d'utiliser le langage JavaScript sur le serveur et donc en dehors du navigateur. Node.js bénéficie de la puissance de JavaScript pour proposer une toute nouvelle façon de développer des sites web dynamiques bien plus rapide et efficace. Cet outil rend possible le développer d'application web en temps-réel, où le serveur à la possibilité de transmettre de l'information au client.

  • Express.js est un framework (outil, cadre et méthodologie de développement) pour construire des applications web basées sur Node.js. C'est de fait le framework standard pour le développement de serveur en Node.js.

  • Bootstrap est un framework pensé pour développer des sites avec un design responsive, qui s'adapte à tout type d'écran, et en priorité pour les smartphones. Il fournit des outils avec des styles déjà en place pour des typographies, des boutons, des interfaces de navigation et bien d'autres encore. On appelle ce type de framework un "Front-End Framework".

  • Excel (.csv) nous permet de centraliser les données récupérées par le moteur de reconnaissance faciale. Nous avions dans un premier temps eu à faire un choix entre MySQL et MongoDB comme architecture de base de données. Il s'est avéré que la quantité de données à stocker et à restituer était suffisamment faible pour pouvoir s'appuyer sur un fichier .csv qui serait plus facilement alimenté et interprétable par notre serveur web ou via l'API Python.

3.3 Onglet "Streaming"

Comme nous le savons tous, si vous essayez d'ajouter une vidéo dans le HTML, nous pouvons simplement ajouter la balise <vidéo> pour réaliser, mais cela ne s'appliquera pas à ce genre de "vidéo". Compte tenu du stockage et de la consommation d'énergie, les vidéos de surveillance ne sont que des séries d'images jouant fréquemment.

Nous devons donc en faire un lecteur et afficher les images (en MJPEG) une par une dans une vitesse. Mettez ensuite cette diapositive en lecture continue dans l'onglet <canvas>; (en HTML).

2020-09-19-14-51-41.png

Il y a un mjpeg.ejs dans /views/includes, où nous plaçons tous les scripts, et un autre streaming.ejs existe dans /views où nous plaçons les différentes pages vues. Dans ce cas, le flux s'affichera sur la page streaming, donc j'ajoute simplement une ligne (avec un rectangle rouge dans la capture d'écran ci-dessus) pour inclure le script mjpeg.

3.4 Onglet "Logs"

La lecture des données du fichier bdd.csv côté serveur a été fait dans les langages Javascript et pHp dans le fichier "/routes/index.js" via la fonction fs.readFileSync de la librarie "File System".Il est nécessaire de modifier la syntaxe de la trame crée à la lecture du tableau pour que les données soient interprétables. Cela passe par une séparation correcte entre les cellules ainsi qu'une gestion des retours à la ligne et des sauts de ligne.

Il n'est possible, grâce à la fonction json.render de la librarie "json" de n'envoyer qu'une seule trame par requête. Nous avons donc décidé, après avoir déclaré la forme du tableau de données à envoyer côté client, d'alimenter une matrice structurée pour laquelle les deux axes seraient : le temps, et la nature des données à restituer. Une fois cette trame json correctement crée, nous pouvons effectuer l'envoi de ces données côté client.

L'affiche des données .csv côté client se fait, lui, en html dans le fichier "/views/logs.ejs". L'utilisation du framework Bootstrap nous a grandement facilité la tâche en nous permettant des affichages dynamiques et élégants sous forme de template à réadapter à notre utilisation. Nous nous contentons ici de récupérer les données du côté serveur et de les répartir sur l'écran, en fonction des choix de l'utilisateur. Dans un même tableau, quatre onglets nous permettent d'afficher sans même rafraichir la page web : les logs de la journée, du mois, de l'année ou tous les logs depuis la création de la base de données. Cela permet une navigation bien plus souple et plus adaptée pour un utilisateur néophyte.

2020-09-19-14-52-32.png

3.5 Onglet "Répertoire"

L'onglet répertoire va comme son nom l'indiquer permettre de répertorier les individus déjà inscrits dans la base de données. Pour cela, il va en permanence surveiller (watch) l'infrastructure des dossiers contenant les personnes et les photos correspondantes. Il affichera ensuite, selon les dossiers trouvés, la liste des individus présents dans la BDD. Pour cela le serveur va récupérer cette liste et l'envoyer au côté client, la vue va ensuite interpréter ces données de façon dynamique afin de les afficher dans le tableau.

L'onglet répertoire va aussi permettre à l'utilisateur d'ajouter des individus à la base de données. Pour cela l'utilisateur va devoir remplir le formulaire avec les données concernant l'individu qu'il veut ajouter.

2020-09-19-14-53-09.png

Une fois le formulaire rempli, et lorsque l'utilisateur va appuyer sur le bouton, une requête POST contenant les données va être envoyée au serveur, il va alors créer les dossiers nécessaires au nouvel individu dans l'infrastructure de dossiers. Et la vue va être mise à jour pour afficher le nouvel individu dans le tableau du répertoire.

Le formulaire nécessite une confirmation de la part de l'utilisateur, et réagit de façon intelligente pour éviter les erreurs :

2020-09-19-14-53-40.png

Enfin, la page répertoire permet également d'ajouter de nouvelles images pour les individus de la base de données. Pour cela, elle nous mènera à la page Add qui a la capacité de comprendre de façon dynamique à quelle personne l'utilisateur avait l'intention d'ajouter une photo, et d'afficher automatiquement le formulaire prérempli.

2020-09-19-14-54-27.png

2020-09-19-14-55-04.png

Le formulaire de la page Add va, de la même façon que le tableau de la page répertoire, s'actualiser de façon automatique en fonction des individus présents dans la base de données. Il possède un formulaire permettant à l'utilisateur de parcourir ses fichiers afin d'y prendre une image qui sera ensuite upload sur le serveur dans le dossier correspondant à l'individu choisi.

Le formulaire a été conçu pour être simple et intuitif : compris en un clin d'œil. Il affichera la photo choisie pour que l'utilisateur ne commette pas d'erreur et donne un message de confirmation en cas de succès de l'upload de la photo. La photo sera alors envoyée sur le serveur via une requête POST upload dans le dossier convenable à l'individu choisi. Encore une fois le formulaire est intelligent, et ne se confirmera pas tant que l'utilisateur n'a pas choisi d'individu.

2020-09-19-14-55-55.png

4 Questions éthiques

En tant qu'acteurs de ce projet, nous estimons qu'il est important de prendre conscience des enjeux mais aussi des dangers liés à la reconnaissance faciale. Aujourd'hui, considérée comme l'une des technologies biométriques les plus performantes pour identifier un individu, la reconnaissance faciale est aussi la technologie qui connaît la plus forte croissance - son marché pourrait atteindre une valeur de 7,7 milliards de dollars d'ici 2022.

4.1 Les domaines d'application

Cette technologie est de plus en plus utilisée à des fins de surveillance et de sécurité, dans de nombreux pays, notamment par les gouvernements et les autorités qui tendent à l'incorporer à des systèmes de vidéosurveillance. La Chine est sans nul doute le principal exemple puisque le gouvernement cherche à généraliser son usage. Néanmoins, la reconnaissance faciale est aussi de plus en plus utilisée en France, au Royaume-Uni ou encore aux États-Unis : identification des individus dont le visa est expiré dans les aéroports (Etats-Unis), tests de reconnaissance faciale mis en œuvre par Nice lors de son Carnaval en 2019 (France).

Elle est également de plus en plus exploitée par des entreprises d'industries diverses telles que la santé, le marketing ou le tourisme (par exemple, mise en place de panneaux publicitaires intelligents pour proposer des publicités ciblées dans les aéroports de nombreux pays).

On retrouve aussi cette technologie sur de nombreux services et produits destinés au grand public (technologie Face ID avec l'iPhone, technologie DeepFace de Facebook).

4.2 Les dangers

La reconnaissance faciale soulève de nombreuses craintes et inquiétudes concernant la sécurité et la confidentialité. Le pire usage de la reconnaissance faciale est sans nul doute celui qu'en fait la Chine : profilage, surveillance du comportement et association de sanctions, etc.

Aux Etats-Unis, on estime aujourd'hui que les systèmes de reconnaissance faciale ont permis de capturer et de stocker les données faciales de plus de la moitié des citoyens. Ces informations, stockées dans une base de données centralisée, peuvent être explorées librement par les autorités. Si par malheur un hacker accède à ces données, elles pourraient être exploitées à des fins malveillantes. Les autorités et les entreprises privées pourraient également s'en servir pour pister les individus.

De plus, le problème est aggravé par le fait que la reconnaissance faciale manque encore de fiabilité (images floues, mal éclairées, visages couverts, photo de référence qui n'est plus fidèle à la réalité, etc.). Même si les performances des systèmes s'améliorent de jour en jour, le risque zéro n'existe pas : une personne pourrait être confondue avec une autre et donc, dans le pire des cas, sanctionnée à sa place.

En Europe, la reconnaissance faciale est nettement moins utilisée que dans les autres pays développés car le RGPD en vigueur depuis mai 2018 protège les données biométriques des citoyens. Néanmoins, il faut tout de même rester vigilants face à cette technologie qui, comme nous avons pu le constater, peut être dangereuse pour nos libertés et notre vie privée.

5 Conclusion

Tout au long de l'année, mener à bien ce projet n'a pas été simple. Les périodes dédiées au projet étaient relativement courtes et espacées dans le temps, il était souvent difficile pour nous de reprendre le projet au stade où nous l'avons laissé. De plus, l'épidémie du COVID-19 entraînant pour nous le télétravail au mois de mai n'a pas arrangé les choses. Pour la partie IA, nous avions notamment l'habitude de travailler sur un des ordinateurs d'Urbawood disposant d'une carte graphique très puissante – nous n'avions donc pas à nous préoccuper de problèmes d'espace mémoire. Avec le télétravail, pour cette partie, nous avons été contraints d'installer le projet sur nos propres ordinateurs et d'utiliser, de ce fait, le modèle Arcface version LResNet50E-IR, moins performant mais plus léger. Toutes ces difficultés nous auront néanmoins permis de nous adapter aux changements - à l'organisation du travail, à la gestion de l'équipe mais aussi à la contrainte matériel.

Prendre part à ce projet a été pour nous une expérience enrichissante : ce fut l'occasion de comprendre le fonctionnement d'un système de reconnaissance faciale et son implémentation. Pour cela, nous avons acquis des techniques et des connaissances supplémentaires, notamment en programmation web et en _Deep Learning (_Computer Vision, modèles de détection, librairie OpenCV, etc.) que nous mettrons sans doute à profit dans notre parcours à venir.

Nous tenons, pour finir, à remercier M. Nacim Ihaddadenne pour ses conseils, sa disponibilité et sa confiance.

comments powered by Disqus