בגרסת 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?
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?
מתל"ב מפגר בדורות אחרי OpenCV
השבמחקהתכוונת כנראה לומר, מתל"ב מפגר מספר דורות אחרי ה OpenCV.
מחקצודק (-:
הגזמתם לגמרי.
מחק1) בדיקה קטנה תגלה ש-matlab מריצים ממשק דומה מאוד ל-OpenCV, וכנראה OCV מסתתר מאחורה.
2) אם אפשר להרים בקלות קונספט להדגמה תוך כמה דקות, להפוך אותו לקוד C, ולשפר או לכתוב מחדש ב-OCV היכן שצריך, מה רע ?
בעבר למתל"ב אכן היה יתרון בתחומים עיבוד תמונה וראיה ממוחשבת בהרמת קונספט להדגמה מהירה אך נכון להיום כבר לא.
מחקישנן היום ספריות חופשיות ב C וכן כלים אחרים המאפשרים פיתוח מהיר ויעיל מבלי לבזבז זמן על מימוש מיותר במתל"ב.
שים לב שגם Nabney מפתח ה NetLab הודיע שברצונו
להגר ממתל"ב לג'אווה כי גם הוא מבין שהתעשייה
נוטה היום יותר לכיוון פיתוח ישיר בשפות על.
אתם רציניים ?
השבמחקפתרון מבוסס Haar Cascades רק עכשיו שולב במתל"ב ?
קיים כבר שנים ב OpenCV (-:
אולי ב-OpenCV יש כרגע פיצ'רים שלא קיימים ב-MATLAB, והוא כמובן חינמי - אך לא כולם כותבים בקלות קוד C, ולכן חבל לוותר על שפה עילית כמו MATLAB כשכל מה שרוצים זה לבצע בדיקת היתכנות. וכפי שנכתב למעלה באחת התגובות - אם אפשר לבוא ולקחת את קוד ה-MATLAB הזה ולייצר ממנו אוטומטית קוד C, אז התהליך בכלל משתלם.
השבמחקMATLAB הוא שפה עלית והרבה יותר קל לתכנן ולנתח בו אלגוריתם מאשר בשפת C. עבור יכולות חסרות ב-MATLAB, ניתן כיום להריץ קוד OpenCV מתוך MATLAB (אולי רועי ירחיב על זה בבלוג עתידי). עוד אפשרות לא רעה בכלל היא להשתמש בשפת Python שמאפשרת גישה ל-OpenCV בצורה נוחה הרבה יותר מ-C ועם יכולת לייצר קוד production, בניגוד ל-MATLAB.
השבמחקמתל"ב יקרה מידי, מזל שיש לי עותק לא חוקי (-;
השבמחקגם מ-MATLAB אפשר להגיע לקוד production, עם הכלים MATLAB Coder
השבמחקו-Embedded Coder. אבל זה כבר נושא לפוסט אחר...
רועי שלום,
השבמחקיוזמה מבורכת, אף על פי כל מה שכותבים כאן זה יעזור בפיתוח מהיר יותר. השאלה העיקרית שלי היא האם הקסקדה עברה אימון/טיונינג ייחודי או שפשוט השתמשתם בקבצים המאומנים של OCV?
הקסקדה אכן משתמשת בסט המאומן של OpenCV. אם רוצים לאמן לפי מודל סיווג אחר מזה ש-MATLAB תומכת בו, יש להשתמש ביישומי האימון המסופקים ב-
מחקOpenCV 2.1.
בלי קשר, חשוב להדגיש דבר נוסף בקשר לתגובות לעיל - יש הבדל בין תוכנה חינמית לתוכנה שעולה כסף. אולי האחרונה עולה יותר, אך יש לה "אבא ואמא" שדואגים לה ותומכים בה. במקרה הנדון, לרשות המשתמשים ב-MATLAB עומד מערך המהנדסים שמעסיקה סיסטמטיקס.