Teknologi pengecaman muka telah menjadi semakin meluas dalam pelbagai aplikasi, daripada sistem keselamatan hingga ke media sosial. Salah satu model paling berkesan untuk tugasan ini ialah FaceNet, model pembelajaran mendalam yang direka untuk pengesahan muka, pengecaman dan pengelompokan.
Dalam tutorial ini, saya akan menunjukkan kepada anda cara membina sistem pengecaman muka dalam Python menggunakan FaceNet. Kami akan merangkumi segala-galanya daripada memuatkan model kepada membandingkan wajah. Pada penghujung panduan ini, anda akan mempunyai asas yang kukuh untuk melaksanakan pengecaman muka dalam projek anda sendiri.
FaceNet ialah model pembelajaran mendalam yang dibangunkan oleh Google yang memetakan muka ke dalam ruang Euclidean 128 dimensi. Pembenaman ini mewakili ciri penting wajah, menjadikannya mudah untuk membandingkan dan mengenali wajah dengan ketepatan yang tinggi. Berbeza dengan kaedah pengecaman muka tradisional, FaceNet memfokuskan pada membenamkan pembelajaran, yang menjadikannya sangat berkesan dan berskala.
Sebelum menyelam ke dalam kod, pastikan anda telah memasang yang berikut:
Anda boleh memasang kebergantungan ini menggunakan pip:
pip install tensorflow numpy opencv-python scikit-learn
Pertama, kami akan memuatkan model FaceNet yang telah terlatih. Anda boleh memuat turun model daripada sumber yang dipercayai atau menggunakan model yang tersedia melalui pustaka keras-facenet.
from keras.models import load_model # Load the pre-trained FaceNet model model = load_model('facenet_keras.h5') print("Model Loaded Successfully")
Memuatkan model ialah langkah pertama dalam menyediakan sistem pengecaman wajah kami. Model ini akan digunakan untuk menjana benam untuk imej, yang merupakan perwakilan berangka wajah.
FaceNet menjangkakan imej input ialah 160x160 piksel dalam format RGB. Selain itu, nilai piksel perlu dinormalkan sebelum dimasukkan ke dalam model.
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
Fungsi ini mengendalikan prapemprosesan imej yang diperlukan oleh FaceNet. Ia menukar imej kepada format dan saiz yang sesuai, memastikan model menerima input yang boleh digunakan dengan berkesan.
Seterusnya, kami akan menggunakan model FaceNet untuk menjana benam daripada imej praproses. Pembenaman ini akan berfungsi sebagai perwakilan berangka unik wajah.
def get_face_embedding(model, image_path): # Preprocess the image img = preprocess_image(image_path) # Generate the embedding embedding = model.predict(img) return embedding
Fungsi get_face_embedding mengambil model dan laluan imej, memproses imej dan mengembalikan pembenaman. Pembenaman inilah yang akan kami gunakan untuk perbandingan muka.
Untuk menentukan sama ada dua muka sepadan, kami membandingkan benamnya dengan mengira jarak Euclidean antara mereka. Jika jarak di bawah ambang tertentu, muka dianggap padan.
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
Fungsi compare_faces mengira jarak antara dua benam. Jika jarak ini kurang daripada ambang yang ditentukan (0.5 secara lalai), fungsi mencetak "Padanan Muka." Jika tidak, ia mencetak "Wajah berbeza."
Akhir sekali, mari kita uji sistem pengecaman wajah kita dengan dua imej untuk melihat sama ada imej itu mengenal pasti mereka dengan betul sebagai orang yang sama atau tidak.
# 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}")
Selain itu, jarak Euclidean antara kedua-dua benam akan dicetak.
Anda baru sahaja membina sistem pengecaman muka yang ringkas tetapi berkuasa menggunakan FaceNet dalam Python. Sistem ini boleh dikembangkan dengan mudah untuk memasukkan lebih banyak muka, mengendalikan pengecaman masa nyata atau disepadukan ke dalam projek yang lebih besar. Ketepatan dan kecekapan tinggi FaceNet menjadikannya pilihan terbaik untuk tugas pengecaman muka.
Jangan ragu untuk bereksperimen dengan nilai ambang, atau cuba gunakan sistem ini dalam aplikasi masa nyata seperti alat pengecaman muka berasaskan kamera web.
Jika anda mempunyai sebarang soalan atau memerlukan bantuan lanjut, tinggalkan komen di bawah. Selamat mengekod!
Atas ialah kandungan terperinci Cara Membina Sistem Pengecaman Wajah Menggunakan FaceNet dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!