הח״כ שלא צחק – מזהים רגשות בתמונות של חברי הכנסת היוצאת

הח״כ שלא צחק – מזהים רגשות בתמונות של חברי הכנסת היוצאת

הפעם החלטתי לפנות למכנה המשותף הנמוך ביותר בין הקוראים הפוטנציאלים של הבלוג: פוליטיקה. החלטתי להריץ חיפוש תמונות בגוגל על כל הפוליטיקאים שכיהנו בכנסת העשרים וארבע, להוריד את תוצאות החיפוש הראשונות ולהריץ עליהם אלגוריתם זיהוי רגשות. לאחר מכן בניתי אתר קטן המציג את התוצאות ועונה על שאלות מרתקות כמו:

  1. מי הח״כ הכי זועף?
  2. הכי שמח? והכי פחות שמח?
  3. איזה רגשות מראה נפתלי בנט בתמונות שלו?
  4. האם זה נכון שיעקב ליצמן הוא חבר הכנסת הכי קול?

* אזהרה: אין הכוונה שהח״כ הוא באמת הכי זועף/שמח/רגוע וכו׳ אלא שעל פי התמונות שמגיעות למקום הראשון בגוגל + אלגוריתם זיהוי הרגשות של אמזון הח״כ קיבל את הציון הנ״ל.

חלק ראשון – מורידים את התמונות

קודם כל אנחנו צריכים רשימה של חברי הכנסת המכהנים (במידה ואתם לא כתבים פוליטיים תופתעו לגלות שהיו 155 ח״כים בכנסת היוצאת – נכון לעכשיו…). אני העתקתי את הרשימה מהערך בויקיפדיה ובעזרת סקריפט קצר הפכתי את זה לקובץ JSON של שם חבר כנסת למפלגה.

בשלב הבא אנחנו מבצעים אוטומציה פשוטה של תהליך פתיחת הדפדפן, חיפוש תמונות בגוגל עבור כל חבר כנסת ושמירת התמונה בקובץ מקומי. את זה ביצעתי בעזרת הקוד הבא:

בתחילת הקוד אני דואג למקבל את התהליך כך שכל פעם ירוצו 20 חברי כנסת במקביל (ולא כולם בבת אחת) ע״י מנגנון הגנה פשוט של משתנה activeDownload, זה עובד בjavascript בגלל שהמערכת עובדת עם events ולא עם thread ולכן לא צריך מנעול על משתנה פרימיטיבי. לאחר מכן אני בונה את הURL של חיפוש תמונה בגוגל, פותח דפדפן בעזרת puppeteer וניגש לURL ואז עובר על התמונות בעזרת הxpath לוחץ על כל תמונה ומחכה כמה שניות עד שהיא תפתח בגדול לפניי שאני מוריד את התמונה הגדולה ושומר בשם של הקובץ את המקור של התמונה.

התמונות עצמם מתחלקות לתמונות של base64 עבורם יש לי כבר את המידע ואני יכול לשחק מעט עם הסטרינג ולשמור את המידע ולתמונות עם מקור URL אותם אני מוריד ע״י פונקציית עזר שמורידה מחדש את התמונה.

הבעיה העיקרית שנתקלתי בהורדה זה שעבור חבר הכנסת אלי כהן חיפוש רגיל הביא תוצאות של אלי כהן המרגל, פתרתי זאת ע״י שינוי מילות החיפוש ל: ״חבר הכנסת אלי כהן״.

חלק שני – מזהים את הרגשות

בשלב זה אני נותן לענן של אמזון לעשות את העבודה ואני רק משלם לו על שימוש פר תמונה, כך שעבור 145 חברי כנסת שלכל אחד הורדתי 30 תמונות כך שבסה״כ ניתחתי 4,350 תמונות והמחיר ששלימתי הוא באיזור $4.35 (או בקצרה דולר על כל אלף תמונות). כדי לעשות את זה בשלב הראשון אני מעלה את כל התמונות לbucket בs3 ולאחר מכן אני מריץ סקריפט קצר של זיהוי על התמונות ושומר את התוצאות בקובץ JSON.

