import os
import pandas as pd
from feat import Detector
from feat.plotting import imshow
import seaborn as sns
import matplotlib.pyplot as plt
Giriş
Yapılan çalışmaların yanında içinde profil fotoğrafının da olduğu sosyal medya kullanımı da önemli olabiliyor.
Bu uygulamada, İstanbul ilçe belediye başkanlarının X (Twitter) profillerindeki duygularını inceleyeceğiz.
Kullanılacak Kütüphaneler
Veri Setinin İçe Aktarılması
Buradan ulaşabileceğiniz fotoğraflar ilçe belediye başkanlarının X (Twitter) hesaplarından indirilmiştir.
= 'ilce_bb_profil/'
image_folder = [f for f in os.listdir(image_folder) if f.endswith('.jpg')] image_files
Duyguların Tespit Edilmesi ve Görselleştirilmesi
Duyguların tespitinde Py-Feat
kütüphanesinden faydalanacağız. Py-Feat
, görüntülerden ve videolardan yüz ifadelerini kolayca tespit etmek, yüz ifadesi verilerini önceden işlemek ve analiz etmek ve yüz ifadesi verilerini görselleştirmek için kapsamlı bir araç ve model seti sağlar. Py-Feat
önceden eğitilmiş çeşitli modelleri içeriyor.
= Detector(
detector ='retinaface', # face detection
face_model='mobilefacenet', # facial landmark detection
landmark_model='img2pose', # facial pose estimation
facepose_model='xgb', # action unit detection
au_model='resmasknet', # emotion detection
emotion_model )
Yüz tespiti (Face detection,
face_model
): Bir görüntüdeki veya bir videodaki insan yüzlerini algılama sürecidir. Yüz tespiti, bir görüntü içindeki yüz bölgelerini belirlemek için kullanılır. Parametre seçenekleri şunlardır:retinaface
,mtcnn
,faceboxes
,img2pose
veimg2pose-c
.Yüz belirleme (Facial landmark detection,
landmark_model
): Yüzün belirli noktalarını (örneğin, gözler, burun, ağız) tespit etme sürecidir. Bu noktalar genellikle gözbebekleri, burun ucundaki nokta, dudakların kenarları gibi önemli anatomik yerlerdir. Parametre seçenekleri şunlardır:mobilefacenet
,mobilenet
vepfld
.Yüz poz tahmini (Facial Pose estimation,
facepose_model
): Bir yüzün konumunu ve/veya dönüşünü belirleme sürecidir. Yüzün kaç derece eğik olduğunu, hangi yönde baktığını tahmin etmeyi içerir. Parametre seçenekleri şunlardır:img2pose
veimg2pose-c
.Hareket Birimi tespiti (Action Unit detection,
au_model
): Yüz ifadelerindeki belirli kas gruplarını temsil eden hareket birimlerini (action units) tanımlama sürecidir. Örneğin, kaşların kaldırılması, dudakların büzülmesi gibi. Parametre seçenekleri şunlardır:xgb
vesvm
.Duygu tespiti (Emotion detection,
emotion_model
): Bir kişinin yüz ifadesinden duygusal durumunu belirleme sürecidir. Örneğin, mutlu, üzgün, kızgın gibi duyguları tanımlama. Parametre seçenekleri şunlardır:resmasknet
vesvm
.
Bir döngü ile tüm fotoğrafları dahil edeceğiz ama öncesinde örnek bir fotoğraf ile sürece bakalım.
= 'uskudar_chp.jpg'
example_img + example_img) imshow(image_folder
detect_image()
ile yüklenen modelleri kullanalım.
= detector.detect_image(image_folder + example_img) single_face_prediction
Buradan duyguları çekelim.
= single_face_prediction.emotions emotions
Py-Feat
görselleştirme imkanı da sunuyor. Bunu iki farklı şekilde yapabiliriz.
= single_face_prediction.plot_detections(poses=True) figs
= single_face_prediction.plot_detections(faces='aus', muscles=True) figs
Tüm fotoğraflar için duyguları tespit edelim. Görseli ısı haritası ile yapacağız.
Öncesinde image_files
değişkenine tüm fotoğrafları aktarmıştık. Bunu kullanabiliriz.
= pd.DataFrame()
emotions_df
for image_file in image_files:
= detector.detect_image(image_folder + image_file)
face_prediction = face_prediction[face_prediction['FaceScore'] == face_prediction['FaceScore'].max()]
face_prediction_final = face_prediction_final.emotions
emotions = image_file.split('_')
ilce, parti = parti.split('.')[0]
parti 'image_file'] = ilce.upper() + '-' + parti.upper()
emotions[= pd.concat([emotions_df, emotions], ignore_index=True)
emotions_df
= emotions_df.set_index('image_file')
emotions_df = emotions_df.columns.str.upper() emotions_df.columns
Döngüde bulunan face_prediction_final
değişkenini birden fazla yüz tespiti olduğu için oluşturdum. Büyükçekmece belediye başkanının profilinde kedi de bulunmaktadır.
= 'buyukcekmece_chp.jpg'
example_img + example_img) imshow(image_folder
Isı haritası ile duyguları gösterebiliriz.
=(10, 12))
plt.figure(figsize='Reds', annot=False, linewidths=.5)
sns.heatmap(emotions_df, cmap'İstanbul İlçe Belediye Başkanları X (Twitter) Profilleri Duygu Dağılımı')
plt.title(=False, bottom=False)
plt.tick_params(left'')
plt.ylabel( plt.show()
Profil fotoğraflarında doğal olarak en güçlü duygunun happiness
olduğunu görüyoruz. neutral
pozlar da kendini göstermektedir.
Gelecek içeriklerde görüşmek dileğiyle.