La souris oculaire




Lorsqu'on travaille sur écran d'ordinateur,

  • on cherche des yeux la zone de l'écran qui nous intéresse,
  • puis on bouge le bras pour amener la souris sur la zone visée,
  • puis on clique sur cette zone.

Si on travaillait avec un vrai ordinateur, comme dans les films, 

  • on regarderait un point de l'écran
  • et la souris viendrait se positionner toute seule sur ce point.

La souris oculaire, c'est quand l'oeil positionne la souris. 



Comment un ordinateur pourrait deviner le point de l'écran que je regarde ?

Il faudrait qu'il puisse me regarder, regarder mes yeux, avec une caméra !
 
    On fait toujours ça, nous, quand on discute avec quelqu'un : on regarde ses yeux, et on sait où il regarde !

On trouve, sur le marché, des dispositifs opérationnels, mais à des prix exorbitants

    Aucune solution pour un utilisateur de base.

Les yeux sont mobiles, rapides, bien visibles.
Comment les utiliser pour communiquer avec l'ordinateur ?

Au départ, voici 10 ans, nous avons cherché à résoudre la totalité du problème.
    Nous avons créé un outil de laboratoire, délicat, qui nous a permis d'avancer.

        Merci à Pierre Christiaen, Vincent Royal et Dominique Szymik !

Un certain nombre de problèmes techniques ont été résolus, des choix de base ont été faits :
Un certain nombre de problèmes ont été provisoirement écartés :
La question intéressante, dans ce problème, c'est :
La caméra donne une image où je vois une pupille.
Comment, à partir de cette image, retrouver le point de l’écran visé par l’œil ?

C’est l’objet principal de ce document.

Maintenant, pourquoi notre système n'est pas encore vendu dans les hypermarchés ?

C'est l'objet de la fin de ce document.

Le problème principal est donc celui-ci :

Soit une image de 500 pixels (en horizontal) sur 255 pixels (en vertical). On y trouve une petite ellipse

    Ceci est effectivement obtenu avec une bonne intensité lumineuse et les réglages adaptés.

Que peut-on en déduire ?
    La forme et la position de l'ellipse donnent presque toutes les informations.

Le principe du calcul.

Voici le schéma global.


Le coeur du calcul va consister à
  • Trouver l'équation de l'image de la pupille, sur la CCD.
  • En déduire l'équation du cône elliptique.
  • Trouver un cercle inscrit dans le cône elliptique
En fait, pour une position donnée de l'oeil, on trouve 2 cercles possibles (par raison de symétrie).
On trouve un truc pour sélectionner la solution répondant au problème.
Il reste à trouver un dernier truc pour déterminer la position de l'oeil, et c'est (presque) fini.

                On suppose que les rayons lumineux traversent le centre optique suivant une ligne droite.
                Il ne sera pas compliqué d'apporter le terme correctif quand il le faudra.

Etape préliminaire : Calibrage de la caméra.

Avant de commencer, il faut avoir calibré la caméra. Voici ce que cela signifie :
Il y a l’espace dans lequel nous évoluons, ramené à un référentiel noté W (World).
Dans notre cas de souris oculaire, on choisit un référentiel W lié à l’écran (cf. schéma)

           
Il y a l'espace "Caméra" qui a sa propre organisation :
  • La caméra a un axe optique : c'est l'axe optique du jeu de lentilles de l'objectif.
  • Sur l'axe optique est situé le Centre optique,Ω, quelque part à l'intérieur des lentilles.
  • Perpendiculaire à l'axe optique, à l'intérieur de la caméra, on a le plan de la CCD, qui enregistrera l'image.
  • Ce plan est constitué d'un damier de cellules CCD, physiquement rangées en horizontal et en vertical.
Le référentiel Caméra sera tout naturellement organisé ainsi :
  • Origine : Ω, centre optique.
  • Axes Ωx et Ωy : respectivement parallèles aux rangées horizontales et verticales des cellules CCD
  • Axe Ωz : c'est l'axe optique de la caméra

Problème : je connais un point (ses 3 coordonnées) dans le référentiel W.
           Quelles sont ses coordonnées dans le référentiel
Ω ?
Et inversement : je connais un point de
Ω ; quelles sont ses coordonnées dans W ?

Heureusement nous ne sommes pas les premiers à rencontrer le problème,
    et nos prédécesseurs ont mis au point plusieurs techniques du Calibrage de caméras.
Nous avons suivi la technique de Tsaï (explications et logiciel disponibles sur Internet).

La mise au point du banc de calibrage nécessite un matériel haut de gamme,
            ou plus prosaïquement une patience à toute épreuve.
Il faut fabriquer une mire (une simple matrice de points, imprimée sur imprimante laser, suffit)
Cette mire doit être photographiée en deux positions différentes, A et B, non parallèles.
Chaque point de la mire nécessite la saisie de 10 nombres :
Cela ne se fait pas en 10 minutes.
Et surtout, quand c'est fini, on ne bouge plus la caméra tant le calibrage (artisanal) est une opération démente.

