Comment nos téléphones reconnaissent nos visages
Nos visages peuvent maintenant être détectés par des caméras dans la rue, dans les aéroports, dans les magasins. Facebook est maintenant capable de reconnaître nos visages dans toutes les photos. Ça peut sans doute nous effrayer lorsqu’on ne connaît pas le fonctionnement de cette technologie.
Dans cet article, nous allons démystifier la reconnaissance faciale, qui n’est qu’une série de tâches et de processus, comme tout autre algorithme informatique. Quand nous parlons d’intelligence artificielle, nous parlons généralement de machine learning et de deep learning, des domaines permettant à la machine de s’entraîner à comprendre les relations entre les pixels de l’image.
La reconnaissance d’une personne passe par les étapes suivantes :
1 – Détection des visages dans l’image.
2 – Positionnement des visages dans un alignement commun.
3 – Détection des caractéristiques qui rendent chaque visage différent des autres.
4 – Comparaison de ces caractéristiques avec les caractéristiques des visages déjà classés dans la base de données pour reconnaître l’identité de la personne.
Nous sommes capables de passer par ces étapes très rapidement dans nos cerveaux, de manière intuitive. Par contre, pour les machines, chaque partie doit être implémentée.
Nous allons maintenant expliciter chaque étape indépendamment. Il faut noter que la sortie de chaque étape sera passée à l’étape suivante comme entrée.
1 – Détection des visages
A cette étape, dans chaque image, le système détecte les pixels qui constituent un visage, pour les transformer en une petite image et les envoyer à l’étape suivante.
Pour cela, nous allons utiliser une méthode appelée HOG, Histogram of Oriented Gradients, qui permet de trouver des contours dans une image en noir et blanc.
Le premier pas de cette méthode est la conversion des images en noir et blanc ; puis, pour chaque point de l’image, l’algorithme trouve la direction pour laquelle la luminosité des points aux alentours est la plus réduite. Si ces directions sont représentées comme des flèches, aussi appelés gradients, nous aurons une image qui représente la distribution de l’intensité du gradient.
La raison pour cela n’est pas aléatoire. Nous pouvons avoir des photos de nous-mêmes avec des luminosités différentes, mais la mesure de l’intensité des points autour de notre visage reste la même.
Des chercheurs ont trouvé la représentation du histogramme des gradients la plus commune et générale entre tous les visages. Pour trouver les visages dans nos images, on doit juste trouver les zones qui ressemblent le plus à cette représentation des gradients des visages.
2 – Représentation des visages dans un alignement et angle commun
Les visages que nous avons détectés à l’étape précédente peuvent avoir des orientations différentes, ce qui rend la tâche de reconnaissance de l’identité très difficile pour un algorithme, vu l’infinité des angles possibles pour chaque visage.
Une étape importante est la modification de la direction des images, pour avoir un alignement commun à tous les visages. Ceci implique la détection des yeux, du nez, de la bouche et des contours du visage, afin de bien les aligner. Complexité en plus…ou pas.
La méthode utilisée à cette étape est la détection d’un groupe de 68 points dans les visages, points qui tracent la majorité des contours d’un visage. Ces points sont détectés par un modèle de machine learning qui est entraîné pour cette tâche.
Maintenant que ces points sont détectés sur le visage, on n’a plus qu’à effectuer des découpages et des rotations pour avoir le bon alignement du visage.
3 – Détecter les caractéristiques qui rendent chaque visage différent de l’autre :
Pour cette étape, on utilise des images avec les visages alignées et centrées, le résultat de l’étape précédente.
L’approche la plus simple est de comparer chaque visage directement avec tous les autres visages de la base de données jusqu’à trouver le visage qui y ressemble le plus. Très simple et efficace…pour une petite base de données. Ensuite se pose le problème de la scalabilité ; par exemple, dans le cas de Facebook, plateforme avec deux milliards d’utilisateurs, comparer une image avec le reste de la base de données dans un temps acceptable à chaque fois qu’une photo est rajoutée n’est pas une solution acceptable.
Une autre méthode est de reconnaître les visages à travers des mesures comme la hauteur des oreilles, l’espacement des yeux, etc. Le problème avec cette approche est que ces mesures peuvent paraître naturelles pour nous, mais elles ne le sont pas pour un ordinateur, qui n’interagit qu’avec les pixels d’une image. On peut alors expérimenter avec d’autres approches de ce type, mais il s’est avéré que le mieux c’est de laisser l’ordinateur choisir ses propres mesures, sans intervention humaine. Nous sommes alors dans le domaine du deep learning.
En utilisant un type de réseaux de neurones connu sous le nom de réseau de neurones convolutionnel, nous allons entraîner l’algorithme pour créer un vecteur de 128 dimensions, qui comportera les informations de chaque visage.
A la fin de cet entraînement, les mesures générées par le modèle de réseaux de neurones sont très proches pour les visages d’une même personne d’une image à l’autre.
Nous pouvons nous poser la question, que signifie chaque mesure ? Nous ne savons pas, seule la machine peut le comprendre.
4 – Identifier la personne :
Cette étape est maintenant simple : pour chaque image que nous recevons, nous allons utiliser un modèle de machine learning pour comparer les 128 mesures de chaque visage avec les mesures des autres visages enregistrées et identifiées dans notre base de données. Tout modèle de classification (SVM ou autres) peut convenir à cette étape.
Pour ceux qui veulent aller plus loin, ces étapes sont explicitées avec des détails techniques, ainsi que des scripts pour les tester dans cet article.
En résumé, la détection faciale et la reconnaissance des personnes passent par ces quatre étapes, avec quelques variations selon les besoins et le cas d’usage. La précision des algorithmes peut atteindre 98%, au même niveau que l’être humain, et elle ne cesse de s’améliorer.
Cette technologie nous permet de détecter le nombre de visages dans une image, d’identifier la personne et de faire de l’analyse des sentiments de la personne. Elle ouvre la voie vers des applications dans les domaines de la sécurité, des réseaux sociaux ou du marketing.
Si vous souhaitez utiliser des modules de reconnaissance des visages dans votre application, le projet ZeVision met à disposition une API open source qui permet aux développerus de créer, modifier et utiliser des modèles facilement. L’analyse des sentiments et la détection d’objets sont également disponibles. Le projet est disponible ici : https://github.com/zenika-open-source/zevision (contributers wanted!)
“Super article et très instructif! Aymeric Inpong”