23
janvier
Par

Vous avez dit Eye Tracking ?

C’est le projet de recherche technologique qui a retenu notre centre d’intérêt au cours des derniers mois. Nous avons élaboré et développé un programme Matlab capable d’identifier, de suivre et de mesurer la position des yeux en vue d’assurer le déplacement du curseur par ces derniers.

L’oculométrie (en anglais « Eye-Tracking » ou « Gaze-Tracking ») regroupe un ensemble de techniques permettant d’enregistrer les mouvements oculaires. Les méthodes de détection de contour, de segmentation, de classification et d’apprentissage utilisent des outils mathématiques complexes (intégrodifférentiel, image intégrale, histogramme d’orientation de gradient, transformé de Hough). Ils nous ont cependant permis de réaliser notre objectif avec comme seul matériel notre webcam et le logiciel Matlab, moins coûteux que la plupart des systèmes de Tracking sur le marché.

Comment ça marche ?

Une vidéo est acquise par la Webcam avec un frame rate défini par la durée de traitement du logiciel d’oculométrie et est transformé en niveau de gris. Pour chaque image acquise, il faut dans un premier temps segmenter l’image pour définir la région d’intérêt et alléger le processus de traitement (inclue des outils mathématiques chargés). On passe donc par une étape intermédiaire de détection du visage pour rendre la détection des yeux plus facile. C’est la partie la plus complexe du travail et c’est ici que les disparités entre les méthodes utilisés sont les plus importantes. Une fois les yeux détectés, on passe en revue les différentes zones de l’écran (une étape de calibration est complétée au préalable) pour déterminer la direction du regard et définir la position du curseur. Les phases indispensables à cette étude sont énumérées ci-dessous :

• Détection du visage :

On utilise la méthode de Viola Jones. Elle nous permet d’analyser une image sans avoir à étudier chacune de ses pixels. En effet, l’image de départ est parcourue par une fenêtre glissante de taille 24×24, et classe chaque sous-image en ‘visage’ ou ‘non visage’ par la validation ou non de plusieurs caractéristiques (environs 160 000) avec la cascade du classificateur. Ces caractéristiques dites « pseudo-Haar » sont en réalité des masques permettant de détecter des motifs. La reconnaissance du visage est donc rendue possible grâce aux variations de l’intensité lumineuse sur chaque zone. Par exemple entre :

• les yeux et le nez (caractéristique n°2)

• les yeux et les pommettes (caractéristique n°3)

En sortie on reçoit une matrice NxM [1×4] avec :

N : nombre de visage

M : 1 : position X de l’origine du rectangle contenant le visage

2 : position Y de l’origine du rectangle contenant le visage

3 : Largeur du rectangle contenant le visage

4 : Hauteur du rectangle contenant le visage

Estimation de la position des éléments du visage:

Pour réduire encore le temps de calcul et améliorer la précision de la détection du centre de la pupille ainsi que les autres éléments du visage, nous avons défini des surfaces dans lesquelles devraient se trouver les yeux, le nez et la bouche dans le visage. En effet sauf cas exceptionnel, les visages humains ont des proportions relativement identiques. Ainsi, en fonction du point d’origine du rectangle contenant le visage, on peut définir des surfaces dans lesquelles seront contenues les yeux, le nez et la bouche.

La recherche des points milieux des pupilles se feront donc seulement dans les box des yeux.

Détection des yeux et de l’iris :

Pour chercher les coordonnées du centre de la pupille et de l’iris (ainsi que leurs rayons), nous avons choisi une méthode hybride parmi les nombreuses méthodes énumérées dans notre étude bibliographique. Elle a été développée par Canny et Wilde et s’appuie sur les travaux de J. Daugman : dans sa méthode de détection des contours circulaires, il approxime les frontières de l’iris par deux cercles non concentriques. La méthode consiste en :

• Seuillage de l’image pour supprimer les réflexions (via commande imfill Matlab)

• Recherche des minimaux par rapport aux voisins locaux (3s). Ces points seront les potentiels centres des pupilles

• On supprime les points dont les coordonnées sont proches des bords (ils ne peuvent donc pas être le centre de l’iris)

• On calcule les dérivées partielles des lignes intégrales normalisées (coarse-to-fine) selon la méthode de Daugman basée sur le fait que les valeurs d’intensité sur les bords de l’iris changent. Les variations entre les frontières interne et externe de l’iris sont censées maximiser la dérivée partielle radiale de l’intégrale du contour.

