‏הצגת רשומות עם תוויות Viola-Jones. הצג את כל הרשומות
‏הצגת רשומות עם תוויות Viola-Jones. הצג את כל הרשומות

יום רביעי, 5 בדצמבר 2012

שובם של ה-System Objects

בשלוש שנות קיומו של הבלוג הזה, השתדלתי כמה שפחות למחזר פוסטים. אבל בפוסט הנוכחי אחרוג ממנהגי, מכמה סיבות:
1. חלפו שנתיים וחצי מאז הפוסט האחרון בנושא שבו ארצה לדון
2. בתקופה הזו הנושא התפתח מאוד
3. חברת MathWorks רואה בנושא הזה מרכיב חשוב בתוכניותה לעתיד
4. מעט מאוד אנשים נחשפו לנושא הזה עד כה (בכל פעם שאני שואל את הקהל שאני ניצב מולו האם אנשים מכירים את הנושא, בודדים, אם בכלל, משיבים "כן").

הנושא הינו System Objects, אלגוריתמים העומדים מאחורי אובייקטים הקיימים בסביבת MATLAB כבר 6 גרסאות (מאז גרסת R2010a). כשכתבתי על כך לפני שנתיים וחצי, היו קיימים רק כ-140 אובייקטי מערכת, ורק בתחומים עיבוד אות, עיבוד וידאו, עיבוד תמונה וראיה ממוחשבת. כיום, קיימים כבר כ-330 אובייקטי מערכת, המשמשים ל:
1. עיבוד אות - מעל 95 אובייקטי מערכת ב-DSP System Toolbox
2. עיבוד וידאו, עיבוד תמונה וראיה ממוחשבת - מעל 60 אובייקטי מערכת ב-Computer Vision System Toolbox
3. פיתוח השכבה הפיזית של מערכות תקשורת - מעל 105 אובייקטי מערכת ב-Communications System Toolbox
4. תכנון, סימולציה וניתוח של מערכות מכ"מ, מערכות Ultrasound ומערכות תקשורת מרובות-אנטנות - מעל 60 אובייקטי מערכת ב-Phased Array System Toolbox

לאלה מכם המכירים Simulink, ה-System Objects מאפשרים גישה לחלק משמעותי מאלגוריתמים אשר בעבר היה ניתן להפעיל רק באמצעות Simulink, כך שבגישת אובייקטי המערכת ניתן כיום להשתמש באותם אלגוריתמים ללא צורך בידע ב-Simulink או ברישיון לכלי. בהקשר הזה יודגש כי קיימים גם אובייקטי מערכת אשר אין להם בלוק תואם בסביבת Simulink (למשל, אובייקט המערכת המאפשר גילוי פנים בתמונה, אשר נידון בעבר בבלוג זה). כלומר, שימוש ב-System Objects מאפשר לכם להשתמש באלגוריתמים רבים אשר לא זמינים עבורכם בדרכים אחרות !

להבדיל מפונקציות MATLAB, אשר הינן מסוג "y שווה לפונקציה של x", ה-System Objects מסוגלים לעבוד עם קלט משתנה (Streams) וכן מסוגלים לספק מידע על המצבים הפנימיים של הפונקציה. בכך הם מרחיבים את שפת MATLAB באופן המאפשר למדל מערכות דינמיות באמצעות שפה טקסטואלית, ומהווים מעין "גשר" המקשר בין MATLAB ל-Simulink. כמובן שאם כתבתם אלגוריתם ב-MATLAB העושה שימוש ב-System Objects, אתם מוזמנים לנסות להכניס אותו לתוך בלוק ה-MATLAB Function ב-Simulink על מנת לשלבו כחלק ממודל בסביבה הזו.

מבחינת ביצועים – נניח ואתם מעוניינים לבצע Edge Detection לפריימים השונים בסרטון וידאו. בעוד ששימוש בפונקציית edge בתוך לולאה העוברת בין הפריימים השונים יהיה כרוך בקריאה לאותה פונקציה בכל פעם מחדש (דבר אשר כרוך באיתחולים חוזרים ונישנים), עבודה עם אובייקט המערכת vision.EdgeDetector ומתודת step אמורה להיות יעילה יותר. בנוסף, כמה System Objects המשתייכים ל-Communications System Toolbox ול-Phased Array System Toolbox ניתנים להאצה על ידי שימוש ב-GPU (הכרטיס הגרפי של המחשב), תוך שינוי מזערי של הקוד הכתוב.  אם כך, System Objects אמורים להביא לקיצור זמני הריצה של אלגוריתמים ! 

