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.
- Trouver le visage. Le premier modèle, YuNet, regarde l’image de la caméra et dessine une boîte autour de chaque visage.
- 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.