A la fin du traitement, on en déduit les paramètres ‘ci’ et cp’ :

Cp : [xp,yp,r] : position x et y du centre de la pupille ainsi que son rayon.

Ci : [xc,yc,r] : position x et y du centre de l’iris ainsi que son rayon.

La méthode de Camus&Wilde étant très gourmande en temps et puissance de calcul, on ne l’effectue qu’une seule fois.

Tracking des yeux :

Une fois la position des pupilles définies, lors des prochaines acquisitions d’image par la caméra, on va chercher à retrouver ces dernières en faisant la différence absolue des pixels en niveau de gris contenus dans la nouvelle image par rapport à la première déjà traitée (image origine). Pour chaque point x,y de la nouvelle box contenant les yeux, on va soustraire la valeur de l’intensité des points contenue dans le cercle représentant la pupille de notre image de référence. Parmi les résultats (au total x*y), le plus faible (point le plus en haut à gauche du cercle) sera considéré comme étant les nouvelles coordonnées de la pupille.

• Calcul de la position du curseur dans l’image :

Matlab est un logiciel qui n’agit pas en dehors de son environnement (figures et fenêtre de travail) mais reste une plate-forme très ouverte qui inclue des fonctions en C (fichiers Mex), ou classes Java. Or Java possède la classe Robot.class qui est parfaitement adaptée à notre problème grâce à ses fonctions. Il faut ensuite des conditions précises pour faire la correspondance et bien utiliser la fonction mouseMove :

Dans un premier temps, il nous a fallu faire l’ajustement entre la taille de l’écran et celle de la fenêtre de notre image (les deux repères ne coïncidant pas). Cet étalonnage est nécessaire pour faire correspondre les coordonnées renvoyées par le système à la position de la souris. Partant de ce constat, nous avons donc estimé le rapport de proportionnalité entre la taille de l’écran, celle de l’image affichée et la position de l’œil:

Cette formule s’est avérée être suffisamment adaptée à notre algorithme pour réussir à faire bouger la souris en fonction des positions x et y de l’œil sans aucune calibration. Cependant, afin de renforcer ce concept, nous avons choisi de diviser la taille de l’écran en quatre grandes zones. Les coordonnées du regard correspondant à chaque coin de l’écran sont ensuite enregistrées dans une matrice (DBR) où on va déduire les valeurs des dx max et dy max entre la position du regard au centre et celle des points limitant le périmètre de l’écran. Il a suffi alors d’avoir la taille et les coordonnées de chaque coint pour obtenir celled des bords de l’écran.

Enfin, pour obtenir un parfait déplacement de la souris en fonction du suivi du regard et perfectionner notre programme nous avons décidé de mettre en place un réseau de neurone qui consiste à apprendre à l’ordinateur où se trouve le regard sur l’écran.En lançant la commande « nnstart » sur Matlab, on peut utiliser sa Toolbox Neural Network. Selon le problème à résoudre, Matlab propose 4 types de modèle sur les réseaux de neurones. Chaque modèle respecte les étapes de mise en œuvre standard d’un réseau de neurones :

1. Acquisition des données

2. Création du réseau de Neurones (RNA)

3. Configuration du RNA

4. Initialisation des poids et biais

5. Apprentissage du RNA

6. Validation du RNA

7. Rapport et résultat du RNA

Il suffit ensuite de créer la matrice à mettre pour les « inputs » et « targets » afin de pouvoir l’utiliser. Nous avons donc créé un programme permettant de convertir 9 images (chaque image correspondant à un point de l’écran où doit se trouver la souris) de notre database en .mat (matrice).

Une amélioration de notre système d’Eye-Tracking est bien entendu possible mais la précision actuelle est très acceptable compte tenu de la quantité de travail fournie, de notre niveau d’expérience et du temps passé sur ce projet. En plus d’avoir appris à créer des interfaces graphiques, la mise en œuvre de la Toolbox RNA ou encore les fonctions de traitement d’image, les différentes méthodes (transformée de Hough par exemple) utilisées durant la programmation nous ont permis de mieux élargir nos connaissances sur Matlab. Bien que n’ayant pas exposé tous les programmes testés au cours du projet, la documentation ainsi que la bibliographie que nous avons faite reste un plus pour une future réalisation.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués par un *