import os
from feat import Detector
import matplotlib.pyplot as plt
Giriş
Türkiye Cumhuriyet Merkez Bankası Başkan Yardımcısı Cevdet Akçay, 2024 yılının ilk Enflasyon Raporu bilgilendirme toplantısında şunları aktarmıştı:
İçinde çalıştığımız setting’de, ağırlıklı ortalama fonlama maliyeti mevduat faizi linki kopmuş, politika faizi enflasyon linki kopmuş, faiz kur linki kopmuş…
Konuşmasına şöyle devam etmişti:
Biz yedi aydır bu kopan linkleri tekrar ihdas ediyoruz. Bu linkler tekrar ihdas edilecek. Veriler birikecek. Alan verileri kullanacaksınız, modelleme yapacaksınız. Oradan da 36’dan 38’e çıkma ihtiyacı, çok zor. Modelleme iyi bilen arkadaşlar bu dediğimi çok iyi anlayacaktır. Çok zor değil imkansıza yakın.
Peki, bu konuşma sırasında Akçay’ın yüzünde hangi duygular oluştu?
X (Twitter) profil fotoğraflarını veri seti olarak kullandığımız İstanbul İlçe Belediye Başkanlarının X (Twitter) Profillerindeki Duygu Dağılımı başlıklı çalışmada Py-Feat
kütüphanesinden faydalanmıştık. Video üzerinden analiz yapacağımız bu çalışmada yine Py-Feat
kütüphanesinden faydalanacağız. Kütüphane ile ilgili detaylı bilgi için ilgili çalışma incelenebilir.
Kullanılacak Kütüphaneler
Videonun İçe Aktarılması
Çalışmada kullanacağımız video Youtube’dan indirilebilir.
cbrt_cevdet_akcay.mp4
isimli video içinde bulunduğumuz dizindedir.
= os.getcwd()
current_dir = os.path.join(current_dir, 'cbrt_cevdet_akcay.mp4') video_path
Video, Frame ve FPS Kavramlarının Tanımlanması
Bir video temel olarak bir dizi fotoğrafın belirli bir hızda birbirini takip ederek oynatılmasıdır. Her bir fotoğraf karesine frame deniliyor. FPS (Frames Per Second) ise saniyedeki kare ya da frame sayısıdır. Detaylı öğrenmek isteyenler için şuradaki videoyu tavsiye edebilirim.
Duyguların Tespit Edilmesi ve Görselleştirilmesi
= Detector(
detector ='retinaface',
face_model='mobilefacenet',
landmark_model='xgb',
au_model='resmasknet',
emotion_model='img2pose',
facepose_model='facenet'
identity_model
)
= detector.detect_video(video_path, skip_frames=24)
video_prediction print(video_prediction.head())
skip_frames
parametresi video üzerindeki karelerin işlenmesinde atlanacak kare sayısını belirtir. Bir video genellikle saniyede çok sayıda kare içerir ve bu kareler arasında önemli ölçüde benzerlik olabilir. Özellikle video çok yüksek çözünürlüklü veya uzunsa her kareyi işlemek oldukça yoğun bir hesaplama gerektirebilir. Ancak bazı uygulamalarda her kareyi işlemek gerekli olmayabilir. Bu durumda, skip_frames
kullanılabilir. skip_frames
parametresi, belirli sayıda kareyi atlayarak işlem süresini azaltır. Örneğin, skip_frames=24
ile her 24. kareye işlem yapılır.
Duygular aşağıdaki gibi çekilebilir.
= video_prediction.emotions
akcay_emotions print(akcay_emotions.head())
Duyguları görselleştirelim.
= plt.subplots(nrows=7, ncols=1, figsize=(10, 20))
fig, axes for i, (emotion, color) in enumerate(zip(akcay_emotions.columns, ['r', 'g', 'b', 'c', 'm', 'y', 'k'])):
= akcay_emotions.plot(y=emotion, ax=axes[i], color=color, legend=False)
ax
ax.set_ylabel(emotion.capitalize())
0].set_title("TCMB Başkan Yardımcısı Cevdet Akçay'ın 'Link Kopmuş' Dediği Konuşmasındaki Duygular", fontsize=14)
axes[
plt.tight_layout() plt.show()
Her karede hangi duygunun daha yüksek olduğuna bakalım.
= akcay_emotions.idxmax(axis=1)
max_emotion_per_row = max_emotion_per_row.value_counts(normalize=True) * 100
emotion_distribution
=(10, 6))
plt.figure(figsize='bar', color='skyblue')
emotion_distribution.plot(kind'Her Karede En Yüksek Duygu Kategorisinin Dağılımı')
plt.title('Duygu Kategorisi')
plt.xlabel('Yüzde (%)')
plt.ylabel(=0)
plt.xticks(rotation='y', linestyle='--', alpha=0.7)
plt.grid(axis
plt.tight_layout() plt.show()
Gelecek içeriklerde görüşmek dileğiyle.