03
Deep Scan — Système de reconnaissance faciale
Système complet associant base de données d'embeddings et recherche vectorielle optimisée avec FAISS : le visage est détecté avec MTCNN, encodé en vecteur par InceptionResNetV1 (FaceNet), et stocké dans une BDD. Les individus les plus proches d'une requête sont retrouvés en quelques millisecondes.
Recherche vectorielle en temps réel
Stack
Que s'est-il passé ?
- 01
La question
Quand j'étais petit j'étais fasciné par comment le téléphone de ma maman faisait pour reconnaitre son visage et le distinguait du mien. Mais j'ai commencé à faire de l'IA et j'ai eu ma petite intuition. Donc j'ai décidé de recréer le système. La question c'est donc : Peut-on créer un système complet de reconnaissance assez robuste pour identifier une personne uniquement à partir de son visage, sans étiqueter manuellement chaque image et résistant aux variations d'eclairage et de positons?
- 02
Le problème
Comparer des pixels est fragile : éclairage, angle et expression changent tout. Et comparer un visage à des milliers d'autres naïvement devient vite trop lent. L'IA existe pour nous simplifier la vie. (Merci les CNN)
- 03
L'hypothèse
Je pense que par un processus A ou B on devrait pouvoir enregistrer une version numérique de chaque visage (un vecteur d'embedding). Et on pourrait faire la même chose à un visage qu'on veut identifier. Ensuite une métrique de distance et le tour est joué. Le problème se réduit à une recherche de plus proches voisins dans un espace vectoriel.
- 04
Le build
Un pipeline : détection MTCNN -> encodage InceptionResNetV1 (FaceNet) -> indexation FAISS. Interface Streamlit pour enregistrer un visage et lancer une requête. Persistance des embeddings.
- 05
L'échec
Un peu de problèmes au début : un mode streaming qui avait des problèmes sur mon navigateur et mon visage qui devait être détecté, mais c'est celui de quelqu'un d'autre qui l'était. Pfff.... Il fallait aussi gérer la synchronisation de la base de données (où j'ai utilisé une méthode très originale).
- 06
La découverte
Une fois le visage centré et normalisé, les distances euclidiennes sont le meilleur choix et FAISS retrouve le bon individu. Il faut charger les vecteurs en mémoire une seule fois pour éviter de les recharger à chaque requête. Et même avec les lunettes le système reste stable.
- 07
Le résultat
Un système fonctionnel : enregistrement d'un individu, calcul de son embedding, et retour des personnes les plus proches d'une requête en temps réel.
- 08
La prochaine frontière
Détecter les imposteurs (LiveNess) ceux qui veulent tromper le système avec une photo ou un masque, passer à une base de données plus robuste, et gérer des bases de plusieurs millions de visages avec la quantification FAISS.
