"אין שאלות מטומטמות... יש רק אנשים מטומטמים..." (אל תעלבי, אני סתם צוחק וזה לא מכוון אלייך. זה סתם משפט ציני שהוא היה אומר לכל סטודנט שהתחיל את השאלה שלו במשפט: "אולי זו שאלה מטומטמת אבל...". בקיצור, נוסטלגיה...).
מי שכתב את הספריה - או יותר נכון, האנשים הרבים שפיתחו אותה - ניסו ליצור חבילה כמה שיותר שלמה עבור התחום של ראיה ממוחשבת שתכלול גם עיבוד של פריימים בודדים וגם עיבוד של וידאו - כלומר, אלגוריתמים שפועלים על רצפים של פריימים בודדים או קבוצות והשוואה ביניהם.
למשל, אין שום משמעות באלגוריתם MOG עלתמונה בודדת. האלגוריתם הזה מיועד לשימוש על רצף של תמונות.
מצד שני, כדי למצוא מעגלים או קווים ישרים בתמונה - יש להשתמש באלגוריתם שעובד על פריים בודד בכל פעם. (אלגוריתם hough, למשל).
אין "דרך מקובלת" להשתמש בה כמו שאין דרך מקובלת להשתמש בפטיש - אפשר לדפוק איתו מסמר, אפשר לשבור איתו קיר ואפשר להשתמש בו בתור משקולת - זה ארגז כלים מאוד מאוד משוכלל ונח וכל אחד יכול להשתמש בו כראות עיניו.
הדרך הנכונה לדעתי להשתמש בחבילה הזאת (או בכל חבילה אחרת של ראיה ממוחשבת) היא קודם כל להבין איזה אלגוריתמים הם "יקרים" מבחינה חישובית (שזה קריטי באלגוריתמים של real time), אילו אלגוריתמים "זולים", מה בדיוק רוצים לעשות, מהו המפרט והתנאים ההכרחיים שחייבים לעמוד בהם ואיך הכי יעיל לבצע את זה.
למשל, במקרה שלך, אלגוריתם MOG הוא אלגוריתם זול יותר מ-HOUGH ולכן שימוש ב-MOG עדיף כשאפשר וגם אלגוריתם לזיהוי פנים דורש לא מעט חישובים.
מה זה אומר? שאם בוידאו שאת עובדת עליו יש כמה פריימים רצופים שזיהית שאין בו פנים, עדיף להשתמש ב-MOG ולראות האם בפריים שאחריו יש שינוי משמעותי ממה שהופיע בו קודם. (למשל, הגדרת סף של מספר פיקסלים סמוכים שהשתנו).
אם את מזהה שאין שינוי, אז אין טעם לבדוק אם פתאום הופיעו שם פנים, ואפשר לעבור מיד לפריים הבא במהירות ובקלות.
במידה ואת מזהה שינוי במספר גדול מספיק של פיקסלים מחוברים בפריים הנוכחי לעומת אלו שקדמו לו, רק אז את תצטרכי לבדוק האם יש פנים בתמונה (שזה אלגוריתם די יקר) ורק אז יהיה כדאי לך לבדוק האם יש שני מעגלים בקטרים כמעט זהים (עבור שתי העיניים) ובמידה שכן, לבדוק אם יש חוץ מהם עוד שני עיגולים בתוך אותם עיגולים שמצאת קודם. (קסקדה של אלגוריתמים).
אותו דבר בכיוון ההפוך - אם יש לך כמה פריימים שאת כבר יודעת שמופיעות בהם פנים, אז מספיק להריץ MOG כדי לדעת האם משהו השתנה והאם כדאי לעבור לאלגוריתמים יקרים יותר.
כמובן שיש כאן trade-off, כמו כל דבר בעולם ההנדסה.
אם אלגוריתם MOG זיהה שינוי, אז את בכל מקרה צריכה להריץ עכשיו אלגוריתם לזיהוי פנים - כלומר, הרצת MOG "סתם" וזה עלה לך בזמן.
השאלה היא מה יותר חשוב לך והאם את מוכנה לספוג פעם אחת ברצף של תמונות הרצת MOG מיותר בתמורה לזה שזה יחסוך לך הרצה של אלגוריתמים כבדים יותר במקרים אחרים.
בבעיה שאינה של real time, זמן החישוב הממוצע הוא שקובע ולא באמת אכפת לאף אחד כמה זמן עובד כל פריים.
בבעיה של real time, המצב שונה כיוון שיש זמן מקסימלי שמוכנים להשקיע בפריים ספציפי.
לכן, בבעיה של real time, בכל פריים את לא רוצה שיעבור יותר מפרק זמן קצר מאוד שאולי אלגוריתם של זיהוי פנים יעמוד בו אבל MOG ואז אלגוריתם של זיהוי פנים כבר לא יעמוד בו - ואז עדיף לך להעביר כל פריים ישירות במסווג של פנים\אין פנים בתמונה בלי להשתמש כלל ב-MOG.
בקיצור, יש כאן המון שיקולים וכמובן שמהירות חישוב לרוב תבוא על חשבון דיוק וכו'.
יש עוד אפשרות שלא כוללת בכלל opencv - אבל היא דורשת ידע בתחומים של למידת מכונה בדגש על רשתות נוירונים ויכולת לכתוב אותן בצורה יעילה.
אני לא חושב שזה רלבנטי לפרוייקט גמר. (אולי לעבודת מחקר של מאסטר או חלק מעבודת מחקר של דוקטורט...).