from facer.facer import load_images, detect_face_landmarks, create_average_face
import matplotlib.pyplot as plt
import os
Giriş
1800’lü yıllarda Francis Galton, belirli bir grup insanda ortak olan yüz özelliklerini görselleştirmek amacıyla birçok farklı bireyin yüz fotoğraflarını tek bir fotoğraf filmi üzerine yansıtmış ve bu yüzlerin kompozit görüntülerini oluşturmuştur.
Bugün benzer bir yaklaşım, belirli bir grup insanın -örneğin, milletvekilleri gibi- ortak yüz özelliklerini incelemek amacıyla modern tekniklerle gerçekleştirilebilir.
Bu uygulamada, 28. dönem AKP, CHP, DEM ve MHP milletvekillerinin fotoğraflarını kullanarak parti ve cinsiyet kategorisinde ortalama bir yüz yaratacağız.
Kullanılacak Kütüphaneler
Veri Seti
Uygulamanın veri seti olan fotoğraflara buradan ulaşabilirsiniz.
Reponun Klonlanması
Uygulamayı GitHub’ta bulunan şu repo yardımı ile yapacağız.
Öncelikle repoyu proje klasörümüze klonlayalım.
git clone https://github.com/johnwmillr/facer.git Facer
Klonlama işleminden sonra bulunduğumuz dizinde sadece Facer
klasöründeki facer
klasörünü bırakabiliriz. facer
klasörünün içinde ise facer.py
ve utils.py
dosyaları kalabilir.
Yukarıdaki işlemden sonra aşağıdaki gibi zip’li dosyayı indirip unzip’liyor ve dosyayı bulunduğumuz dizinde açtığımız model
isimli klasöre taşıyoruz.
curl -O http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bunzip2 shape_predictor_68_face_landmarks.dat.bz2
mkdir model
mv shape_predictor_68_face_landmarks.dat model
TBMM’nin web sitesinden alınan görseller .jpe
formatında olduğu için facer
klasöründe bulunan facer.py
dosyasındaki glob_image_files()
fonksiyonuna .jpe
uzantısını ekliyoruz.
Ortalama bir yüze ulaşmak için uygulanan adımlar burada detaylı bir şekilde veriliyor.
Ortalama Yüzün Hesaplanması
= [
folders './tbmm_28/akp/kadin',
'./tbmm_28/chp/kadin',
'./tbmm_28/dem/kadin',
'./tbmm_28/mhp/kadin',
'./tbmm_28/akp/erkek',
'./tbmm_28/chp/erkek',
'./tbmm_28/dem/erkek',
'./tbmm_28/mhp/erkek'
]
for folder in folders:
= load_images(folder)
images
= detect_face_landmarks(images)
landmarks, faces = create_average_face(faces, landmarks, save_image=False)
average_face
= 'kadin' if 'kadin' in folder else 'erkek'
gender = folder.split('/')[2]
party = f'{party}_{gender}.jpg'
file_name
plt.imshow(average_face)'off')
plt.axis('imgs', file_name))
plt.savefig(os.path.join( plt.show()
Gelecek içeriklerde görüşmek dileğiyle.