Il faut reconnaître qu'après calibrage, on peut effectuer des mesures avec une précision époustouflante !

Dans notre cas, le calibrage a renvoyé :
Table 1 : Paramètres intrinsèques : Table 2 : Paramètres extrinsèques :
Ncx =  500    nbre de capteurs sur une ligne
Nfx =  500    nbre de pixels sur une ligne
dx  =      0.009315 mm    largeur pixel
dy  =   -0.01260000 mm    hauteur pixel ; signe pour référentiel direct
dpx =    0.00980000 mm    largeur pixel effective
dpy =    0.01260000 mm    hauteur pixel effective
Cx  =  246.95929665 pix    abscisse pixel de W’, centre optique de la CCD
Cy  =  128.18030740 pix    ordonnée pixel de W’, centre optique de la CCD
f   =   28.74428022 mm    distance focale de l’objectif
kappa1 =  -0.00000306    coefficient de correction de lentille 1er degré
Tx  =   90.32921716 mm     vecteur de translation 
Ty  =   47.03282722 mm    entre World et Oméga
Tz  =  -215.03563304 mm
r1  =    +0.98316820  
   matrice 3x3 de rotation 
r2  =    -0.07248719    pour passer de W à Oméga
r3  =    -0.16770777
r4  =    +0.00931638
r5  =    +0.93662334
r6  =    -0.35021412
r7  =     0.18246505
r8  =     0.34275696
r9  =     0.92153360

Il est clair que ces paramètres n'ont de valeur que dans notre configuration
Ils sont donnés pour permettre d'accompagner numériquement le traitement présenté.




