Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man mit Python eine Gesichtserkennungsfunktion?

Wie implementiert man mit Python eine Gesichtserkennungsfunktion?

WBOY
WBOYnach vorne
2023-04-20 22:16:143003Durchsuche

1. Gesichtserkennung

Gesichtserkennung bezieht sich auf die Erkennung der Position eines Gesichts anhand eines Bildes oder Videos. Wir verwenden die OpenCV-Bibliothek, um die Gesichtserkennungsfunktion zu implementieren. OpenCV ist eine beliebte Computer-Vision-Bibliothek, die eine Vielzahl von Bild- und Videoverarbeitungsfunktionen unterstützt und auf mehreren Plattformen läuft.

Das Folgende ist ein Codebeispiel für die Implementierung der Gesichtserkennung in 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()

In diesem Codebeispiel verwenden wir die CascadeClassifier-Klasse von OpenCV, um eine Datei namens „haarcascade_frontalface_default.xml“ zu laden. Klassifikator, dieser Klassifikator wird mit OpenCV geliefert und wird zur Gesichtserkennung verwendet. Anschließend lesen wir ein Bild namens „test.jpg“ ein und wandeln es in ein Graustufenbild um. Als nächstes verwenden wir die Funktion „DetectMultiScale“, um Gesichter im Bild zu erkennen. Die Funktion „DetectMultiScale“ gibt eine rechteckige Liste zurück, die die Position und Größe des Gesichts enthält. Abschließend zeichnen wir Rechtecke in das Originalbild, um die erkannten Gesichter zu markieren.

2. Gesichtsmerkmalsextraktion

Gesichtsmerkmalsextraktion bezieht sich auf das Extrahieren einiger Merkmale aus dem Gesichtsbild, wie Augen, Nase, Mund usw. Wir verwenden die Dlib-Bibliothek, um die Funktion zur Extraktion von Gesichtsmerkmalen zu implementieren. Dlib ist eine beliebte C++-Bibliothek für maschinelles Lernen, Computer Vision und Bildverarbeitung. Obwohl Dlib in C++ geschrieben ist, bietet es auch eine Python-Schnittstelle. Wir können Python verwenden, um die Funktionen der Dlib-Bibliothek aufzurufen.

Das Folgende ist ein Codebeispiel für die Extraktion von Gesichtsmerkmalen in 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()

In diesem Codebeispiel verwenden wir die Funktion get_frontal_face_detector der Dlib-Bibliothek und die Klasse shape_predictor zum Laden ein Name Der Gesichtsmerkmalsextraktor für „shape_predictor_68_face_landmarks.dat“. Anschließend lesen wir ein Bild namens „test.jpg“ ein und wandeln es in ein Graustufenbild um. Als nächstes verwenden wir die Detektorfunktion, um Gesichter im Bild zu erkennen, und die Prädiktorfunktion, um Gesichtsmerkmale zu extrahieren. Die Vorhersagefunktion gibt eine Liste mit 68 Koordinaten von Gesichtsmerkmalspunkten zurück. Zum Schluss zeichnen wir Kreise in das Originalbild, um Gesichtsmerkmalspunkte zu markieren.

3. Gesichtserkennung

Unter Gesichtserkennung versteht man den Vergleich der extrahierten Merkmale mit den Gesichtsinformationen in der Datenbank, um die Identität des Gesichts zu identifizieren. Wir verwenden die Dlib-Bibliothek, um die Gesichtserkennungsfunktion zu implementieren. Der spezifische Implementierungsprozess ist wie folgt:

  1. Gesichtsdaten sammeln: Wir müssen einige Gesichtsdaten als unsere Datenbank sammeln. Mit einer Kamera können wir diese Daten erfassen und auf einer Festplatte speichern.

  2. Gesichtsmerkmalsextraktion: Für jedes Gesichtsbild müssen wir seine Merkmale extrahieren. Wir können die Methode im zweiten Codebeispiel verwenden, um Gesichtsmerkmale zu extrahieren.

  3. Erstellen Sie ein Gesichtserkennungsmodell: Wir müssen die extrahierten Gesichtsmerkmale verwenden, um ein Gesichtserkennungsmodell zu erstellen. Dies können wir mit dem Modul face_recognition der Dlib-Bibliothek erreichen. Das Modul „face_recognition“ stellt eine Funktion namens „face_encodings“ bereit, die ein Gesichtsbild in einen Vektor mit 128 Merkmalen umwandelt. Wir können diese Vektoren als unsere Gesichtsdatenbank auf der Festplatte speichern.

  4. Gesichtserkennung: Damit das Gesichtsbild erkannt wird, können wir die Methode im zweiten Codebeispiel verwenden, um seine Merkmale zu extrahieren. Anschließend können wir die Funktion „compare_faces“ des Moduls „face_recognition“ verwenden, um die extrahierten Merkmale mit denen in unserer Gesichtsdatenbank zu vergleichen. Wenn es übereinstimmt, bedeutet das, dass wir das Gesicht identifiziert haben.

Das Folgende ist ein Codebeispiel für die Gesichtserkennung in 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()

In diesem Codebeispiel laden wir zunächst einige Gesichtsdaten, und Verwenden Sie das Modul face_recognition, um sie in Gesichtsmerkmalsvektoren umzuwandeln. Anschließend verwenden wir die Funktion cv2.VideoCapture, um den Videostream der Kamera zu lesen und verwenden das Modul face_recognition, um Gesichter im Videostream zu erkennen. Schließlich verwenden wir die Funktionen von OpenCV, um die Ergebnisse der Gesichtserkennung im Videostream anzuzeigen.

Das obige ist der detaillierte Inhalt vonWie implementiert man mit Python eine Gesichtserkennungsfunktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen