Créer un système de reconnaissance faciale en Python (débutant)

Même s’ils font un peu peur, les systèmes de reconnaissance faciale sont des outils très utiles dans la sécurité de bâtiments sensibles. Je vous proposer de coder rapidement un petit programme en python pour « retrouver » un visage parmi un groupe de personnes.

Pour simplifier nous allons juste nous contenter de photos, mais bientôt nous passerons à la vidéo. J’avais d’ailleurs déjà proposé un système similaire il y a quelques années, mais avec beaucoup plus d’options, sur de la vidéo (lire l’article ici) avec YOLO et TensorFlow.

Le but est de retrouver ce visage :

dans ce groupe :

Etape 1 : les importations

Comme toujours avec python, nous allons importer les librairies qui nous permettent d’étendre les capacités du langage.

import face_recognition
import cv2
  • cv2, pour OpenCV, est LA librairie de manipulation des images en python. Indispensable.
  • face_recognition est plus spécialisée dans la reconnaissance faciale, c’est elle qui va récupérer l’image et déployer ses antennes pour retrouver le visage recherché.

Etape 2 : l’image de référence

Cette image représente le visage qui sera recherché.

# Charger et encoder l'image de référence
reference_image = face_recognition.load_image_file("reference.jpg")
reference_face_encoding = face_recognition.face_encodings(reference_image)[0]

Elle est chargée dans une variable reference_image et ensuite encodée par la librairie face_recognition

Etape 3 : la cible

Elle représente le groupe où se cache le visage. Elle est simplement chargée :

# Charger l'image cible dans laquelle chercher un visage correspondant
target_image = face_recognition.load_image_file("target.jpg")

Etape 4 : analyse de la cible

Grâce à la librairie face_recognition nous allons « scanner » l’image à la recherche de visages. Chaque visage sera ensuite encodé et localisé sur la photo.

# Détecter les emplacements et les encodages des visages dans l'image cible
target_face_locations = face_recognition.face_locations(target_image)
target_face_encodings = face_recognition.face_encodings(target_image, target_face_locations)

Etape 5 : comparaison des visages

Nous allons ensuite comparer CHAQUE visage détecté dans le groupe avec l’image de référence.

# Comparer chaque visage détecté dans l'image cible avec l'image de référence
for face_location, face_encoding in zip(target_face_locations, target_face_encodings):
    # Comparer les encodages des visages
    results = face_recognition.compare_faces([reference_face_encoding], face_encoding)

Le zip dans for face_location, face_encoding in zip(target_face_locations, target_face_encodings) est utilisé en python pour regrouper les éléments. Ici, zip est utilisé pour associer les coordonnées des visages (target_face_locations) aux encodages des visages (target_face_encodings), afin que chaque paire représente les informations d’un seul visage.

La variable results stocke le résultat de la comparaison.

La boucle for permet d’itérer sur tous les visages détectés.

Etape 6 : Visage détecté

Si l’un des visages correspond à l’image de référence, le programme affiche un message, récupère les coordonnées des 4 points autour du visage détecté et dessine un rectangle grace à cv2.rectangle :

    # Si le visage correspond, dessiner un rectangle autour
    if results[0]:
        print("Le visage correspond à la personne dans l'image de référence.")
        # Extraire les coordonnées du visage
        top, right, bottom, left = face_location
        # Dessiner un rectangle autour du visage
        cv2.rectangle(target_image, (left, top), (right, bottom), (0, 255, 0), 2)
    else:
        print("Aucune correspondance trouvée.")

Etape 7 : Conversion de l’image

Nous allons ensuite convertir l’image pour l’afficher à la dernière étape :

# Convertir pour affichage avec OpenCV
target_image = cv2.cvtColor(target_image, cv2.COLOR_RGB2BGR)

Etape 8 : Affichage

Grâce à cv3.imshow() nous affichons l’image avec le rectangle dessiné autour du visage détecté.

# Afficher l'image cible
cv2.imshow("Résultat", target_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Et pour terminer, nous refermons toutes les éventuelles fenêtres avec cv2.destroyAllWindows()

Et voilà, c’est terminé. Vous pouvez imaginer toutes sortes de variantes à partir de cette base.


Le code complet

import face_recognition
import cv2

# Charger et encoder l'image de référence
reference_image = face_recognition.load_image_file("reference.jpg")
reference_face_encoding = face_recognition.face_encodings(reference_image)[0]

# Charger l'image cible dans laquelle chercher un visage correspondant
target_image = face_recognition.load_image_file("target.jpg")

# Détecter les emplacements et les encodages des visages dans l'image cible
target_face_locations = face_recognition.face_locations(target_image)
target_face_encodings = face_recognition.face_encodings(target_image, target_face_locations)

# Comparer chaque visage détecté dans l'image cible avec l'image de référence
for face_location, face_encoding in zip(target_face_locations, target_face_encodings):
    # Comparer les encodages des visages
    results = face_recognition.compare_faces([reference_face_encoding], face_encoding)

    # Si le visage correspond, dessiner un rectangle autour
    if results[0]:
        print("Le visage correspond à la personne dans l'image de référence.")
        # Extraire les coordonnées du visage
        top, right, bottom, left = face_location
        # Dessiner un rectangle autour du visage
        cv2.rectangle(target_image, (left, top), (right, bottom), (0, 255, 0), 2)
    else:
        print("Aucune correspondance trouvée.")

# Convertir pour affichage avec OpenCV
target_image = cv2.cvtColor(target_image, cv2.COLOR_RGB2BGR)

# Afficher l'image cible
cv2.imshow("Résultat", target_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Contact :
Jacques.nxt@gmail.com
ESEC. SUP DE PUB. PUBLICARA. ATELIER INTERNET. GMBC. GUERILLA. ODYSSEE BBG. TM DESIGN. NXT

Design. Stratégie. Code.

Ma carrière se distingue par une forte capacité à anticiper les courants futurs, à embrasser le changement, et à façonner les outils de communication en puissantes leviers stratégiques. Fort d’une trajectoire jalonnée de défis relevés et de succès emblématiques depuis 1994, j’ai cultivé une expertise sans pareille dans la conception de messages et d’identités visuelles qui résonnent avec profondeur et persistance.
Je travaille dans une fusion d’art et de stratégie, grâce à ma compréhension profonde des narratifs visuels et d’une maîtrise technique qui me permet de naviguer avec aisance entre les différentes technologies : digital, IA, code, marketing, print, motion design… Ma polyvalence s’ancre dans une vision directrice où chaque choix esthétique et chaque mot s’inscrit dans une démarche stratégique globale.

À travers chaque projet, mon ambition a toujours été de dépasser les attentes, de transformer les défis en opportunités et de guider les marques vers de nouveaux horizons. Mon parcours est une quête continue d’excellence, un engagement à repousser les limites de la créativité pour révéler et magnifier l’essence unique de chaque partenaire.