יום שני, 23 ביולי 2012

A Guide to GUIDE | פיתוח ממשקים גרפיים ידידותיים למשתמש בעזרת MATLAB

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

את ה-GUI המיוחד המשמש לפיתוח GUIs מעלים באמצעות פקודת guide ובחירה באופציה של Blank GUI (ברירת המחדל). לצורך הדוגמה, אפתח בעזרת ה-GUI המיוחד GUI בו יוצגו 10 מספרים אקראיים (מפולגים אחיד בין 0 ל-1) באמצעות גרף, בכל פעם בה המשתמש ילחץ על לחצן ייעודי. על מנת להגדיר את השטח בו יוצג הגרף, יש לבחור בלחצן ה-Axes ב-GUI המיוחד, ולצייר מרובע על משטח העבודה. על מנת למקם לחצן ייעודי אשר לחיצה עליו תביא להצגת הגרף בשטח שהוגדר, יש להכניס למשטח העבודה לחצן שכזה (על ידי בחירה בלחצן Push Button וציור מלבן על משטח העבודה).

ניתן לשנות בקלות את גודל ה-GUI, צבע הרקע או הכיתוב על הלחצן. למשל, לצורך ביצוע המשימה האחרונה, יש להקליק על הלחצן פעמיים עם העכבר, ולשנות את השדה String (אני שיניתי ל-Push here to display plot). התוצאה בינתיים נראית כך:


כעת, כל שנותר הוא ללחוץ על לחצן ה-play הירוק (מופיע בצד ימין בשורה העליונה), לאשר את ההודעה הקופצת אל המסך (אחרי קריאתה...) ולתת שם ל-m file שיווצר ויכיל את הפקודות אשר בעבר הייתם חייבים לכתוב ידנית לצורך קבלת GUI דומה.

כפי שתשימו לב, ה-GUI שקיבלתם בהחלט נראה כמצופה, אבל לא ממש מתפקד. על מנת שלחיצה על לחצן ה- Push here to display plot תביא להצגת הגרף, יש להגדיר ללחצן זה מה אמור להתבצע כאשר לוחצים עליו. חיזרו ל-GUI המיוחד, הקליקו עם המקש הימני של העכבר על הלחצן, וביחרו ב-View Callbacks ואז ב-Callback. תוצאת פעולה זו היא מיקום של הסמן בקוד ה-MATLAB שנוצר לא מזמן, בדיוק בשורה שמתחתיה יש לכתוב את הקוד שצריך להתבצע בעת לחיצה על הלחצן. במקרה שלנו:
plot(rand(10,1));

כעת, אם תריצו את קוד ה-MATLAB (באמצעות F5), תקבלו שוב את ה-GUI, אך הפעם הוא גם יתפקד כהלכה:


זו היתה דוגמה בסיסית לקלות בה ניתן היום לפתח GUIs בסביבת MATLAB. דוגמאות שימושיות נוספות ניתן למצוא בקישור הזה. לסיום, אציין כי באפשרותכם לקמפל את ה-GUI שפיתחתם ולהעביר אותו למחשבים אשר אין בהם התקנה של MATLAB (וזאת באמצעות כלי שנקרא MATLAB Compiler).

האם אתם מפתחים GUIs באמצעות GUIDE או באמצעות פקודות? האם יש GUI משוכלל שפיתחתם ותרצו להשוויץ בו?

יום ראשון, 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?