Pour passer des coordonnées W aux coordonnées 
Ω, voici la formule :
    (il s'agit d'une rotation, suivie d'une translation)


Les coordonnées homogènes donnent le même résultat en un produit unique :


Géométrie de la pupille : une ellipse.

Le pourtour :

Une fois le calibrage de la caméra effectué, on peut retourner à l'image de l’ellipse :


Coordonnées des points de pourtour de l’ellipse.
        Chaque point du pourtour de l’ellipse est repéré par ses 2 coordonnées : x-pixel et y-pixel
Les pixels n’étant pas carrés, il faut convertir les coordonnées en millimètres.
L'origine des axes n'est pas le pixel en haut à gauche mais Ω’, pied de l'axe optique sur la CCD.
                    (le constructeur de la caméra ne peut pas garantir
                    que l’axe optique de la caméra passe par le centre géométrique de la CCD.
                    La position de Ω a été déterminée lors du calibrage.)
D'où un premier changement de repères.

Changement de repères : Pixels vers
Ω.
    (les diverses variables proviennent du calibrage)

Schéma : Référentiels Pixels et Ω’ orthonormé.

Chaque point du pourtour de l'ellipse peut donc être exprimé dans le référentiel
Ω
’.

    On suppose ici que la caméra est de type "Sténopé" : les rayons lumineux traversent le centre optique en ligne droite.
    En pratique, l'objectif utilisé peut nécessiter un ou plusieurs termes correctifs (variable kappa1 dans Tsaï).
    Si c'était le cas, il faudrait ici créer une image corrigée de la CCD avant de passer à la suite.

L'équation de l'ellipse.

Connaissant les points du pourtour de l'ellipse,
    quelle est l'équation de l'ellipse qui coïncide au mieux avec l'ellipse visible ?

Deux méthodes sont possibles :
(voir détails) Voici les résultats pour chaque méthode :

et les ellipses en résultant :


        Par la suite, nous aurons l'occasion de constater que la technique par inertie est plus robuste.
        Nous continuons ici avec les résultats fournis par cette méthode.

Le cône elliptique.

Il faut maintenant travailler dans l'espace ;
Les points du pourtour de la pupille (réelle) et le centre optique de la caméra forment un cône elliptique.
Ce cône trace sur la CCD le pourtour de l'image de la pupille.



Cette équation du cône elliptique donne une information importante, car le pourtour de la pupille (réelle) appartient à ce cône.

On passe ainsi d'une équation dans l'autre :
Equation de l'ellipse dans le plan de la CCD Equation du cône elliptique dans le référentiel Ω
Application numérique :
   

On est un peu déçu : on aurait rêvé de trouver une formule qui évoquait mieux l'ellipse :
    ax² + by² = constante

En fait, cette formule du cône elliptique est donnée dans un référentiel qui n'est pas l'idéal pour le cône elliptique.
On voudrait changer une nouvelle fois de référentiel, pour obtenir une équation "normalisée"
 
A l'époque où il y avait moins d'un ordinateur par km², ce problème avait une belle solution théorique :
    Diagonalisation de matrices par "Valeurs propres" et "Vecteurs propres".

Maintenant, cette solution théorique est devenue une technique banale

L'équation
 
               
peut s'écrire ainsi :
           

Dans l'espace "normalisé" cherché, cette équation deviendra :
            

La diagonalisation de la matrice de l’équation de départ va fournir :
Voir le détail de ces transformations.

En résumé :

Equation du cône dans le référentiel N :

Orientation du cercle générateur

On connait maintenant l'équation du cône elliptique dans un référentiel clairement identifié.
On se souvient que la pupille (réelle) est un cercle directeur de ce cône (le cône s'appuie sur le contour de la pupille)




Pour mieux comprendre la suite, supposons un cône sphérique positionné verticalement, et une pièce de monnaie.
La pièce de monnaie tombe dans le cône :
Au fur et à mesure que la pièce descend, les parois se resserrent.
A chaque niveau du cône, le plan horizontal forme une ellipse.
La pièce sera bloquée lorsque son diamètre deviendra égal au grand diamètre de l'ellipse.
La pièce pourra ensuite pivoter et venir toucher la paroi de l'ellipse. Il y aura deux positions limites.
Dans ces positions limites, la pièce devient "Cercle directeur".


Nous cherchons d’abord un cercle directeur. Nous nous situons dans le plan perpendiculaire à l’axe
ΩzN, situé à une distance unitaire du centre optique Ω. Nous utilisons alors le grand axe de l’ellipse comme charnière. Il arrive un moment où le plan sécant coupe le cône selon un cercle.



Dans le plan yNΩzN , cela se traduit ainsi :

 (avec l'hypothèse où 
ΩM = 1)

PQ est le petit axe initial ;
la droite PQ pivote autour de M pour donner P'Q'.
On arrête la rotation lorsque le petit axe P'Q' devient égal au grand axe de l'ellipse.

Soit M', le milieu de P'Q' ; dès que P'Q' n'est plus confondu avec PQ, M' n'est plus confondu avec M.

En conséquence le grand axe de l'ellipse découpée dans le cône par le plan pivotant n'est plus le grand axe initial.

Voici une façon de mener le calcul :


Discussion sur le résultat.

Nous sommes parti avec l'hypothèse d'une charnière située à une distance unité de Ω.
Toutes les solutions obtenues par homothétie de centre 
Ω sont également acceptables.
Les vecteurs directeurs de toutes les solutions homothétiques sont identiques.

Il y a deux familles de solutions symétriques :
        celle obtenue avec l'angle θ positif, et celle obtenue avec θ négatif.

Pour lever l'ambiguïté de la symétrie, il faut faire appel à des solutions externes.

Dans notre application d'origine, le cercle est une pupille ;
La caméra est située en contrebas, et la pupille regarde plus haut que la caméra.
Le haut de la pupille est donc plus éloigné de la caméra que le bas de la pupille.

On choisit donc un pixel du pourtour sur la partie haute de l'ellipse.
On calcule les coordonnées de ce point dans les différents référentiels (
Ω', puis Ω et enfin N)
Dans ce référentiel N, c'est sa coordonnée
yN qui va apporter la solution.

Si cette coordonnée est positive, on sera dans le cas A.
Si cette coordonnée est négative, on sera dans le cas B.


Report des informations dans le référentiel W(orld)

Les informations précédentes sont connues dans le référentiel Normalisé.
Il reste à les reporter dans le référentiel absolu.
Voici les matrices de passage :





Ces calculs sont-ils corrects ?

Pour valider ces calculs, nous avons effectué des simulations :
Les résultats sont décevants : ils sont visibles ici.
Oublions les résultats issus des calculs de l'équation de l'ellipse par régression :
La technique par inertie est incomparablement meilleure !

Voici deux résultats intéressants :
Ces résultats se lisent ainsi :
            En abscisse, quel est l'angle (en degrés) entre le regard vers la caméra et le regard vers le point désigné de l'écran ;
    les résultats sont catastrophiques quand cet angle devient petit : l'ellipse devient un cercle !
En ordonnée, quel est l'angle (en degrés) entre le regard vers le point théorique et le regard vers le point calculé ;
    les résultats, pour la pupille raisonnable de diamètre 4 mm, sont vraiment tristes !



                (Résultat intéressant : avec 2 caméras, il sera possible d'évaluer la distance caméra-oeil)
Ce matériel, conçu voici 10 ans, permettait de capter l'image binaire de la pupille (blanc ou noir), dans un rectangle d'environ 40 sur 30 pixels.
Le dernier graphique correspond à une capture de pupille dans un rectangle d'environ 160 sur 120 pixels, et le résultat devient satisfaisant.
D'où la solution simpliste : attendre l'arrivée de caméras de 2500 pixels.

On peut tenter de contourner la difficulté :
Le bruit, évident sur les graphiques, est un bruit de binarisation :
       si un pixel noir devient pixel blanc, le point du regard calculé se décale sensiblement.
La solution est de prendre en compte, en niveaux de gris, les pixels en périphérie de la pupille.
  • Notre matériel ne sait pas le faire : il binarise automatiquement.
  • Actuellement, le matériel commercialisé peut le faire, sans problème.