Projet de M1 · Vision par ordinateur

Évaluer la coopération d'une personne pour la reconnaissance faciale

La reconnaissance faciale suppose que la personne coopère : visage dégagé, regard vers la caméra, démarche normale. Ce projet de M1, mené à deux pendant trois mois à l'ISEN Nantes, mesure automatiquement ce degré de coopération à partir d'une simple vidéo.

  • Projet de M1
  • ISEN Nantes
  • En binôme
  • 3 mois
Trois personnes suivies, chacune avec une identité stable

Chiffres clés

  • 4 + 2blocs fonctionnels et modules complémentaires
  • 3 moisde projet, mené à deux
  • 5sprints en méthode agile
  • 0changement d'identité sur la séquence de test à deux personnes

Contexte

Le problème

En conditions contrôlées, les systèmes de reconnaissance faciale dépassent 99 % de bonnes vérifications. Dans un couloir de contrôle d'accès ou un espace public, leurs performances chutent dès que la personne ne coopère pas : regard détourné, visage masqué, tête inclinée, passage en courant.

L'objectif

Évaluer automatiquement, en temps réel et sans gêner la personne, son degré de coopération. Il ne s'agit pas de remplacer la reconnaissance faciale, mais de lui fournir une analyse de contexte :

  • repérer les comportements qui la perturbent (profil, visage caché, course, posture inhabituelle) ;
  • produire un score de coopération utilisable par un opérateur ou par un système en aval ;
  • garder la même identité pour chaque personne, même quand elle disparaît un instant.

Le cadre

Projet de M1 de l'ISEN Nantes, d'une durée de trois mois, réalisé en binôme : nous avons travaillé ensemble sur l'ensemble des tâches. Il était encadré par Khadidja Ould Amer et Cyril Barrelet.

L'organisation

Une méthode agile en cinq sprints, chacun livrant une fonctionnalité testable seule : état de l'art et architecture, modules visage et regard, analyse de la démarche, modules complémentaires, optimisation et finalisation. Le code vivait sur un dépôt GitHub privé, avec une branche par module.

Les contraintes

Fonctionner sur un processeur standard, sans carte graphique dédiée, accepter une vidéo ou une webcam en entrée, et ne conserver aucune donnée biométrique par défaut.

Architecture

Quatre blocs indépendants, chacun exécutable seul, écrits en Python.

Schéma global du système : le suivi alimente quatre analyses en parallèle, qui convergent vers le score de coopération

1 · Suivi et ré-identification

Détecter chaque personne, la suivre d'une image à l'autre et lui garder la même identité tout au long de la séquence.

2 · Démarche et posture

Estimer le squelette, la vitesse de déplacement et repérer course, démarche inhabituelle ou personne au sol.

3 · Occlusion du visage

Mesurer, zone par zone, ce qui cache le visage : main, masque, objet.

4 · Orientation et regard

Estimer l'orientation de la tête, la direction du regard et l'ouverture des yeux pour décider si la personne coopère.

Suivi et ré-identification

Le bloc central : sans identité stable, aucune mesure ne peut être suivie dans le temps.

  1. Détecter et suivre

    YOLOv8m-seg détecte les personnes et fournit le masque de chacune ; BoT-SORT les suit d'une image à l'autre. Le seuil de confiance est abaissé à 0,30 pour ne pas perdre les personnes de profil ou à moitié visibles.

  2. Reconnaître par le visage et par le corps

    InsightFace fournit une empreinte du visage, retenue seulement si le visage est assez grand, bien détecté et géométriquement plausible, ce qui écarte les arrières de tête. Une empreinte du corps est calculée sur le masque de la personne. Les deux sont fusionnées, le corps pesant un peu plus : les vêtements distinguent bien deux à cinq personnes filmées ensemble.

  3. Décider sans se précipiter

    Une machine à états attend huit images avant d'attribuer une identité, conserve les pistes perdues pour les ré-associer, et durcit ses seuils quand deux personnes sont proches. Une galerie garde plusieurs prototypes par personne, et une consolidation régulière fusionne les identités créées en double.

    Machine à états de la ré-identification
    Trois personnes se croisent : chacune garde son numéro
  4. Une variante hors ligne par la couleur

    Pour les vidéos traitées après coup, une seconde chaîne mesure la couleur du torse sur le masque de chaque personne, retrouve les couleurs de référence par K-means, puis attribue les identités image par image avec l'algorithme hongrois. Un fichier de diagnostic signale les passages ambigus, qu'un fichier de corrections permet de trancher.

    L'identité est retrouvée après une sortie du champ
    Identité conservée de dos comme de profil

