
La capacité de notre cerveau à reconnaître et à se souvenir des visages est certainement incroyable. Grâce au machine learning, aujourd’hui les machines peuvent le faire aussi. Il s’agit du prochain développement révolutionnaire dans la technologie basée sur les données: La reconnaissance faciale. C’est une technologie biométrique qui ne cesse de progresser jour après jour, nous permettant d’identifier ou de vérifier l’identité d’un individu à l’aide de son visage. Elle peut être utilisé pour identifier les personnes sur des photos, des vidéos ou en temps réel.
Dans cet article, nous aurons la visibilité sur comment créer un système de reconnaissance faciale fonctionnel et prêt à être utilisé à l’aide de :
- Python : pour la partie back end
- face_recognition : une bibliothèque python utilisée pour la reconnaissance faciale.
- OpenCv : une bibliothèque open-source permettant de traiter des images et des vidéos en temps réel
But du guide :
Nous voulons réaliser un système qui va rendre possible la détection et la reconnaissance d’un ou plusieurs visages qui apparaissent sur un flux vidéo de camera en temps réel en les comparant avec les visages qu’il connait déjà, et qui permet d’afficher le nom de la personne sur la capture.
Pré-requis :
- L’installation d’un gestionnaire de paquets :
PIP est un gestionnaire de paquets qui sert à installer et gérer des paquets en Python. Un des avantages majeurs de pip est la facilité de son interface en ligne de commande, qui rend l’installation de paquets applicatifs Python aussi simple que de taper une commande : sudo apt install python3-pip - La création d’un environnement Python sur Ubuntu :
Virtualenv est un outil pour créer des environnements virtuels Python isolés. Il crée un dossier qui contient toutes les dépendances nécessaires pour utiliser les paquets qu’un projet Python pourrait nécessiter.
Commande d’installation : pip install virtualenv - Le téléchargement des dépendances :
Cette étape se fait en créant un fichier d’extension texte contenant les librairies nécessaires au fonctionnement de notre script python sous la forme « Librairie==Version »

La création de ce fichier est suivie par le lancement d’une commande pour télécharger les dépendances : pip3 install -r requirements.txt
Création du Script de Reconnaissance Faciale :
Ce Script sera chargé de plusieurs traitements :
- La sélection de l’entrée (Exemple : Flux vidéo, image, …) fournissant un flux visuel.
- Le chargement des images des personnes que nous voulons reconnaître ou détecter, chacune des images est nommée par le nom de la personne.


- La récupération des données liées à la reconnaissance faciale auprès des images chargées.

- Le lancement d’un traitement en boucle ayant comme mission :
1. La capture d’une image auprès du flux du périphérique.
2. La détection des visages existants dans l’image.
3. La récupération des données liées aux caractéristiques faciales.
4. La construction des rectangles colorés autours de chaque visage détecté.
5. La comparaison des visages détectés et ceux qu’on cherche afin de trouver un matching.
6. Après détection d’un matching, le nom de la personne est affiché sous le rectangle coloré associé au visage détectée.
7. L’affichage de l’image reproduite en affichage pour l’utilisateur.



Exécution du Script et Test
Nous allons maintenant faire un petit test sur une photo des joueurs du Manchester United Football Club.

Résultat obtenu après l’exécution du script :

Code Source
Nous avons vu dans ce guide comment créer un script de détection faciale en temps réel. Nous pouvons effectuer des modifications pour pouvoir fournir au programme un flux vidéo au lieu d’une image, et eventuellement lier ce processus à différents autres traitements additionnels. Vous pouvez trouver ici le code source complet de notre programme ainsi que les images utilisées :
import face_recognition
import numpy as np
import cv2, queue, threading, time
import requests, os, re
video_capture = VideoCapture(0)
# video_capture.set(5,1)
known_face_encodings = []
known_face_names = []
known_faces_filenames = []
for (dirpath, dirnames, filenames) in os.walk('assets/img/users/'):
known_faces_filenames.extend(filenames)
break
for filename in known_faces_filenames:
face = face_recognition.load_image_file('assets/img/users/' + filename)
known_face_names.append(re.sub("[0-9]",'', filename[:-4]))
known_face_encodings.append(face_recognition.face_encodings(face)[0])
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:
frame = video_capture.read()
if process_this_frame:
face_locations = face_recognition.face_locations(frame)
face_encodings = face_recognition.face_encodings(frame, face_locations)
face_names = []
for face_encoding in face_encodings:
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
name = "Unknown"
face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
best_match_index = np.argmin(face_distances)
if matches[best_match_index]:
name = known_face_names[best_match_index]
face_names.append(name)
process_this_frame = not process_this_frame
for (top, right, bottom, left), name in zip(face_locations, face_names):
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()