Introduction à HyperAI
Oubliez les choses malheureuses, il y a encore des gens qui font de bons navigateurs.
Récemment, un groupe d'ingénieurs a développé une API de reconnaissance faciale qui peut s'exécuter sur le navigateur basé sur le framework de base tensorflow.js - face-api.js, qui peut non seulement reconnaître plusieurs visages en même temps,Permettre à davantage d’ingénieurs en IA non professionnels d’utiliser la technologie de reconnaissance faciale à faible coût.
Principe de reconnaissance faciale
face-api.js est un framework js basé sur le noyau Tensorflow.js. Il utilise trois types de CNN pour effectuer la reconnaissance faciale et la détection des caractéristiques du visage afin d'identifier les personnes dans les images.
Comme la plupart des technologies de reconnaissance d'images, cette technologie est mise en œuvre en faisant correspondre la base de données, en trouvant l'image avec la plus grande similitude et en générant le résultat. Cependant, face-api.js peut reconnaître plusieurs visages dans une image en même temps.
Le principe de fonctionnement général de la technologie de reconnaissance faciale est le suivant : les ingénieurs saisissent d'abord un grand nombre d'images marquées d'informations telles que des noms dans le système pour créer un ensemble d'apprentissage de données, puis utilisent les objets de reconnaissance comme ensemble de test pour comparer avec les images de l'ensemble d'apprentissage.
Si la similarité entre deux images atteint le seuil, le résultat est émis, sinon « inconnu » est émis.
Le principe d'implémentation de face-api.js
Tout d’abord, il faut détecter les visages, c’est-à-dire encercler tous les visages de l’image.
face-api.js utilise l'algorithme SSD (Single Shot Multibox Detector) pour effectuer la détection des visages. L'algorithme SSD est une méthode de détection multi-cibles qui peut détecter directement les catégories cibles et déterminer la boîte englobante (communément appelée boîte b). Il peut améliorer la précision et la vitesse de reconnaissance en même temps.
Le SSD peut être compris comme un CNN basé sur MobileNetV1 avec une couche de prédiction de frontière supplémentaire. Le système utilise d’abord un cadre de délimitation pour encercler le contour du visage et le noter. Plus l'image est proche du visage, plus le score est élevé, ce qui permet de filtrer le contenu de l'image non faciale.
Pour garantir la précision, les images entrées dans l'ensemble de test doivent être centrées sur le visage, de sorte que le cadre de délimitation du visage doit être aligné. À cette fin, face-api.js utilise un CNN simple pour trouver 68 points de repère afin de déterminer l'image du visage, préparant ainsi l'étape suivante de la reconnaissance faciale.
Exemple
Grâce aux points de repère, le système peut déterminer davantage l’image du visage. Les figures suivantes montrent les effets avant (à gauche) et après (à droite) l’alignement des visages.
Diagramme de l'effet d'alignement du visage
De toute évidence, après l'alignement, il y a moins de choses qui ne sont pas liées au visage, ce qui contribue à améliorer la précision de reconnaissance du système.
Mise en œuvre de la reconnaissance faciale
Une fois le visage encerclé, la reconnaissance faciale commencera.
Le programme entre les visages alignés dans un réseau d'apprentissage profond de reconnaissance faciale basé sur ResNet-34 Architecture système, détection de visage via la bibliothèque Dlib. Cette technique permet de mapper les traits du visage à un descripteur de visage (un vecteur de caractéristiques avec 128 valeurs), un processus souvent appelé intégration de visage.
Après cela, le programme compare les descripteurs de visage de chaque image avec les descripteurs de visage de l'ensemble d'apprentissage et détermine si les deux visages sont similaires en fonction d'un seuil (pour une image de visage de 150 × 150 pixels, un seuil de 0,6 est plus approprié).
La distance euclidienne (c'est-à-dire la métrique euclidienne) peut être utilisée pour la mesure de similarité, ce qui fonctionne très bien. L'effet réel peut être observé dans l'image gif ci-dessous.
Parler ne coûte rien, montrez-moi le code !
Après avoir présenté les connaissances théoriques, il est temps de vous guider à travers le processus pratique. La figure suivante est utilisée comme image d’entrée.
Étape 1 : Obtenir le script
Vous pouvez obtenir le dernier script à partir de dist/face-api.js :
Il peut également être obtenu via NPM :
Étape 2 : Charger le modèle de données
Les fichiers modèles peuvent être utilisés comme ressources statiques d'applications Web ou montés à d'autres emplacements. Les modèles peuvent être chargés en spécifiant des chemins de fichiers ou des URL.
En supposant que le modèle se trouve dans le répertoire public/models :
Si vous chargez un modèle spécifique, alors :
Étape 3 : Obtenez une description complète
Des images HTML, des toiles ou des vidéos peuvent être utilisées comme entrée du réseau. Voici une description complète de l'obtention de l'image d'entrée, c'est-à-dire de tous les visages :
Vous pouvez également sélectionner vous-même la position et les caractéristiques du visage :
Vous pouvez également visualiser le résultat en affichant une bordure via le canevas HTML :
Les traits du visage sont présentés ci-dessous :
Nous pouvons maintenant calculer l’emplacement et les descripteurs de chaque visage dans l’image d’entrée, qui serviront de données de référence.
L'étape suivante consiste à obtenir l'URL de l'image et à l'utiliser faceapi.bufferToImage Créer un élément d’image HTML :
Pour chaque image, localisez le visage et calculez le descripteur :
Ensuite, parcourez les descripteurs de visage de l'image d'entrée et recherchez le descripteur le plus similaire dans les données de référence :
Obtenez la meilleure correspondance pour chaque visage dans l'image d'entrée à l'aide de la métrique euclidienne et affichez le cadre de délimitation et son étiquette dans un canevas HTML :
Voici l'ensemble du processus de reconnaissance faciale par face-api.js. N’est-ce pas très simple ?Les amis intéressés peuvent l'essayer et vous êtes invités à nous envoyer vos résultats expérimentaux et vos expériences.