ראייה ממוחשבת היא תחום שמטרתו לאפשר למחשבים להבין ברמה גבוהה תמונות דיגיטליות. זו הגדרה רחבה למדי, כי הבנה יכולה להתייחס לדברים רבים, כולל זיהוי אובייקט בתמונה (זיהוי אובייקטים), הבנת מה מתרחש (זיהוי אירועים), תיאור תמונה בטקסט, או שחזור סצנה בתלת-ממד. יש גם משימות מיוחדות הקשורות לתמונות של בני אדם: הערכת גיל ורגשות, זיהוי פנים וזיהוי זהות, והערכת תנוחה בתלת-ממד, בין היתר.
אחת המשימות הפשוטות ביותר בראייה ממוחשבת היא סיווג תמונות.
ראייה ממוחשבת נחשבת לעיתים קרובות כענף של בינה מלאכותית. כיום, רוב המשימות בתחום זה נפתרות באמצעות רשתות נוירונים. נלמד יותר על סוג מיוחד של רשתות נוירונים המשמשות לראייה ממוחשבת, רשתות נוירונים קונבולוציוניות, לאורך החלק הזה.
עם זאת, לפני שמעבירים תמונה לרשת נוירונים, במקרים רבים יש הגיון להשתמש בטכניקות אלגוריתמיות לשיפור התמונה.
ישנן מספר ספריות Python זמינות לעיבוד תמונה:
- imageio יכולה לשמש לקריאה/כתיבה של פורמטים שונים של תמונות. היא גם תומכת ב-ffmpeg, כלי שימושי להמרת פריימים של וידאו לתמונות.
- Pillow (המוכרת גם כ-PIL) היא חזקה יותר, ותומכת גם במניפולציות תמונה כמו עיוותים, התאמות פלטה, ועוד.
- OpenCV היא ספריית עיבוד תמונה חזקה שנכתבה ב-C++, והפכה לסטנדרט דה פקטו לעיבוד תמונה. יש לה ממשק נוח ב-Python.
- dlib היא ספריית C++ שמיישמת אלגוריתמים רבים של למידת מכונה, כולל כמה אלגוריתמים של ראייה ממוחשבת. יש לה גם ממשק Python, וניתן להשתמש בה למשימות מאתגרות כמו זיהוי פנים ונקודות ציון בפנים.
OpenCV נחשבת לסטנדרט דה פקטו לעיבוד תמונה. היא מכילה הרבה אלגוריתמים שימושיים, שמיושמים ב-C++. ניתן להשתמש ב-OpenCV גם מ-Python.
מקום טוב ללמוד על OpenCV הוא הקורס Learn OpenCV. בתוכנית הלימודים שלנו, המטרה היא לא ללמוד OpenCV, אלא להראות לכם כמה דוגמאות שבהן ניתן להשתמש בה, וכיצד.
תמונות ב-Python מיוצגות בצורה נוחה באמצעות מערכים של NumPy. לדוגמה, תמונות בגווני אפור בגודל 320x200 פיקסלים יאוחסנו במערך בגודל 200x320, ותמונות צבעוניות באותו גודל יהיו בעלות צורה של 200x320x3 (עבור 3 ערוצי צבע). כדי לטעון תמונה, ניתן להשתמש בקוד הבא:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)באופן מסורתי, OpenCV משתמש בקידוד BGR (כחול-ירוק-אדום) לתמונות צבעוניות, בעוד שאר הכלים ב-Python משתמשים בקידוד RGB (אדום-ירוק-כחול) המסורתי יותר. כדי שהתמונה תיראה נכון, יש להמיר אותה למרחב הצבעים RGB, או על ידי החלפת ממדים במערך NumPy, או על ידי קריאה לפונקציה של OpenCV:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)אותה פונקציה cvtColor יכולה לשמש לביצוע המרות אחרות של מרחבי צבע, כמו המרת תמונה לגווני אפור או למרחב הצבעים HSV (גוון-רוויה-ערך).
ניתן גם להשתמש ב-OpenCV לטעינת פריימים של וידאו אחד-אחד - דוגמה לכך ניתנת בתרגיל OpenCV Notebook.
לפני שמעבירים תמונה לרשת נוירונים, ייתכן שתרצו לבצע מספר שלבי עיבוד מקדימים. OpenCV יכולה לבצע דברים רבים, כולל:
- שינוי גודל התמונה באמצעות
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - טשטוש התמונה באמצעות
im = cv2.medianBlur(im,3)אוim = cv2.GaussianBlur(im, (3,3), 0) - שינוי בהירות וניגודיות של התמונה ניתן לבצע באמצעות מניפולציות על מערכי NumPy, כפי שמתואר בהערה הזו ב-Stackoverflow.
- שימוש ב-סף על ידי קריאה לפונקציות
cv2.threshold/cv2.adaptiveThreshold, שלעיתים עדיף על התאמת בהירות או ניגודיות. - יישום טרנספורמציות שונות על התמונה:
- טרנספורמציות אפיניות יכולות להיות שימושיות אם צריך לשלב סיבוב, שינוי גודל ועיוות בתמונה, וידועים מיקומי המקור והיעד של שלוש נקודות בתמונה. טרנספורמציות אפיניות שומרות על קווים מקבילים.
- טרנספורמציות פרספקטיבה יכולות להיות שימושיות כאשר ידועים מיקומי המקור והיעד של 4 נקודות בתמונה. לדוגמה, אם מצלמים תמונה של מסמך מלבני באמצעות מצלמת סמארטפון מזווית מסוימת, ורוצים ליצור תמונה מלבנית של המסמך עצמו.
- הבנת תנועה בתוך התמונה באמצעות זרימה אופטית.
ב-OpenCV Notebook שלנו, אנו מציגים כמה דוגמאות לשימוש בראייה ממוחשבת לביצוע משימות ספציפיות:
- עיבוד מקדים של צילום ספר ברייל. אנו מתמקדים כיצד ניתן להשתמש בסף, זיהוי תכונות, טרנספורמציית פרספקטיבה ומניפולציות NumPy כדי להפריד סמלי ברייל בודדים לסיווג נוסף על ידי רשת נוירונים.
![]() |
![]() |
![]() |
|---|
תמונה מתוך OpenCV.ipynb
- זיהוי תנועה בווידאו באמצעות הבדל פריימים. אם המצלמה קבועה, אז הפריימים מהמצלמה צריכים להיות די דומים זה לזה. מכיוון שפריימים מיוצגים כמערכים, פשוט על ידי חיסור המערכים של שני פריימים עוקבים נקבל את ההבדל בפיקסלים, שאמור להיות נמוך עבור פריימים סטטיים, ולהפוך לגבוה יותר כאשר יש תנועה משמעותית בתמונה.
תמונה מתוך OpenCV.ipynb
-
זיהוי תנועה באמצעות זרימה אופטית. זרימה אופטית מאפשרת להבין כיצד פיקסלים בודדים בפריימים של וידאו נעים. ישנם שני סוגים של זרימה אופטית:
- זרימה אופטית צפופה מחשבת את שדה הווקטורים שמראה לכל פיקסל לאן הוא נע.
- זרימה אופטית דלילה מבוססת על לקיחת תכונות ייחודיות בתמונה (למשל, קצוות), ובניית מסלולן מפריים לפריים.
תמונה מתוך OpenCV.ipynb
✍️ מחברות לדוגמה: OpenCV נסו את OpenCV בפעולה
בואו נעשה כמה ניסויים עם OpenCV על ידי חקר OpenCV Notebook
לפעמים, משימות יחסית מורכבות כמו זיהוי תנועה או זיהוי קצה אצבע יכולות להיפתר אך ורק באמצעות ראייה ממוחשבת. לכן, חשוב מאוד להכיר את הטכניקות הבסיסיות של ראייה ממוחשבת, ומה ספריות כמו OpenCV יכולות לעשות.
צפו בסרטון הזה מתוך תוכנית AI Show כדי ללמוד על פרויקט Cortic Tigers וכיצד הם בנו פתרון מבוסס בלוקים להנגשת משימות ראייה ממוחשבת באמצעות רובוט. בצעו מחקר על פרויקטים נוספים כמו זה שמסייעים למתחילים להיכנס לתחום.
קראו עוד על זרימה אופטית במדריך הנהדר הזה.
במעבדה זו, תצלמו וידאו עם מחוות פשוטות, והמטרה שלכם היא לחלץ תנועות למעלה/למטה/שמאלה/ימינה באמצעות זרימה אופטית.





