Brève description
La différence entre le visage d'une personne réelle et un faux dans une caméra est toujours l'un des problèmes les plus difficiles dans les systèmes de contrôle et l'accès aux locaux. Un algorithme est proposé pour détecter le clignotement des yeux en temps réel dans une séquence vidéo à partir d'une caméra standard, ce qui nous donne le fait que la personne dans la caméra est réelle. Les derniers détecteurs de repère, formés sur des ensembles de données sur le terrain, montrent une excellente résistance à l'orientation de la tête par rapport à la caméra, aux conditions d'éclairage changeantes et aux expressions faciales. Nous montrons que les points de repère sont détectés avec suffisamment de précision pour estimer de manière fiable le niveau d'ouverture des yeux. Ainsi, l'algorithme proposé estime la position des points de repère, extrait un scalaire - rapport du fond d'œil (EAR) - caractérisant l'ouverture de l'œil dans chaque image. Finalement,le classificateur SVM détecte le clignotement des yeux comme un modèle de valeurs EAR dans une courte fenêtre de temps. L'algorithme simple surpasse les résultats modernes sur deux ensembles de données standard.
Bibliothèque Dlib
Dans cet article, j'utilise les index faciaux pour les régions du visage dlib . Le détecteur de repère facial implémenté à l'intérieur de la bibliothèque dlib produit 68 coordonnées (x, y) qui sont mappées à des structures faciales spécifiques. Ces mappages de 68 points ont été obtenus en entraînant le prédicteur de forme sur l' ensemble de données étiqueté iBUG 300-W .
Ci-dessous, nous pouvons visualiser à quoi chacune de ces 68 coordonnées est mappée: Figure 1 - Rendu de chacun des 68 points de coordonnées faciales de l'ensemble de données iBUG 300-W En examinant l'image, nous pouvons voir que les régions faciales sont accessibles via une simple indexation Python ( en supposant zéro indexation avec Python car l'image ci-dessus est une indexée):
- La bouche est accessible par les points [49, 68].
- Sourcil droit passant par les points [18, 22].
- Sourcil gauche à travers les points [23, 27].
- L'œil droit à travers les points [37, 42].
- L'œil gauche passe par les points [43, 48].
- Le nez à travers les pointes [28, 36].
- Et la mâchoire à travers les points [1, 17].
Comprendre la proportion oculaire (EAR). Nous pouvons appliquer la détection des points de repère du visage pour localiser des zones importantes du visage, y compris les yeux, les sourcils, le nez, les oreilles et la bouche:
Figure 2 - Détection en temps réel des points de repère du visage dans une image
Cela implique également que nous pouvons extraire certaines structures du visage en connaissant les indices de certaines parties du visage:
Figure 3- Application de repères faciaux pour localiser différentes zones du visage, à savoir l'œil et la bouche droits
Détection des clignotements
En termes de détection des clignements, nous ne nous intéressons qu'à deux ensembles de structures faciales - les yeux. Chaque œil est représenté par 6 coordonnées (x, y) commençant au coin gauche de l'œil (comme si vous regardiez une personne) puis travaillant dans le sens des aiguilles d'une montre autour du reste de la zone:
Figure 4-6 points de repère faciaux associés à l'œil
Basé sur Dans cette image, nous devons ramasser à un point clé: il existe une relation entre la largeur et la hauteur de ces coordonnées. En nous appuyant sur les travaux de Soukupova et Cech dans leur article de 2016 «Détecter le clignotement des yeux en temps réel à l'aide de repères faciaux», nous pouvons ensuite dériver une équation qui reflète cette relation, appelée Rapport hauteur / largeur des yeux (EAR):
Figure 5 - Equation de proportion des yeux
où p1,…, p6 sont des repères 2D sur le visage. Le numérateur de cette équation calcule la distance entre les points de repère de l'œil vertical, tandis que le dénominateur calcule la distance entre les points de repère de l'œil horizontal, en pesant le dénominateur en conséquence, puisqu'il n'y a qu'un seul ensemble de points horizontaux, mais deux ensembles de points verticaux.
Eh bien, comme nous le savons, le rapport hauteur / largeur de l'œil est à peu près constant lorsque l'œil est ouvert, mais tombe rapidement à zéro lorsque le clignotement se produit. En utilisant cette
équation simple , nous pouvons éviter les techniques de traitement d'image et nous fier simplement au rapport entre la distance et le point de vue de l'œil pour déterminer si une personne clignote. Pour le rendre plus clair, considérez la figure suivante:
Figure 6 - Visualisation des repères oculaires
Dans le coin supérieur gauche, nous avons un œil complètement ouvert - le rapport hauteur / largeur ici sera grand ® et relativement constant dans le temps. Cependant, dès qu'une personne clignote (en haut à droite), le rapport hauteur / largeur de l'œil diminue considérablement, se rapprochant de zéro. La figure du haut montre un graphique du rapport hauteur / largeur d'un œil pour un clip vidéo. Comme nous pouvons le voir, le rapport hauteur / largeur de l'œil est constant, puis tombe rapidement à près de zéro, puis augmente à nouveau, ce qui indique un clignotement.
Figure 7 - Détection des yeux fermés
Des exceptions
Cependant, en raison du bruit dans le flux vidéo, des faibles taux de détection des points de repère du visage ou des changements rapides d'angle de vision, un simple seuil du rapport hauteur / largeur de l'œil peut conduire à une détection de faux positifs, indiquant qu'un clignotement s'est produit lorsque le sujet ne clignait pas réellement des yeux. Comme nous le lisons dans un article médical, une personne clignote en moyenne 20 fois par minute, ce qui nous dit qu'elle clignote une fois toutes les 3 secondes.
Sur cette base, afin de rendre notre détecteur de clignotement plus résistant à ces problèmes, nous avons défini l'intervalle de temps avant de lire le clignotement, 3 secondes doivent s'écouler et au moins 3 images doivent être prises lorsque le clignotement est détecté. Les résultats de nos recherches ont donné de très bons résultats. Le détecteur a fonctionné exactement. Sur les vingt tests, dix-huit ont été testés positifs.
Les problèmes de cette approche
Il existe également des problèmes non résolus avec cette approche. Si vous montrez une vidéo sur la caméra par des moyens techniques qui montrent le visage d'une personne qui clignote, le système peut conduire à une détection de faux positifs. La solution à ce problème peut être réalisée à l'aide d'une paire d'images où, à l'aide de deux caméras, nous pouvons obtenir une carte de profondeur et calculer la distance à l'objet.
Résolution de problème
Cela montre le fonctionnement des caméras stéréoscopiques. Une fois les images rectifiées, une recherche est effectuée pour les paires de points correspondantes à partir des deux images. La manière la plus simple est illustrée à la figure 8 et est la suivante. Pour chaque pixel de l'image de gauche avec des coordonnées (x0, y0), un pixel est recherché dans l'image de droite. On suppose que le pixel sur l'image de droite doit avoir des coordonnées (x0 - d, y0), où d est une valeur appelée disparité. La recherche du pixel correspondant est effectuée en calculant le maximum de la fonction de réponse, qui peut être, par exemple, la corrélation des voisinages de pixels.
Figure 8 - Calculs de la carte de profondeur