La Reconnaissance Faciale avec Python

blog / Techno / Python / La Reconnaissance Faciale avec Python

La Reconnaissance Faciale avec Python

4 Août, 2020 |
La Reconnaissance Faciale avec Python 1 - Webpick

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 Reconnaissance Faciale avec Python 3 - Webpick

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 Reconnaissance Faciale avec Python 5 - Webpick
La Reconnaissance Faciale avec Python 7 - Webpick
  • La récupération des données liées à la reconnaissance faciale auprès des images chargées. 
La Reconnaissance Faciale avec Python 9 - Webpick
  •     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.
La Reconnaissance Faciale avec Python 11 - Webpick
La Reconnaissance Faciale avec Python 13 - Webpick
La Reconnaissance Faciale avec Python 15 - Webpick

Exécution du Script et Test

Nous allons maintenant faire un petit test sur une photo des joueurs du Manchester United Football Club.

La Reconnaissance Faciale avec Python 17 - Webpick

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

La Reconnaissance Faciale avec Python 19 - Webpick

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()

Catégories

à propos

Webpick a été fondé en 2015 par Taoufik, AKA Tao. Vétéran du web à Marrakech, Tao a construit une belle équipe de spécialistes des technologies, principalement PHP et WordPress. Accaparé par les multiples projets de l’incubateur EBF (Emerging Business Factory) qu’il a confondé, Tao a laissé les rênes de Webpick à son ami et associé David à partir de 2018.

Partager cette page

À propos de l’auteur

Boutaina Azdig

Boutaina Azdig

Auteur

Hello, Je suis élève ingénieure en Réseaux et Télécommunications à l'ENSA de Marrakech. J'espère que cet article vous a plu !