JournalLa vue

Il me reconnaît : comment un visage devient une empreinte

Log
4 sur 28
Date
Lecture
3 min de lecture

Compétences de ce log

La première vraie compétence que je voulais était la plus simple à dire : quand je m’assois, le robot sait que c’est moi.

Dans la machine

Reconnaître se fait en deux temps, par deux petits modèles open source d’OpenCV.

  1. Trouver le visage. Le premier modèle, YuNet, regarde l’image de la caméra et dessine une boîte autour de chaque visage.
  2. Changer le visage en empreinte. Le second, SFace, prend ce qu’il y a dans la boîte et le transforme en une liste de 128 nombres. Deux photos de la même personne donnent deux listes qui pointent à peu près dans la même direction. Deux personnes différentes donnent des listes qui pointent ailleurs.

Pour comparer deux listes, on mesure l’angle entre elles. Le résultat, qu’on appelle un cosinus, va de 0, rien en commun, à 1, identiques. OpenCV propose un seuil de 0,363 : au-dessus, même personne.

Le robot ne garde donc pas ma photo pour comparer des pixels. Il garde quelques empreintes de mon visage, et compare chaque nouvelle empreinte à celles-là.

À ce stade, les modèles tournaient sur mon Mac, nourris par la caméra du robot. Les installer sur le robot est venu ensuite.

L’enrôlement : lui apprendre mon visage

Pour enrôler, le programme me regarde pendant une minute et garde les bonnes images.

Le premier essai a raté net : il faisait nuit, et la pièce était dans le noir. Luminosité moyenne de 6 sur 255, aucun visage trouvé. Désormais, le programme dit « image trop sombre » dès la première vue, au lieu d’échouer en silence.

Lumière allumée, il a gardé 14 images sur 32 vues. Puis un contrôle que j’aime bien : il compare les images gardées entre elles. Dix se ressemblaient bien. Quatre ressemblaient à moins de la moitié des autres, je les ai retirées. Mon visage, ce sont maintenant dix empreintes.

Ce que les chiffres ont dit

Un essai à mon bureau, assis à environ un mètre, à la lumière du bureau :

Mesure Résultat
Images avec un visage 184
Verdicts « c’est moi » 180
Les quatre autres toutes pendant que je sortais du champ
Score médian 0,556, pour un seuil de 0,363
Délai entre l’image et le verdict 20 ms en médiane, sur le Mac

Ce qui m’a surpris

Ensuite, je me suis levé, à un mètre et demi ou deux. Le score médian est tombé à 0,28, sous le seuil. Le robot ne me reconnaissait plus.

Ma première idée était la taille : un visage plus petit, moins de pixels. Faux. J’ai réduit mes images d’enrôlement à la même petite taille, elles donnaient encore 0,75. Assis puis debout à la même distance : 0,42 contre 0,34. La différence, c’est le point de vue : debout, la caméra voit mon visage par en dessous, et mes empreintes avaient toutes été prises de face.

Il y a une deuxième leçon là-dedans. La caméra est dans la tête du robot. Quand la tête tourne, mon visage se déplace dans l’image, mais son angle ne change pas. Pour lui apprendre d’autres angles, c’est moi qui dois tourner.

La suite

La reconnaissance marchait au bureau. Il fallait maintenant que le robot me trouve quand je n’étais pas en face de lui, et qu’il le fasse sans le Mac.

Read in English