Sommaire :

  1. Installation des bibliothèques nécessaires
  2. Reconnaissance faciale par comparaison d’image
  3. Reconnaissance faciale en temps réel avec une webcam
  4. Réalisation de tests avec la reconnaissance faciale

1. Installation des bibliothèques nécessaires

Pour les débutants avec Python, je vous invite à télécharger le package avec tous les codes et photos que vous trouverez dans ce tutoriel, puis nous procédons à l’installation des bibliothèques de base.

Si vous n’avez jamais utilisé Pyhton, il faudra au préalable installer Python (version 3.8 recommandée pour ce projet) puis pip (via le terminal)

La première bibliothèque à installer est opencv-python , comme toujours, exécutez la commande depuis le terminal (sur Windows soit cmd soit Windows PowerShell).

pip install opencv-python

puis continuez avec face_recognition , cela s’installe aussi avec pip .

pip install face_recognition

2. Reconnaissance faciale par reconnaissance d’image

Pour que la reconnaissance faciale fonctionne, nous avons besoin d’un jeu de données de photos composé également d’une seule image par personne et d’une photo de comparaison. Par exemple, dans notre exemple, nous avons un ensemble de données composé de 1 photo chacun d’Elon Musk, Jeff Bezos, Lionel Messi, Ryan Reynolds.

Pour cet exemple nous utiliserons la photo de Messi

Il faut appeler les bibliothèques nécessaires

La première étape consiste toujours à rappeler les bibliothèques que nous avons installées OpenCV et face_recognition dans notre projet.

import cv2
import face_recognition

Encoder la première image de référence

Avec la procédure OpenCV habituelle, nous allons extraire l’image, dans ce cas, messi1.jpg, et la convertir au format couleur RVB. Ensuite on réalise le « face encoding » avec les fonctions de la librairie de reconnaissance faciale.

img = cv2.imread("Messi1.webp")
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_encoding = face_recognition.face_encodings(rgb_img)[0]

Encoder la deuxième image de référence

C’est la même procédure pour la deuxième image, on ne change que le nom des variables et évidemment le chemin de la deuxième image, en l’occurrence : images/messi2.jpg

img2 = cv2.imread(« images/Messi.webp »)
rgb_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
img_encoding2 = face_recognition.face_encodings(rgb_img2)[0]

Comparaison des 2 images

Avec une seule ligne, nous réalisons une simple comparaison de visage et affichons le résultat. Si les images sont identiques, il affichera « True » sinon « False ».

result = face_recognition.compare_faces([img_encoding], img_encoding2)
print("Result: ", result)

Encoder tous les visages présents dans notre base de données

Maintenant, nous devons encoder toutes les images de notre base de données, de sorte que via le flux vidéo de la webcam, s’il trouve la correspondance, il affiche le nom, sinon il indique « non introuvable ».

C’est une fonction du fichier que j’ai préparé et il sélectionne simplement toutes les images contenues dans le dossier images/ et les encode. Dans notre cas, il y a 4 images.

# Encode faces from a folder
sfr = SimpleFacerec()
sfr.load_encoding_images("images/")

3 Reconnaissance faciale en temps réel avec une webcam

Même pour la reconnaissance faciale en temps réel, la procédure est similaire à celle d’une seule image mais avec quelque lignes de code en plus.

Dans un premier temps pensez à télécharger les fichiers à partir du lien ci-dessous et parmi les différents fichiers Python vous trouverez également simple_facerec.py

Rappelez-vous que ce n’est pas une bibliothèque donc pour l’inclure dans votre projet, mettez ce fichier dans le même dossier.

 

Récupérer le flux de la webcam

Avec une simple fonction Opencv, nous récupérons et affichons le flux de la webcam, puis nosu le mettons en boucle

# Load Camera
cap = cv2.VideoCapture(2)

while True:
    ret, frame = cap.read()

Localisation et reconnaissance faciale

Maintenant, nous identifions le ou les visages passant dans le cadre de la webcam avec la fonction detect_known_faces(frame) . Il nous affichera le nom de la personne avec un cadre suivant en temps réel la position à chaque instant du mouvement.

# Detect Faces
face_locations, face_names = sfr.detect_known_faces(frame)
for face_loc, name in zip(face_locations, face_names):
y1, x2, y2, x1 = face_loc[0], face_loc[1], face_loc[2], face_loc[3]

Comme étape intermédiaire, j’ai montré la sortie dans l’image.

Afficher le nom et le rectangle

Maintenant que nous avons tous les éléments, nous les affichons avec OpenCV.

 

cv2.putText(frame, name,(x1, y1 – 10), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 0, 200), 2)
        cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 200), 4)
    cv2.imshow(« Frame », frame)
    key = cv2.waitKey(1)
    if key == 27:
        break

4 Réalisation de tests avec la reconnaissance faciale

Pour le test en temps réel, j’ai affiché les photos sur mon téléphone et je les ai montrées à la webcam. Même si les conditions d’éclairage ne sont pas parfaites cela fonctionne plutôt bien mˆeme si la photo est pixélisée, et le visage pas de face. Et évidemment, en conditions réelles, cela fonctionnera beaucoup mieux.

Ce tutoriel est une version traduite et complétée de l’excellent billet publié sur https://pysource.com/2021/08/16/face-recognition-in-real-time-with-opencv-and-python/

 

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

× Besoin d'un conseil ?