Démarche et posture

YOLOv8-pose estime les 17 points clés du squelette de chaque personne. La vitesse est calculée à partir du déplacement du centre des hanches ; l'échelle en mètres est déduite de la taille du squelette, rapportée à une taille moyenne de 1,70 m, puis la mesure est lissée.

Les classes

  • Immobile : moins de 0,3 m/s.
  • Marche normale : tronc droit, balancement des bras symétrique.
  • Marche anormale : tronc incliné de plus de 30° ou asymétrie des bras supérieure à 40 %.
  • Course : plus de 2 m/s.
  • Allongé : tronc proche de l'horizontale.

Un vote majoritaire sur dix images évite que la classe ne change à chaque instant. Le module a été testé sur le jeu public Penn Action et sur nos propres vidéos.

Squelette, vitesse et état de chaque personne : l'une est immobile, l'autre est détectée allongée au sol

Analyse du visage

Deux blocs qui partagent les mêmes points de repère du visage.

Occlusion du visage

MediaPipe FaceMesh place 478 points de repère sur le visage, qui délimitent des zones anatomiques : yeux, nez, bouche, joues, front. La couleur de peau de la personne est étalonnée sur les premières images, dans l'espace Y'CbCr qui sépare la luminosité de la couleur. Une zone où trop peu de pixels ressemblent à de la peau est considérée comme masquée.

Le score global, de 0 à 100, pondère les zones selon leur importance pour la reconnaissance : les yeux et le nez comptent trois fois plus que le front. Il a été testé avec une main devant le visage, un masque médical, un objet tenu devant soi et des éclairages variés.

Orientation de la tête et regard

L'orientation de la tête est estimée par résolution PnP à partir de six points du visage : nez, menton, coins des yeux et commissures des lèvres. L'ouverture des yeux est mesurée par le rapport d'aspect de l'œil, et la direction du regard par la position de l'iris.

La décision

La personne est jugée coopérative si ses deux yeux sont ouverts, si son regard vise la caméra et si sa tête n'est pas tournée de plus de 25° sur le côté ni de plus de 20° vers le haut ou le bas. Un vote sur quatorze images stabilise l'affichage.

Modules complémentaires

Placement dans une zone autorisée

L'utilisateur trace les zones autorisées sur l'image, par exemple un trottoir. Elles sont converties en un masque, et à chaque image le point au sol de chaque personne suivie est testé : une personne qui passe plus de 30 % du temps hors zone est signalée.

Meilleure image du visage

Pour chaque identité, l'algorithme retient l'image la plus exploitable de la séquence. Son score combine la qualité du visage, son orientation face à la caméra et l'absence d'occlusion.

Personnes en vert dans la zone autorisée, en rouge hors zone

Bilan

Les six tâches du sujet ont été traitées ; les chiffres ci-dessous viennent des tests du rapport de projet.

Ré-identification

  • Séquence simple, 2 personnes : aucun changement d'identité.
  • Séquence complexe, 4 personnes qui se croisent : 2 changements.
  • Test de charge, 5 personnes en tenues similaires : 4 changements.

Cadence

  • De 9 à 14 images par seconde sur processeur dans nos tests, selon le nombre de personnes.
  • Les modèles sont exportés au format ONNX pour accélérer l'inférence sans carte graphique.

Limites constatées

  • Au-delà de quatre personnes, le temps réel n'est plus garanti sans carte graphique.
  • L'étalonnage de la peau est sensible au contre-jour et aux forts changements d'éclairage.
  • Un visage tourné de plus de 80° échappe à l'analyse.
  • Les seuils de coopération ont été réglés sur peu de personnes.

Pistes d'amélioration

  • Un modèle dédié à l'orientation de la tête, plus précis aux grands angles.
  • Un réseau léger pour l'occlusion, à la place de l'analyse de couleur.
  • Un suivi sur plusieurs caméras.
  • Un score de coopération appris sur la durée par un modèle temporel.

Outils

YOLOv8 (Ultralytics)

Détection et segmentation des personnes, estimation du squelette.

BoT-SORT

Suivi multi-personnes, choisi à la place de DeepSORT pour sa meilleure gestion des occlusions.

InsightFace

Empreintes du visage (ArcFace) pour la ré-identification.

MediaPipe FaceMesh

478 points de repère du visage, iris compris.

OpenCV

Lecture vidéo, espaces de couleur, résolution PnP, rendu annoté.

ONNX Runtime · Google Colab

Inférence optimisée sur processeur ; entraînements sur GPU.

Rapport

Le cahier des charges, la gestion de projet et le détail de chaque bloc.