System Objects עשויים להקל על אלה מכם המנסים לבצע סימולציות Fixed-Point בסביבת MATLAB, וכן על מי שמנסה להמיר בקלות קוד MATLAB לקוד C או HDL. כבר כיום יש תמיכה ביצירת קוד C/HDL מתוך מגוון System Objects - למשל, כל
ה-System Objects שבגרסת R2012b של ה-Communications System Toolbox נתמכים ליצירה אוטומטית של קוד C. בהקשר זה, חשוב לציין כי החל מגרסת R2011b יכול כל אחד לפתח System Objects משלו, אשר יוכלו להתממשק אל אלה שפיתחה MathWorks, והחל מגרסת R2012a ניתן להמיר לקוד C כאלה אובייקטי מערכת שהמשתמש פיתח.


System Objects הוא נושא שאני ממליץ לכל אחד להתחיל ללמוד אותו וליישם אותו, שכן כבר היום הם נכללים בחלק גדול מכלי MathWorks - פרט להיותם חלק ממשפחת ה-System Toolboxes (אותם ארבעה כלים שהוזכרו לעיל ואשר קיימים מגרסת R2011a), יש כיום אובייקטי מערכת גם בכלים Image Acquisition Toolbox (אובייקט המאפשר רכישת תמונה הנתמך ליצירה אוטומטית של קוד C) ו-HDL Verifier (אובייקט המאפשר לבצע סימולציות FPGA-in-the-loop תוך שימוש ב-MATLAB ו-FPGA בלבד). וכפי שנכתב קודם, MathWorks מתכוונת להמשיך לפתח את הנושא הזה בשנים הבאות.

לרשימת ה-System Objects בארבעת ה-System Toolboxes המוזכרים לעיל, לחצו על הקישורים הבאים:
DSP
Computer Vision
Communications
Phased Array

יום ראשון, 1 ביולי 2012

גילוי פנים בעזרת MATLAB

בגרסת R2011a של כלי MathWorks נוסף למשפחת המוצרים כלי חדש – Computer Vision System Toolbox, או בקיצור - CVST. כלי זה משמש לתכנון וסימולציה של מערכות ראיה ממוחשבת ועיבוד וידאו, באמצעות שלוש דרכים:

1. בלוקים לעיבוד וידאו וראיה ממוחשבת בסביבת Simulink – מדובר למעשה בבלוקים שהרכיבו את הכלי שנקרא בעבר Video and Image Processing Blockset
2. סיסטם אובג'קטס - אשר מאפשרים גישה לחלק משמעותי מאותם הבלוקים המוזכרים לעיל, אך ללא צורך ברישיון Simulink או בידע בעבודה עם Simulink
3. אלגוריתמים יעודיים חדשים לראיה ממוחשבת

דוגמה למרכיב השלישי של ה-CVST הובאה בפוסט של אריאל מלפני חודש, ולכן אתמקד היום במרכיב אחר – המרכיב השני.

System Objects קיימים ב-MATLAB כבר מאז R2010a, ונידונו כאן בעבר. אחד מה-System Objects החדשים שנוספו בגרסת R2012a של ה-CVST הוא ה-CascadeObjectDetector, המאפשר לבצע גילוי פנים באמצעות אלגוריתם Viola-Jones. שימו לב שלא מדובר בזיהוי פנים, אלא בגילוי פנים (יודעים שיש פנים בתמונה, לא יודעים של מי הפנים). בנוסף, חשוב להדגיש שהאלגוריתם גם יכול לסייע במציאת אלמנטי גוף אחרים, שאינם פנים – למשל: עיניים, אף, פה או פלג גוף עליון.

האלגוריתם ממומש בצורה של System Object על מנת שיוכל לאפשר גילוי של פנים בסדרת תמונות או בסרט וידאו, ולא רק בפריים בודד. כפי שניתן לראות בדוגמה, הפלט של הפעלת האלגוריתם (באמצעות המתודה step) על גבי תמונה (של חברי הצוות שפיתח את ה-CVST) הינו מערך של bounding boxes – ריבוע סביב כל פנים שזוהו בתמונה. ואת הריבועים הללו ניתן לצייר על התמונה באמצעות ה-System Object של ShapeInserter.

קוד המדגים גילוי פנים (לחצו להגדלה)

חשוב להדגיש שהחל מגרסת R2012a, הכלי היחיד (פרט ל-MATLAB) שנדרש לצורך הפעלת ה-CVST הוא ה-Image Processing Toolbox (עד אז היה צורך גם ב-DSP System Toolbox וב-Signal Processing Toolbox). למידע נוסף על יכולות עיבוד הוידאו בסביבת MATLAB באמצעות ה-CVST, ה-Image Processing Toolbox וה-Image Acquisition Toolbox, לחצו לצפיה בסרטון של 5 דקות.

ואפרופו גילוי פנים – נחשפתי לאחרונה לכתבה נחמדה בנושא הדרכים להתחמקות מגילוי הפנים שלכם על ידי הטכנולוגיות הקיימות.

האם ידעתם על היכולת לבצע גילוי פנים באמצעות ה-CVST? האם בכלל הכרתם את ה-CVST?