תוכן עניינים:
- אספקה
- שלב 1: פונקציית FaceDetect
- שלב 2: רקע הסר פונקציה
- שלב 3: פונקציית VideoEdges
- שלב 4: פונקציית VideoBlur
- שלב 5: שיפורים
וִידֵאוֹ: פרויקטים בסיסיים של OpenCV: 5 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
בפרויקט זה, אנו חוקרים כמה פונקציונליות בסיסית של OpenCV באמצעות 4 פרויקטים פשוטים הכוללים זרם וידאו חי. אלה הם זיהוי פנים, הסרת רקע, עיבוד קצוות ויזואלי מיוחד והחלת אפקט טשטוש לזרם הווידאו החי. המטרה העיקרית שלי לניסיון בפרויקטים אלה הייתה פשוט להרטיב את הרגליים עם ממשק OpenCV, מכיוון שאני מתכוון להעמיק בתחום הראייה הממוחשבת.
אספקה
- מחשב שמריץ פייתון
- ספריית קורות חיים פתוחה, ספריית Numpy, ספריית tkinter, ספריית sys
- מצלמה לחיבור למחשב (אם המחשב אינו כולל כבר)
- קובץ הפיתון של התוכנית (כלול בהוראה זו)
- קובץ xml haarcascade (כלול בהוראה זו)
שלב 1: פונקציית 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
פונקציה זו מחזירה את זרם הווידאו החי שלנו, אך הקצוות הניתנים לזיהוי הופכים לבנים בזמן שכל השאר מושחך. מה שמבדיל את הפונקציה הזו מהפונקציות האחרות הוא המרת הסרטון המקורי שלנו מתבנית RBG ל- HSV, המייצגת גוון, רוויה וריאציה- שיטה אחרת לעיבוד אור וצבע מסרטון. בשיטה זו נוכל להבחין ביתר קלות בקווי המתאר בסרטון על ידי החלת מסנן (אדום_נמוך לאדום_גבוה).
Canny Edge Detection משמש לזיהוי הקצוות בתמונה. הוא מקבל תמונה בקנה מידה אפור כקלט והיא משתמשת באלגוריתם רב שלבי.
שלב 4: פונקציית VideoBlur
פונקציה זו משמשת להוספת אפקט טשטוש לזרם הווידיאו שלנו. הפונקציה פשוטה מכנה את הפונקציה GaussianBlur cv2 על המסגרת שלנו. מידע נוסף על הפונקציה gaussianBlur ניתן למצוא כאן:
opencv-python-tutroals.readthedocs.io/en/l…
שלב 5: שיפורים
הפונקציה הרגישה ביותר בפרויקט זה היא פונקציית הסרת הרקע, מכיוון שהיא דורשת שימוש במצלמה שאין לה פונקציונליות של התאמת תאורה. יתכנו מערכת פונקציות טובה יותר בספריית OpenCV שיכולה להסביר את התאמת התאורה הזו ולהסיר את הרקע בצורה חלקה (בדומה למסך ירוק).
נוכל גם להשתמש בפונקציות אחרות לזיהוי פנים שעשויות לייצר אובייקטים בעלי פונקציונליות רבה יותר מלבד החזרת (x, y) קואורדינטות. אולי תוכנית זיהוי פנים עם יכולת לזכור פנים לא תהיה קשה מדי ליישום.
ניתן להפוך את פונקציית הטשטוש להתאמה אישית רבה יותר באמצעות שליטה אינטואיטיבית על ידי המשתמש. לדוגמה, ייתכן שהמשתמש ירצה להתאים את עוצמת אפקט הטשטוש או לבחור אזור ספציפי בתוך המסגרת לטשטוש.
מוּמלָץ:
עיצוב אקווריום עם שליטה אוטומטית בפרמטרים בסיסיים: 4 שלבים (עם תמונות)
עיצוב אקווריום עם בקרה אוטומטית על פרמטרים בסיסיים: מבוא היום, טיפול באקווריום ימי זמין לכל אקווריסט. הבעיה ברכישת אקווריום אינה קשה. אך לתמיכת החיים המלאה של התושבים, הגנה מפני כשלים טכניים, תחזוקה וטיפול קלים ומהירים
מחוון מפלס מים - מעגלים בסיסיים של טרנזיסטור: 5 שלבים
מחוון מפלס מים | מעגלים בסיסיים של טרנזיסטור: סמן מפלס מים הוא מכשיר מעגל אלקטרוני המעביר נתונים בחזרה ללוח הבקרה כדי להראות אם למסלול מים יש מפלס מים גבוה או נמוך. חלק מסמני מפלס המים משתמשים בתערובת של חיישני בדיקה או שינויים לאיתור מפלסי מים. שם
מעגל ותיאוריה בסיסיים של אספקת החשמל: 7 שלבים
מעגל אספקת חשמל ותיאוריה: בפרויקט זה אראה לך כיצד ליצור אספקת חשמל משלך באמצעות רכיבים בסיסיים. אעסוק בתיאוריה הבסיסית בנושא רובוטריקים, החלקת תיקון וויסות
10 פרויקטים בסיסיים של ארדואינו למתחילים! בצע לפחות 15 פרויקטים בלוח יחיד !: 6 שלבים
10 פרויקטים בסיסיים של ארדואינו למתחילים! הפוך לפחות 15 פרויקטים עם לוח אחד !: פרויקט Arduino & לוח הדרכה; כולל 10 פרויקטים בסיסיים של Arduino. כל קודי המקור, קובץ גרבר ועוד. אין SMD! הלחמה קלה לכולם. רכיבים נשלפים וניתנים להחלפה בקלות. אתה יכול לבצע לפחות 15 פרויקטים בבו אחד
שיעורי אצווה לא כל כך בסיסיים: 6 שלבים
הדרכת אצווה לא כל כך בסיסית: במדריך הקודם למדנו את יסודות הליבה של כתיבת קבצי אצווה. אם אין לך מושג מהו אצווה, אך ברצונך ללמוד אותה, עיין במדריך "אצווה בסיסית מאוד". במדריך זה אתה ילמד פקודות מתקדמות יותר וכיצד