Heim >Backend-Entwicklung >Python-Tutorial >Wie implementiert man mit Python eine Gesichtserkennungsfunktion?
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.
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.
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:
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.
Gesichtsmerkmalsextraktion: Für jedes Gesichtsbild müssen wir seine Merkmale extrahieren. Wir können die Methode im zweiten Codebeispiel verwenden, um Gesichtsmerkmale zu extrahieren.
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.
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!