L'API FACEID est conçue pour établir une infrastructure backend pour l'authentification des utilisateurs par la reconnaissance du visage. Cette API fonctionne en recevant un vecteur de représentation de visage (FRV) à partir d'un client distant, puis en vérifiant si ce FRV fourni correspond à un existant stocké dans la base de données. Sur la base de cette vérification, l'accès est accordé ou refusé au client.
L'API FACEID est accessible à tout client capable d'envoyer une demande HTTP. Développé à l'aide de Golang et suivant l'architecture de repos, l'API offre une flexibilité en termes de mise en œuvre du client. Les clients peuvent être développés dans n'importe quel langage de programmation et peuvent provenir de diverses plates-formes telles que le Web, le mobile ou le bureau. Cette capacité d'intégration transparente permet d'incorporer la fonctionnalité de reconnaissance faciale dans un éventail diversifié d'applications. Notamment, le processus d'obtention du FRV du client ne relève pas de la portée des responsabilités de l'API FACEID.
La documentation de l'API est disponible sur http://faceid.orionsoft.site/reference
Remarque: Vous pouvez utiliser les vecteurs situés sur Fichier vectors.json dans le répertoire racine de ce projet pour tester l'API. Ces vecteurs sont déjà stockés dans la base de données.
La reconnaissance du visage est une technologie qui consiste à identifier et à vérifier les individus en analysant et en comparant leurs caractéristiques faciales. Il s'agit d'un sous-ensemble d'identification biométrique, et il a diverses applications, y compris les systèmes de sécurité, l'authentification et le contrôle d'accès des utilisateurs. Voici un aperçu simplifié du fonctionnement de la reconnaissance du visage:
Détection du visage: La première étape consiste à localiser et à extraire les faces d'une image ou d'un cadre vidéo. Cela se fait à l'aide d'algorithmes de détection de visage, qui identifient les régions potentielles du visage dans les données d'entrée.
Alignement du visage: Une fois un visage détecté, l'algorithme peut effectuer un alignement du visage, garantissant que le visage est en position standardisée. Cela aide à normaliser les fonctionnalités pour une comparaison précise.
Extraction des caractéristiques: Il s'agit d'une étape cruciale où les caractéristiques distinctives du visage sont extraites et transformées en une représentation numérique. Ces caractéristiques peuvent inclure les distances entre les points de repère faciaux clés, les angles entre certains points et d'autres données qui peuvent différencier un visage d'un autre. Les techniques populaires pour l'extraction des caractéristiques comprennent les modèles binaires locaux (LBP), l'histogramme des gradients orientés (HOG) et, plus récemment, les méthodes basées sur l'apprentissage en profondeur.
Encodage des fonctionnalités: les caractéristiques extraites sont ensuite converties en une représentation compacte qui peut être facilement comparée aux autres représentations du visage. Cela implique souvent de réduire la dimensionnalité des caractéristiques tout en préservant leurs informations discriminatoires.
Base de données du visage: Dans votre scénario, vous auriez une base de données contenant les représentations (ou intégres) des utilisateurs autorisés. Cette base de données pourrait être créée en collectant et en traitant un ensemble d'images de chaque utilisateur lors de l'inscription.
Matchage du visage: Lorsqu'un utilisateur tente d'accéder, son visage soumis est traité via le même pipeline: détection, alignement, extraction des fonctionnalités et codage. La représentation du visage résultant est ensuite comparée aux représentations de votre base de données faciales en utilisant une métrique de distance comme la distance euclidienne ou la similitude en cosinus. L'idée est de trouver le match le plus proche.
Seuil: la comparaison produit un score de similitude. Vous définissez une valeur de seuil au-dessus duquel la face soumise est considérée comme une correspondance avec une face dans la base de données. Le seuil aide à équilibrer les faux positifs et les faux négatifs.
Prise de décision: Sur la base du score de similitude et du seuil, une décision est prise ou non de l'accès. Si le score est supérieur au seuil et dans une plage acceptable, l'accès est accordé. Sinon, l'accès est refusé.
Apprentissage continu: pour améliorer la précision de la reconnaissance au fil du temps, certains systèmes mettent en œuvre un apprentissage continu. Cela implique une mise à jour périodique des représentations du visage dans la base de données à l'aide de nouvelles images d'utilisateurs. Cela peut aider à tenir compte des changements d'apparence en raison de facteurs tels que le vieillissement ou les poils du visage.
Le FRV est un vecteur qui représente le visage d'une personne. Il s'agit d'une représentation numérique du visage, et il est utilisé pour comparer les visages. Le FRV est généré par un algorithme de reconnaissance faciale implémenté par une bibliothèque utilisée du côté client. Le côté client peut être n'importe quelle plate-forme (web, mobile, bureau, etc.). Jetons un coup d'œil à la structure FRV:
[
0.123, -0.456, 0.789, 0.234, 0.567, 0.123, 0.678, -0.345,
-0.987, 0.876, -0.123, -0.456, 0.789, -0.234, -0.567, 0.123,
0.678, 0.345, -0.987, -0.876, 0.123, 0.456, -0.789, 0.234,
0.567, -0.123, 0.678, 0.345, 0.987, -0.876, -0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
-0.567, 0.123, 0.678, 0.345, -0.987, -0.876, 0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234
]
Au-dessus, nous avons un FRV 128 dimension (vecteur de représentation du visage) d'une représentation numérique du visage de quelqu'un. Différentes bibliothèques peuvent générer différentes FRV de dimension, qui peuvent être 256, 512 ou encore plus de dimensions. Nous pouvons considérer ce FRV comme un cachet unique numérique du visage de quelqu'un. Comme personne n'a le même visage, personne n'a le même FRV. Ainsi, un FRV peut être utilisé pour identifier quelqu'un contre une base de données de FRV.
Cette API FACEID utilise un FRV envoyé par le client pour identifier si le FRV donné correspond à un FRV dans la base de données. Si le FRV donné correspond à un FRV dans la base de données, l'API accorde l'accès au client. Sinon, l'API nie l'accès au client.
Une base de données vectorielle est quelque chose de nouveau dans le monde des bases de données, et son utilisation augmente rapidement. Dans notre cas, nous utilisons QDrant (https://qdrant.tech), une base de données vectorielle qui est open source et gratuite. N'oubliez pas que les vecteurs de représentation du visage sont essentiellement un tableau de nombres flottants qui peuvent être de taille énorme. Sur cette API FACEID, nous utilisons un FRV 128 dimension, mais il peut être de 256, 512 ou même plus de dimensions. Nous avons donc besoin d'une base de données qui peut stocker cette énorme quantité de données et peut effectuer des recherches rapides dessus.
Les bases de données SQL et NOSQL traditionnelles peuvent être utilisées pour stocker les FRV, mais elles ne sont pas optimisées pour ce type de données. Les bases de données vectorielles sont optimisées pour stocker et rechercher des vecteurs. Ils sont également optimisés pour les recherches rapides et peuvent effectuer des recherches sur des millions de vecteurs en quelques millisecondes. Cela signifie qu'un visage peut être identifié en quelques millisecondes, ce qui est idéal pour les applications en temps réel.
Ce projet est une simple mise en œuvre d'une API de reconnaissance faciale. Il s'agit d'une API simple qui peut être utilisée pour intégrer la reconnaissance du visage dans n'importe quelle application. L'API est écrite à Golang et utilise l'architecture de repos. Le client peut être écrit dans n'importe quelle langue et peut provenir de n'importe quelle plate-forme (Web, mobile, bureau, etc.). Si vous souhaitez implémenter la reconnaissance du visage dans votre application, vous pouvez utiliser API FACEID comme point de départ. S'il vous plaît, n'hésitez pas à me contacter à [email protected] si vous avez des questions ou des suggestions. Merci!