סך הכל מדובר בביצוע של קריאות פשוטות לRekognitionClient מהaws-sdk. כאשר תמונה כמו:

האם יש לי עתיד בתור חבר כנסת?

אנחנו מקבלים את הניתוח הבא (השורות המודגשות הם הניתוח של הרגשות):

כאשר עבור כל רגש אנחנו מקבלים מספר בין 0 ל100 המייצג עד כמה הרגש זוהה בתמונה, לדוגמא בתמונה הזאת הרגש הכי חזק הוא שמחה שזוהה בוודאות של 95.79%. חשוב לציין שחיבור מידת הוודאות של כל הרגשות לא מגיע ל100 שכן אין תלות בין הזיוהיים השונים (בדרך כלל זה מגיע למספר באזור 112-114). שימו לב שמלבד הרגשות אנחנו מקבלים גם הרבה מידע על הגיל, האם יש זקן, משקפי שמש, מיקום הפרצוף והחלקים של הפרצוף בתמונה וכו׳.

חלק שלישי – תצוגה

אחריי שהורדתי את המידע כתבתי סקריפט קצר שהכין טבלת אקסל קטנה המראה את ממוצע הרגשות של כל חבר כנסת. ולאחר ששיחקתי קצת עם הטבלה והסתכלתי על התמונות הבנתי שיש כאן פוטנציאל לפלטפורמה אינטראקטיבית קטנה המציגה את הטבלה עם אפשרויות למיון, לצורך כך החלטתי לכתוב אתר React קטן.

התחלתי בלהוציא את כל המידע שאני צריך לקובץ JSON בו יהיה המידע של הטבלה (שורות ועמודות) והתמונות עבור כל חבר כנסת כולל ערכי הרגשות שהאלגוריתם זיהה. כתבתי quick & dirty סקריפט שמוציא את זה:

בסקריפט עבור כל חבר כנסת אני עובר על כל קבצי ניתוח התמונה שלו, מדלג על כל תמונה שזוהה בא יותר מפרצוף אחד, מעגל את תוצאות הרגש, שומר את המידע עבור כל תמונה, מחשב ממוצע רגשות ומוסיף פרמטר של מפלגה (כדאי שיהיה ניתן לסנן בחיפוש רק את חבריי מר״צ). לאחר מכן אני בונה את העמודות ושומר את הכל בקובץ JSON.

את דף האינטרנט עצמו פיתחתי בעזרת mdbreact שהוא מעטפת נחמדה של bootstrap על React 

(יש להם אחלה כלים ליצור טבלה הניתנת למיון במינימום קוד). והשתמשתי בreact-chart-js בשביל לשרטט תרשים PIEשל רגשות. מכיוון שהמטרה של הפוסט הנוכחי היא זיהוי רגשות ומשחק עם תמונות ולא פיתוח ווב בחרתי לא לעבור על הקוד, למעוניינים ניתן לראות את קוד המקור כאן.

מוזמנים להיכנס ולשחק באתר הסופי בכתובת kneset24.route42.co.il

רעיונות לעתיד

  • להוריד נתונים על כנסות עבר ולראות כיצד הרגשות שהפוליטיקאים מראים בתמונות משתנות (אולי בליכוד של שנות ה70 היו יותר עצובים?)
  • הורדתי הרבה תמונות של פוליטיקאים בהם הם מצולמים (או שהוספו בעריכה) עם פוליטקאים אחרים – בניתוח הזה פשוט התעלמתי מהם, אבל זה יכול להיות מעניין ליצור גרף קטן שמראה איזה פוליטיקאי מצטלם עם איזה פוליטיקאי אחר.
  • האם כלי תקשורת שונים בוחרים תמונות שונות של פוליטיקאים?
  • ניתוח רגשות פר מפלגה.

תודה מיוחדת לפרופסור לב מוצ'ניק מבית הספר למנהל עסקים באונברסיטה העברית ששיחות איתו נתנו לי השראה לפרויקט.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

*