Maison  >  Article  >  développement back-end  >  Comment utiliser Python pour implémenter la fonction de reconnaissance faciale ?

Comment utiliser Python pour implémenter la fonction de reconnaissance faciale ?

WBOY
WBOYavant
2023-04-20 22:16:143051parcourir

1. Détection de visage

La détection de visage fait référence à la détection de l'emplacement d'un visage à partir d'une image ou d'une vidéo. Nous utilisons la bibliothèque OpenCV pour implémenter la fonction de détection de visage. OpenCV est une bibliothèque de vision par ordinateur populaire qui prend en charge une variété de fonctions de traitement d'images et de vidéos et fonctionne sur plusieurs plates-formes.

Ce qui suit est un exemple de code de détection de visage en Python :

import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dans cet exemple de code, nous utilisons la classe CascadeClassifier d'OpenCV pour charger un classificateur nommé "haarcascade_frontalface_default.xml", fourni avec OpenCV pour la détection de visage. Nous lisons ensuite une image appelée "test.jpg" et la convertissons en image en niveaux de gris. Ensuite, nous utilisons la fonction detectMultiScale pour détecter les visages dans l'image. La fonction detectMultiScale renverra une liste rectangulaire contenant la position et la taille du visage. Enfin, nous dessinons des rectangles dans l'image originale pour marquer les visages détectés.

2. Extraction des traits du visage

L'extraction des traits du visage fait référence à l'extraction de certains traits des images du visage, tels que les yeux, le nez, la bouche, etc. Nous utilisons la bibliothèque Dlib pour implémenter la fonction d'extraction des traits du visage. Dlib est une bibliothèque C++ populaire pour l'apprentissage automatique, la vision par ordinateur et le traitement d'images. Bien que Dlib soit écrit en C++, il fournit également une interface Python. On peut utiliser Python pour appeler les fonctions de la bibliothèque Dlib.

Ce qui suit est un exemple de code d'extraction de traits du visage en Python :

import dlib
import cv2

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = detector(gray)

for face in faces:
    landmarks = predictor(gray, face)
    for n in range(68):
        x = landmarks.part(n).x
        y = landmarks.part(n).y
        cv2.circle(img, (x, y), 2, (255, 0, 0), -1)

cv2.imshow("Output", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dans cet exemple de code, nous utilisons la fonction get_frontal_face_detector et la classe shape_predictor de la bibliothèque Dlib pour charger un extracteur de traits du visage nommé "shape_predictor_68_face_landmarks.dat". Nous lisons ensuite une image appelée "test.jpg" et la convertissons en image en niveaux de gris. Ensuite, nous utilisons la fonction de détection pour détecter les visages dans l'image et la fonction de prédicteur pour extraire les caractéristiques du visage. La fonction de prédicteur renverra une liste contenant 68 coordonnées de points caractéristiques du visage. Enfin, nous dessinons des cercles dans l’image originale pour marquer les points caractéristiques du visage.

3. Reconnaissance faciale

La reconnaissance faciale consiste à comparer les caractéristiques extraites avec les informations faciales dans la base de données pour identifier l'identité du visage. Nous utilisons la bibliothèque Dlib pour implémenter la fonction de reconnaissance faciale. Le processus de mise en œuvre spécifique est le suivant :

  1. Collecte des données faciales : Nous devons collecter certaines données faciales en tant que base de données. Nous pouvons utiliser une caméra pour capturer ces données et les sauvegarder sur un disque dur.

  2. Extraction des traits du visage : pour chaque image de visage, nous devons extraire ses traits. Nous pouvons utiliser la méthode du deuxième exemple de code pour extraire les traits du visage.

  3. Créer un modèle de reconnaissance faciale : nous devons utiliser les caractéristiques du visage extraites pour créer un modèle de reconnaissance faciale. Nous pouvons y parvenir en utilisant le module face_recognition de la bibliothèque Dlib. Le module face_recognition fournit une fonction appelée "face_encodings" qui convertit une image de visage en un vecteur contenant 128 caractéristiques. Nous pouvons enregistrer ces vecteurs sur le disque dur en tant que base de données de visages.

  4. Reconnaissance faciale : Pour que l'image du visage soit reconnue, nous pouvons utiliser la méthode du deuxième exemple de code pour extraire ses caractéristiques. Nous pouvons ensuite utiliser la fonction compare_faces du module face_recognition pour comparer les caractéristiques extraites avec celles de notre base de données de visages. Si cela correspond, cela signifie que nous avons identifié le visage.

Voici un exemple de code pour la reconnaissance faciale en Python :

import cv2
import dlib
import face_recognition

known_face_encodings = []
known_face_names = []

# Load the known faces and embeddings
for name in ["person_1", "person_2", "person_3"]:
    image = face_recognition.load_image_file(f"{name}.jpg")
    face_encoding = face_recognition.face_encodings(image)[0]
    known_face_encodings.append(face_encoding)
    known_face_names.append(name)

# Initialize some variables
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True

video_capture = cv2.VideoCapture(0)

while True:
    # Grab a single frame of video
    ret, frame = video_capture.read()

    # Resize frame of video to 1/4 size for faster face recognition processing
    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)

    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
    rgb_small_frame = small_frame[:, :, ::-1]

    # Only process every other frame of video to save time
    if process_this_frame:
        # Find all the faces and face encodings in the current frame of video
        face_locations = face_recognition.face_locations(rgb_small_frame)
        face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)

        face_names = []
        for face_encoding in face_encodings:
            # See if the face is a match for the known face(s)
            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
            name = "Unknown"

            # If a match was found in known_face_encodings, just use the first one.
            if True in matches:
                first_match_index = matches.index(True)
                name = known_face_names[first_match_index]

            face_names.append(name)

    process_this_frame = not process_this_frame

    # Display the results
    for (top, right, bottom, left), name in zip(face_locations, face_names):
        # Scale back up face locations since the frame we detected in was scaled to 1/4 size
        top *= 4
        right *= 4
        bottom *= 4
        left *= 4

        # Draw a box around the face
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

        # Draw a label with a name below the face
        cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)

    # Display the resulting image
    cv2.imshow('Video', frame)

    # Hit 'q' on the keyboard to quit!
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()

Dans cet exemple de code, nous chargeons d'abord certaines données de visage et utilisons le module face_recognition pour les convertir en vecteurs de caractéristiques du visage. Ensuite, nous utilisons la fonction cv2.VideoCapture pour lire le flux vidéo de la caméra et utilisons le module face_recognition pour reconnaître les visages dans le flux vidéo. Enfin, nous utilisons les fonctions d'OpenCV pour afficher les résultats de la reconnaissance faciale dans le flux vidéo.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer