תוכן עניינים:

פרויקטים בסיסיים של OpenCV: 5 שלבים
פרויקטים בסיסיים של OpenCV: 5 שלבים

וִידֵאוֹ: פרויקטים בסיסיים של OpenCV: 5 שלבים

וִידֵאוֹ: פרויקטים בסיסיים של OpenCV: 5 שלבים
וִידֵאוֹ: תחילת פרויקט - חלקים 1-5 2024, נוֹבֶמבֶּר
Anonim
פרויקטים בסיסיים של OpenCV
פרויקטים בסיסיים של OpenCV

בפרויקט זה, אנו חוקרים כמה פונקציונליות בסיסית של OpenCV באמצעות 4 פרויקטים פשוטים הכוללים זרם וידאו חי. אלה הם זיהוי פנים, הסרת רקע, עיבוד קצוות ויזואלי מיוחד והחלת אפקט טשטוש לזרם הווידאו החי. המטרה העיקרית שלי לניסיון בפרויקטים אלה הייתה פשוט להרטיב את הרגליים עם ממשק OpenCV, מכיוון שאני מתכוון להעמיק בתחום הראייה הממוחשבת.

אספקה

  • מחשב שמריץ פייתון
  • ספריית קורות חיים פתוחה, ספריית Numpy, ספריית tkinter, ספריית sys
  • מצלמה לחיבור למחשב (אם המחשב אינו כולל כבר)
  • קובץ הפיתון של התוכנית (כלול בהוראה זו)
  • קובץ xml haarcascade (כלול בהוראה זו)

שלב 1: פונקציית FaceDetect

פונקציית FaceDetect
פונקציית FaceDetect
פונקציית FaceDetect
פונקציית FaceDetect

פונקציה זו מציגה את סרטון המצלמה שלך עם ריבועים ירוקים על כל הפנים שהוא מרים. בקוד, אנו משתמשים בפונקציה cv2. VideoCapture () כדי לאחסן את הסרטון שאנו מצלמים באובייקט בשם "ללכוד". CAPTURE_INDEX הוא מספר שהוגדר על ידי המחשב שלך ומתאים לאינדקס של המצלמה שלך ברשימת קלט הווידאו של המחשב. אם אין לך מצלמה חיצונית המחוברת למחשב שלך, 0 או 1 אמורים לפעול.

האובייקט face_cascade מאתחל באמצעות הפונקציה cascadeClassifier והקובץ "haarcascade_frontalface_default.xml" שנמצא ב- github OpenCV. אנו משתמשים באובייקט זה לאחסון הפרצופים המזוהים ברשימה "פרצופים" כערך בעל ארבע כיוונים המחזיק את הפנים x קואורדינטות, y קואורדינטות, רוחב וגובה. לאחר מכן אנו מציירים מלבן המקיף את הפנים בצורה מושלמת באמצעות הפונקציה cv2.rectangle

מתוך סרטון זה, OpenCV לוכד תמונות רבות בלולאת ה- while שלנו באמצעות capture.read () ואחסון התמונה במסגרת ששמנו "img". כל תמונה מתפרשת ואז משתנה כרצוננו. עבור faceDetect, אנו הופכים את התמונה לאפורה באמצעות הפונקציה cvtColor הממירה את כל התמונה הניתנת בפרמטר הראשון לסוג מסוים של צבע תמונה שצוין בפרמטר השני. את רשימת הערכים המקובלים על הפרמטר השני ניתן למצוא באינטרנט. לאחר מכן אנו מציגים את התמונה בחלון בשם "זיהוי הפנים" באמצעות הפונקציה imshow () שלוקחת מחרוזת לשם החלון ולמסגרת התמונה המוצגת.

לבסוף אנו מחכים שהמשתמש יזין את מקש q באמצעות הפונקציה cv2.waitKey (). מסכת 0xFF משמשת כאמנה למחשבי 64 ביט. לאחר שהמשתמש סיים את זרם הווידיאו, הפונקציה faceDetect משחררת את אובייקט הלכידה ואז הורסת כל חלונות אחרים שנפתחו מתחת לממשק OpenCV. כל שאר הפונקציות עוקבות אחר מבנה עיצובי דומה.

שלב 2: רקע הסר פונקציה

רקע הסר פונקציה
רקע הסר פונקציה
רקע הסר פונקציה
רקע הסר פונקציה

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

כדי להשתמש בפונקציה זו, התרחק ממסגרת המצלמה ולחץ על מקש "d" כדי ללכוד את תמונת הרקע. חשוב שלא יהיו אובייקטים נעים ברקע שברצונך לצלם. לאחר מכן, נוכל לחזור אחורה למסגרת המצלמה. אם הפונקציה עבדה, המשתמש צריך לראות את עצמו רק בזרם הווידיאו של הפונקציה. כל רעש/כתמים שחורים בתמונת החזית עשויים להיות תוצאה של התאמת התאורה של המצלמה. כדי ללכוד רקע אחר, לחץ על מקש "r" כדי לאתחל מחדש ולאחר מכן לחץ שוב על "d".

כמה נקודות מבט מרכזיות עבור פונקציה זו הן השימוש בבולאן "הדגל" שמועלה ברגע שהמשתמש לוחץ על כפתור d. זה לוכד את הרקע ומאפשר לנו להסיר אותו מהסרטון שמוזרם על ידי הפונקציה. אנו שואפים לאחסן את תמונת הרקע ב- ref_img, כך שנוכל להבחין בינה לבין התמונה הקדמית, הלוכדת כל אובייקט הנע. אנו משתמשים בפונקציה cv2.subtract () כדי להפחית את תמונת הקרקע הקדמית מתמונת הרקע ולהיפך, ולאחר מכן לבטל את כל ההבדלים הזעירים בשתי התמונות מיד לאחר מכן. הרקע מושחר.

מסכת fgmask נעשית באמצעות ההבדל בין שתי התמונות הללו ולאחר מכן מוחלת על זרם הווידיאו של הפונקציות באמצעות הפונקציה OpenCV cv2.bitwise_and ().

שלב 3: פונקציית VideoEdges

פונקציית VideoEdges
פונקציית VideoEdges
פונקציית VideoEdges
פונקציית VideoEdges

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

Canny Edge Detection משמש לזיהוי הקצוות בתמונה. הוא מקבל תמונה בקנה מידה אפור כקלט והיא משתמשת באלגוריתם רב שלבי.

שלב 4: פונקציית VideoBlur

פונקציית VideoBlur
פונקציית VideoBlur
פונקציית VideoBlur
פונקציית VideoBlur

פונקציה זו משמשת להוספת אפקט טשטוש לזרם הווידיאו שלנו. הפונקציה פשוטה מכנה את הפונקציה GaussianBlur cv2 על המסגרת שלנו. מידע נוסף על הפונקציה gaussianBlur ניתן למצוא כאן:

opencv-python-tutroals.readthedocs.io/en/l…

שלב 5: שיפורים

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

נוכל גם להשתמש בפונקציות אחרות לזיהוי פנים שעשויות לייצר אובייקטים בעלי פונקציונליות רבה יותר מלבד החזרת (x, y) קואורדינטות. אולי תוכנית זיהוי פנים עם יכולת לזכור פנים לא תהיה קשה מדי ליישום.

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

מוּמלָץ: