פלטפורמות SoC מתכנתות לגמרי עוזרות להאיץ את ה-OpenCV בראייה משובצת

פרננדו מרטינז ואלינה וחוזה רוברטו אלוורז, Xilinx

OpenCV היא ספרייה יעילה של פונקציות ראייה ממוחשבת הנמצאת כיום בשימוש נרחב בכל תחומי התעשייה. כמו בכל פרויקט של מקור פתוח (Open source), גם כאן עמלה הקהילה על פיתוח ושיפור מתמידים של האלגוריתמים וכבר ניתן למנות למעלה מ-2500 פונקציות זמינות. שימוש בטכנולוגיה כדוגמת OpenCV מציג מגמה הולכת ומתפתחת של שיבוץ פונקציות ניתוח וידאו – או תכונות של “ראייה חכמה” – בכל רשתות הוידאו. תכונות אלה הולכות ונהיות יותר ויותר רבגוניות וכוללות, בין השאר, מערכות עזר לנהגים או מערכות אבטחה ביתיות/מסחריות. ככל שהרזולוציה של חיישני התמונה עולה, כך עולה גם מספר האפשרויות שמציע עיבוד התמונה המתקדם. גידול זה מוביל להתפתחותן של תכונות חדשות המיועדות לשימושי אבטחה ובטיחות.
מסיבות של מחשוב ושל לוגיסטיקה, לעתים תכופות משובצות התכונות הללו בצורה הטובה ביותר בשלב של “לכידת” הוידאו (capture), במצלמות עצמן. עם זאת, על אף העובדה שתכונות ניתוח וידאו מתוכננות להיות ניידות מאוד ויעילות מבחינה מחשובית כשהן מופעלות על מערכות עיבוד-מרובב
(Multi-Processing) רב תכליתיות, חשוב לציין שהן גם תכונות זוללות-משאבים. לפיכך, מערכות משובצות, שבהשוואה לאחרות נוטות להיות מוגבלות במשאבים, לא תמיד מסוגלות לספק את עוצמת העיבוד הנחוצה כדי להתמודד עם הדרישות של ביצועי זמן אמת של ממדי תמונה גדולים וקצבי מסגרות גבוהים הקיימים במערכות ראייה חכמה הנפוצות היום.
יישום אופייני יכול להיות גילוי תנועה בו משווים רצפים של מסגרות כדי לזהות אובייקטים נעים בתוך שדה הראייה, כפי שניתן לראות באיור 1. השלב הראשון הוא אלגוריתם המתוכנן לגלות קצוות (גבולות) של אובייקטים, מה שמאפשר לצמצם את כמות הנתונים במסגרת. מרגע שזוהו, השוואת הקצוות בין מסגרות מדגישה אובייקטים נעים ויוצרת תמונת מסיכה (mask image) של גילוי תנועה. רעשים אקראיים שמחולל החיישן יכולים לגרום לשגיאות בין מסגרות ולכן חשוב כל כך להסירם באמצעות סינון (פילטר). בדוגמה זו הוסר הרעש באמצעות מסנן חציון 7×7 על תמונת המסיכה של זיהוי התנועה. הפונקציה הבסיסית של מסנן חציון היא לחשב את הערך האמצעי בחלון 7×7 של פיקסלים סמוכים. לאחר מכן משמש הממצא הזה כערך הסופי עבור הפיקסל המרכזי בחלון. אחרי טשטוש הרעש משתלבת תמונת המסיכה של צמצום התנועה עם תמונת קלט “בשידור חי” כדי להדגיש את הגבולות הנעים.
כיוון שהאלגוריתמים כתובים בשפת ++ C, ניתן ליישם את היישום שהבאנו כאן כדוגמה באמצעות פלטפורמת עיבוד כדוגמת ה-Cortex-A9 כפול הליבה של ARM ב-Zynq All Programmable SoC, כשחלק מהפונקציות מיושמות במארג ה-FPGA. בדוגמה זו הפונקציות היחידות שמועברות אל מארג
ה-FPGA הן פונקציות ה-‘cvgetframe’ ו-‘showimage’ של ה-I/O של הוידאו,
אשר משתמשות בתת-מערכות I/O וידאו של זיילינקס. כאשר יוזמים את פונקציית ה-‘cvgetframe’, הצד של הקלט של תת-המערכת I/O של הוידאו תופס ומפענח זרם וידאו ממשק HDMI, ומכניס את נתוני הפיקסל לזיכרון DDR. פונקציית ה-‘showimage’ מטפלת בהעברת נתוני פיקסל מ-DDR לבקר תצוגת וידאו. היישום אמנם פונקציונלי אבל הוא מסוגל לספק תפוקה של מסגרת אחת בלבד כל 13 שניות (0.076 מסגרות לשנייה).
כדי למקסם את הביצועים, חציצת מערכת היא צעד חשוב בתהליך הפיתוח. כיוון שספריית ה-OpenCV כתובה בשפת התוכנה העילית ++ C, כל הפונקציות שלה ניתנות להידור לצורך ביצוע על מעבד בן ליבה אחת או על מעבד מרובה ליבות כדוגמת זה המצוי ב-Zynq SoC, כפי שהוסבר. עם זאת, בעזרת ניתוח ביצועים יכולים המהנדסים לקבוע אילו חלקים באלגוריתם באפשרותם להוריד כבלוקים להאצת חומרה – מיושמים במארג ה-FPGA של ה-Zynq, לדוגמה – כדי לעמוד ביעדי הביצועים בזמן אמת.
השימוש בהאצת חומרה מספק שיפור בביצועים אך עלול גם להוות אתגר תכנוני. ספריות ה-OpenCV מבית זיילינקס מוטבו ואופיינו מראש במיוחד עבור סביבת הסינתזה המתקדמת שלה, Vivado HLS, כדי לאפשר פונקציות המסוגלות לבצע עיבוד בקצב פיקסלים ברזולוציות של 1080p.
ספריית ה-OpenCV הממוטבת מיישמת פונקציות יסוד בעזרת האצת חומרה, תוך שהיא מאפשרת שימוש באותו תכנון ברמה גבוהה שיושם בדוגמה הקודמת שהבאנו. משבוצע עיבוד באמצעות Vivado, אותו תכנון שעבר הידור עבור ה-Zynq SoC יכול כעת לספק ביצועי זמן אמת של 60 מסגרות בשנייה, כפי שניתן לראות באיור 2.
כפי שניתן לראות, נעשה שימוש חוזר באותן פונקציות מיפוי I/O של הוידאו, אך ניתן לספק להן השלמה עם ליבת המחשוב של האלגוריתם שזה עתה עבר הידור אל תוך מספר בלוקי IP שחולל ה-Vivado HLS. הבלוקים הללו, שמחוברים לתת-מערכת ה-I/O של הוידאו ב-Vivado IP Integrator, ממוטבים עבור עיבוד וידאו ברזולוציה של 1080p בקצב של 60 פריימים בשנייה. הפתרון המוכח והמיטבי ליישום תכונות ראיית המחשב החדשות ביותר הוא באמצעות היישום של ספריות המקור הפתוח של OpenCV. הספריות הללו כתובות בשפת ++ C וכעת ניתן לתרגם אותן ביעילות ל-RTL כדי ליצור מאיצי חומרה המתאימים לפריסה במארג FPGA, ובמקביל להמשיך ולשמור על הגמישות ועל הפילוסופציה של פרויקט ה-OpenCV.

תגובות סגורות