Gesichtserkennungstechnologie findet in verschiedenen Anwendungen, von Sicherheitssystemen bis hin zu sozialen Medien, zunehmend Verbreitung. Eines der effektivsten Modelle für diese Aufgabe ist FaceNet, ein Deep-Learning-Modell zur Gesichtsüberprüfung, -erkennung und -clusterung.
In diesem Tutorial zeige ich Ihnen, wie Sie mit FaceNet ein Gesichtserkennungssystem in Python erstellen. Wir decken alles ab, vom Laden des Modells bis zum Vergleich von Gesichtern. Am Ende dieses Leitfadens verfügen Sie über eine solide Grundlage für die Implementierung der Gesichtserkennung in Ihren eigenen Projekten.
FaceNet ist ein von Google entwickeltes Deep-Learning-Modell, das Gesichter in einem 128-dimensionalen euklidischen Raum abbildet. Diese Einbettungen stellen die wesentlichen Merkmale eines Gesichts dar und erleichtern den Vergleich und die Erkennung von Gesichtern mit hoher Genauigkeit. Im Gegensatz zu herkömmlichen Gesichtserkennungsmethoden konzentriert sich FaceNet auf die Einbettung des Lernens, was es äußerst effektiv und skalierbar macht.
Bevor Sie in den Code eintauchen, stellen Sie sicher, dass Folgendes installiert ist:
Sie können diese Abhängigkeiten mit pip:
installieren
pip install tensorflow numpy opencv-python scikit-learn
Zuerst laden wir ein vorab trainiertes FaceNet-Modell. Sie können das Modell entweder von einer vertrauenswürdigen Quelle herunterladen oder das in der Keras-Facenet-Bibliothek verfügbare Modell verwenden.
from keras.models import load_model # Load the pre-trained FaceNet model model = load_model('facenet_keras.h5') print("Model Loaded Successfully")
Das Laden des Modells ist der erste Schritt beim Einrichten unseres Gesichtserkennungssystems. Das Modell wird verwendet, um Einbettungen für die Bilder zu generieren, bei denen es sich um numerische Darstellungen der Gesichter handelt.
FaceNet erwartet, dass Eingabebilder 160 x 160 Pixel im RGB-Format haben. Darüber hinaus müssen die Pixelwerte normalisiert werden, bevor sie in das Modell eingespeist werden.
import cv2 import numpy as np def preprocess_image(image_path): # Load the image using OpenCV img = cv2.imread(image_path) # Convert the image to RGB (FaceNet expects RGB images) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Resize the image to 160x160 pixels img = cv2.resize(img, (160, 160)) # Normalize the pixel values img = img.astype('float32') / 255.0 # Expand dimensions to match the input shape of FaceNet (1, 160, 160, 3) img = np.expand_dims(img, axis=0) return img
Diese Funktion übernimmt die für FaceNet erforderliche Bildvorverarbeitung. Es konvertiert das Bild in das entsprechende Format und die entsprechende Größe und stellt so sicher, dass das Modell Eingaben erhält, mit denen es effektiv arbeiten kann.
Als nächstes verwenden wir das FaceNet-Modell, um Einbettungen aus den vorverarbeiteten Bildern zu generieren. Diese Einbettungen dienen als eindeutige numerische Darstellungen der Gesichter.
def get_face_embedding(model, image_path): # Preprocess the image img = preprocess_image(image_path) # Generate the embedding embedding = model.predict(img) return embedding
Die Funktion get_face_embedding übernimmt das Modell und einen Bildpfad, verarbeitet das Bild und gibt die Einbettung zurück. Diese Einbettung verwenden wir für den Gesichtsvergleich.
Um festzustellen, ob zwei Gesichter übereinstimmen, vergleichen wir ihre Einbettungen, indem wir den euklidischen Abstand zwischen ihnen berechnen. Wenn der Abstand unter einem bestimmten Schwellenwert liegt, gelten die Gesichter als übereinstimmend.
from numpy import linalg as LA def compare_faces(embedding1, embedding2, threshold=0.5): # Compute the Euclidean distance between the embeddings distance = LA.norm(embedding1 - embedding2) # Compare the distance to the threshold if distance < threshold: print("Face Matched.") else: print("Faces are different.") return distance
Die Funktion „compare_faces“ berechnet den Abstand zwischen zwei Einbettungen. Wenn dieser Abstand kleiner als der angegebene Schwellenwert ist (standardmäßig 0,5), gibt die Funktion „Gesichtsübereinstimmung“ aus. Andernfalls wird „Gesichter sind unterschiedlich“ ausgegeben.
Abschließend testen wir unser Gesichtserkennungssystem mit zwei Bildern, um zu sehen, ob es sie korrekt als dieselbe Person identifiziert oder nicht.
# Load the FaceNet model model = load_model('facenet_keras.h5') # Get embeddings for two images embedding1 = get_face_embedding(model, 'face1.jpg') embedding2 = get_face_embedding(model, 'face2.jpg') # Compare the two faces distance = compare_faces(embedding1, embedding2) print(f"Euclidean Distance: {distance}")
Zusätzlich wird der euklidische Abstand zwischen den beiden Einbettungen gedruckt.
Sie haben gerade ein einfaches, aber leistungsstarkes Gesichtserkennungssystem mit FaceNet in Python erstellt. Dieses System kann problemlos um weitere Gesichter erweitert werden, eine Echtzeiterkennung übernehmen oder in größere Projekte integriert werden. Die hohe Genauigkeit und Effizienz von FaceNet machen es zu einer hervorragenden Wahl für Gesichtserkennungsaufgaben.
Fühlen Sie sich frei, mit den Schwellenwerten zu experimentieren, oder versuchen Sie, dieses System in einer Echtzeitanwendung wie einem Webcam-basierten Gesichtserkennungstool zu verwenden.
Wenn Sie Fragen haben oder weitere Hilfe benötigen, hinterlassen Sie unten einen Kommentar. Viel Spaß beim Codieren!
Das obige ist der detaillierte Inhalt vonSo erstellen Sie ein Gesichtserkennungssystem mit FaceNet in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!