Codebox: לאבד את הראש עם OpenCV - 💡 Fix My Ideas

Codebox: לאבד את הראש עם OpenCV

Codebox: לאבד את הראש עם OpenCV


המחבר: Ethan Holmes, 2019

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

עיבוד OPENCV ו- Java הספרייה, פרויקט מתוחזק על ידי Stà © phane Cosot ו דאגלס אדריק סטנלי על à ‰  ‰  ‰  ‰  ‰  ‰  ‰  ‰  ‰  ‰ ‰ בתהליך. לכבוד ליל כל הקדושים, קודקס זה יראה לך איך להשתמש OpenCV להסיר ראשי אנשים בזמן אמת מתוך הזנת וידאו. לדוגמה:

הודעות עתידיות יכסה פחות יישומים מזעזעים עבור ספריה מדהימה זו.

התקנת OpenCV עיבוד ספריית Java

שלב האגרוף באמצעות הספרייה היא להוריד ולהתקין אותו מ http://ubaa.net/shared/processing/opencv/. תיעוד האתר הוא נהדר - פשוט בצע את השלבים המפורטים על "הוראות התקנה" בדף הראשי. לאחר שתבצע את השלבים, הפעל את העיבוד ולאחר מכן נסה את הקוד בדוגמת ה- (), שמציגה מלבן אדום סביב כל פרצופים (תצוגת חזיתית) שזוהה במצלמת האינטרנט. אתה צריך לראות משהו כזה:

שים לב למשתמשי Windows: ייתכן שיהיה עליך להתקין את QuickQuicktime ו- WinVDIG כדי להשתמש במצלמת האינטרנט בעיבוד.

הגדרת Sketch

ברגע שיש לך את בסיסי לזהות() לדוגמה, אתה יכול להשתמש סקיצה הבאה.כמו עם הודעות אחרות בסדרה זו, אתה יכול גם להדגיש את כל הטקסט בתיבה למטה ולחץ על ctrl + c, או ללכת ישירות למאגר קוד Makezine ולהעתיק headless_cam.pde.

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

דיון

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

הצעד הראשון בסקיצה הוא לשמור תמונה של סצנת הרקע הריקה. זה נעשה על ידי עותק() הפקודה ב keyPressed () שיטה:

bg.copy (פקה, 0,0, רוחב, גובה, 0,0, רוחב, גובה);

הפקודה מחייבת שתי תמונות: א יעד התמונה, שבו הוא פיקסלים יועתקו ל, א מקור התמונה, שבו הוא פיקסלים יועתקו מ. כדי להשתמש בו, אתה קורא את עותק() שיטה על תמונת היעד (במקרה זה, המשתנה bg) ולספק את תשע (!) טיעונים הנדרשים, אשר:

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

לאחר פקודה זו תושלם, יהיה לך עותק של סצינת הרקע נשמר המשתנה bg. השלב הבא הוא להשתמש ב- OpenCV כדי לחפש פרצופים. כפי שתואר לעיל, זה נעשה באמצעות לזהות() שיטה, אשר מחזירה מערך של מלבנים. מלבן הוא מחלקה הכלולה ב- Java, שפת הבסיס שממנו נגזר עיבוד. (אחד הדברים הקרירים על עיבוד הוא שהוא יכול להשתמש בכל פקודה שאתה יכול להשתמש ב- Java, מה שהופך אותו לשפה חזקה מאוד.) מלבן יש ארבעה שדות מפתח אשר נוגעים לנו: x ו- y קואורדינט של העליונה שלה בפינה השמאלית, רוחב וגובה. (נשמע מוכר?)

אם כל מה שאנחנו רוצים לעשות הוא להחליף רק את הפנים, אנחנו יכולים פשוט להשתמש עותק() הפקודה להעתיק מעל אזורים מקבילים. (הערה: loadPixels () ו updatePixels () השיטה נדרשת בכל פעם שאנחנו רוצים לגשת או לעדכן את פיקסלים בתמונה.) הנה הקוד:

fg.copy (פקה, 0,0, רוחב, גובה, 0,0, רוחב, גובה); / / העתק את תמונת המצלמה לתוך fg opencv.copy (פקה); / / העתק את התמונה לתוך המאגר של OpenCV מלבן [] face = opencv.detect (); / / לזהות כל דבר ressembling עבור FRONTALFACE עבור (int i = 0; i

הנה הפלט:

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

טריג נכנס לפעולה בעת חישוב התקות הנכון כי יהיה להחליק את המלבן במעלה אלכסונית. פונקציית המפתח היא atan2 (), המחשבת את הזווית בין שתי נקודות ביחס לציר ה- x. (זווית זו נקראת לעתים קרובות תטא על ידי מתמטיקאים זקנים). ברגע שיש לך תטא, אתה יכול להשתמש cos () ו חטא() פונקציות כדי לחשב את x ו- y התקות dx ו דיי. הנה הקוד:

מלבן הגדלהFaceBox (לצוף incPct, int x, int y, int w, int ח) {לצוף r = הפצה (0,0, w, h) / 2; / / Compodes רדיוס של מרכז אלכסונית לצוף theta = atan2 (h, w); / / מחשב את הזווית של dx לצוף אלכסונית = r * incPct * cos (theta); / / מוצא לצוף dy = r * incPct * חטא (theta); החזרת מלבן חדש (int) (x - dx), (int) (y - dy), (int) (w + 2 * dx), (int) (h + 2 * dy); }

לבסוף, מכיוון שאנו מרחיבים את הקופסה, עלינו לוודא שהיא נשארת בתוך האזורים הגלויים של המסך, בדיוק כפי שעשינו בפרויקט Swat a (arraylist) של מטרות, הכל נעשה כאן:

faceBox = zoomFaceBox (0.75, פרצופים [i] .x, פרצופים [i] .y, פרצופים [i]. width, פרצופים [i]. אם (faceBox.x <0) {faceBox.x = 0; } אם (faceBox.x + faceBox.width> רוחב) {faceBox.width = width - faceBox.x; } אם (faceBox.y <0) {faceBox.y = 0; } אם (faceBox.y + faceBox.height> height) {faceBox.height = height - faceBox.y; } ...

וזה הכל. מקווה שאתה יכול למצוא שימוש מפחיד על זה על ליל כל הקדושים.

נ.ב .: אתה יכול ללמוד את הפרטים המלאים של איך לעבוד עם תמונות מתוך הדרכה מעולה של דניאל Shiffman הדרכה ופיקסלים באתר Processing.org. (הפרק הוא קטע מספרו הנפלא, עיבוד הלמידה: מדריך למתחילים לתמונות, אנימציה ואינטראקציה, אשר אני ממליץ לך להרים אם אתה רוצה באמת הורים עיבוד).

בסככת היוצרים:


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



אתה עשוי להתעניין

10 הטוב ביותר בעבודת יד מתנות עבור אמא

10 הטוב ביותר בעבודת יד מתנות עבור אמא


השבוע באירועי Maker

השבוע באירועי Maker


חנון שיק: קשרים שלא למצוץ

חנון שיק: קשרים שלא למצוץ


כיצד לבצע: אפונה משלך טרוליס

כיצד לבצע: אפונה משלך טרוליס






פוסטים אחרונים