Giriş
Yüz tanıma teknolojileri, günümüzde güvenlik, sosyal medya ve insan-bilgisayar etkileşimi gibi birçok alanda önemli bir yer tutmaktadır. Bu nedenle, yüz tanıma sistemlerinin nasıl çalıştığını anlamak ve böyle bir sistemi Python’da geliştirmek isteyenler için bilgi sahibi olmak büyük bir avantaj sağlar. Bu yazıda, ‘Eigenfaces’ yöntemini kullanarak yüz tanıma sisteminin temellerine göz atacağız.
Eigenfaces, yüzleri tanımak için kullanılan lineer cebir tabanlı bir yöntemdir. Her yüz, belirli özelliklerini temsil eden bir vektör olarak ifade edilir. Bu vektörlerin analizi sonucunda, her bir yüz için bir ‘eigenvector’ hesaplanarak, benzer yüzlerin tanınması sağlanır. Bu yazıda, adım adım nasıl bir yüz tanıma sistemi oluşturabileceğimizin ve bu sistemde nasıl Eigenfaces kullanabileceğimizin yolunu çizeceğiz.
Öncelikle, aşağıda izleyeceğimiz adımları özetleyecek olursak: algoritmanın temelini oluşturacak veri setinin hazırlanması, özdeğer ve özvektörlerin hesaplanması, yüzleri temsil edecek ‘eigenface’ vektörlerinin çıkarılması ve son olarak bu vektörlerin kullanılarak yeni yüzlerin tanınması olacaktır. Şimdi bu adımları tek tek incelemeye başlayalım.
Veri Setinin Hazırlanması
Yüz tanıma sistemini kurabilmek için öncelikle bir yüz veri setine ihtiyacımız var. Bu veri seti, farklı açılardan çekilmiş aynı kişiye ait yüz resimlerini içermelidir. Python ile birlikte, OpenCV ve NumPy kütüphanelerini kullanarak yüz resimlerini işleyebiliriz. Aşağıda bir veri setinin yüklenmesi ve işlenmesi ile ilgili basit bir örnek bulabilirsiniz.
import cv2
import os
import numpy as np
def load_dataset(dataset_path):
images = []
labels = []
for label in os.listdir(dataset_path):
for image_name in os.listdir(os.path.join(dataset_path, label)):
image_path = os.path.join(dataset_path, label, image_name)
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
images.append(image.flatten()) # Resmi düzleştirerek ekliyoruz.
labels.append(label)
return np.array(images), np.array(labels)
dataset_path = 'path_to_your_dataset'
images, labels = load_dataset(dataset_path)
Yukarıdaki kod örneğinde, ‘load_dataset’ fonksiyonu belirtilen veri seti yolundaki resimleri okuyarak bunları grileştirerek düzleştirmekte ve bir numpy dizisi olarak döndürmektedir. Şimdi, gelen verilerle çalışmaya başlamak için bir veri kümesine sahip olduğumuza göre, özdeğer ve özvektörleri hesaplamaya geçelim.
Özdeğer ve Özvektör Hesaplama
Eigenfaces teknolojisi, özdeğer ayrıştırması (eigenvalue decomposition) teorisine dayanır. Bu noktada, yüz resimlerinin bir matris oluşturarak, bu matrisin özdeğerlerini ve özvektörlerini çıkartmamız lazım. Özdeğerler, verideki çeşitliliği ölçerken, özvektörler ise bu çeşitliliğe karşılık gelen yönleri temsil eder.
Özdeğerleri ve özvektörleri hesaplamak için NumPy kütüphanesini kullanabiliriz. Aşağıda, yüz resimlerinden oluşan matrisin özdeğer ve özvektörlerinin nasıl hesaplanacağına dair bir örnek verilmiştir:
from numpy.linalg import eig
covariance_matrix = np.cov(images.T)
# Özdeğerler ve özvektörleri hesaplama
eigenvalues, eigenvectors = eig(covariance_matrix)
# Özdeğerleri sıralama
sorted_indices = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[sorted_indices]
eigenvectors = eigenvectors[:, sorted_indices]
Bu kod parçası, yüz resimlerinin kovaryans matrisini oluşturarak, bu matris üzerinden özdeğerler ve özvektörler hesaplamaktadır. Özdeğerler, sıralanarak büyükten küçüğe doğru sıralanmış olur, bu da işlem sırasında hangi yönlerin daha fazla bilgi taşıdığını anlamamıza yardımcı olur.
Eigenfaces Çıkarma
Şimdi, elde ettiğimiz özvektörlerden belirli sayıda en yüksek özdeğere sahip olanları alarak Eigenfaces’leri oluşturabiliriz. Aşağıdaki kod, bu aşamayı gerçekleştirmektedir:
num_eigenfaces = 10 # Kullanılacak Eigenface sayısı
mean_face = np.mean(images, axis=0)
eigenfaces = eigenvectors[:, :num_eigenfaces] # İlk birkaç eigenvector
Bu kod parçasında, belirli sayıda eigenfaces çıkararak, ortalama yüzü hesaplamaktayız. Buradan sonra, mevcut yüzleri bu eigenfaces’lerle karşılaştırarak ve uygun projeksiyonların yapılmasıyla yüz tanıma sürecine geçebiliriz.
Yeni Yüzlerin Tanınması
Artık yüz tanıma sistemimizi kullanmak üzere gereken tüm adımları tamamladık. Yeni bir yüzü tanımak için, yüz resmi yine grileştirildikten sonra, Eigenfaces’lerin proje edilmesi gerekmektedir. Aşağıda bunu gerçekleştiren bir örnek kod bulabilirsiniz:
def recognize_face(new_face):
projected = new_face - mean_face
weights = np.dot(projected, eigenfaces)
return weights
# Yeni bir yüzü tanıma
new_face = cv2.imread('path_to_new_face', cv2.IMREAD_GRAYSCALE).flatten() # Düzleştir
matched_weights = recognize_face(new_face)
Bu fonksiyon, yeni bir yüz resmi alarak, kendi proje alanımızda Eigenfaces’e göre ağırlıklarını hesaplar. Bu ağırlıklar, daha önce tanımladığımız yüzlerle karşılaştırıldığında hangi yüzün ne kadar benzer olduğunu anlamamıza yardımcı olur.
Sonuç ve Teşvik
Eigenfaces yöntemi ile yüz tanıma sürecini adım adım incelediğimiz bu makalede, Python ile temel bir yüz tanıma sistemi kurmanın temellerini öğrenmiş olduk. Bu yöntem, başlangıç seviyesindeki geliştiricilere, bilgisini genişletme fırsatı sunmakta ve daha ileri düzey sistemlere geçmeleri için sağlam bir temel oluşturmaktadır.
Yüz tanıma teknikleri ve makine öğrenmesi konularında daha fazla deneyim kazanmak için farklı veri setleri kullanarak pratik yapmayı ve çeşitli algoritmalarla karşılaştırmayı öneririm. Bu yazıda bahsettiğimiz tüm adımları uygulayarak ve denemeyi sürdürerek kendi projelerinizi geliştirebilir ve bu alanda daha fazla bilgi edinebilirsiniz.
Unutmayın ki, teknoloji sürekli olarak gelişmekte ve yüz tanıma gibi konular her zaman yeniliklerle doludur. Bu nedenle her zaman güncel bilgiler takip edilmeli ve öğrenim süreci devam ettirilmelidir. Şimdi kendi projelerinizi geliştirme zamanı!