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

RoboPhoto - מחולל פסיפס לציבור: 4 שלבים
RoboPhoto - מחולל פסיפס לציבור: 4 שלבים
Anonim
Image
Image
RoboPhoto - מחולל פסיפס לציבור
RoboPhoto - מחולל פסיפס לציבור
RoboPhoto - מחולל פסיפס לציבור
RoboPhoto - מחולל פסיפס לציבור

RoboPhoto הוא מחולל פוטומוזאי בזמן אמת

RoboPhoto יוצר פוטומוזה של המשתמשים שלה - בזמן שאתה ממתין.

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

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

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

RoboPhoto פועל גם במצב משתמש יחיד. כאשר מוגדר כך, RoboPhoto יוצר פסיפס מלא של משתמש יחיד.

אספקה

  • מחשב Windows 10 עם חבילות Visual Studio ו- IoT מותקנות
  • Raspberry Pi 3B+ עם Microsoft Windows 10 IoT מותקן
  • מדפסת תוויות צבע (Brother VC-500W)
  • כפתור אדום גדול המותקן על כף כניסה למשתמש
  • מסך HDMI למשוב משתמשים
  • מצלמת Xbox Kinect v2 של מיקרוסופט- נגנבה מהבן שלי- כדי לצלם
  • רשת (Wifi, LAN)
  • רשת מטרה. דף נייר שעליו מודפסת רשת -מלא בקואורדינטות. רשת נייר זו משמשת כקנבס שבו המבקרים יכולים להדביק את תצלומם על הקואורדינטות המיועדות. וכך בסופו של דבר הם יוצרים יחד את התוצאה הסופית: פוטומוזה חדש ויפה.

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

שלב 1: אופן פעולתו

אופן פעולתו
אופן פעולתו
אופן פעולתו
אופן פעולתו
אופן פעולתו
אופן פעולתו
אופן פעולתו
אופן פעולתו

RoboPhoto הוא התקנה המכילה כף עם כפתור אדום גדול עליה, מחשב עם מדפסת תווית מחוברת והתקן IoT קטן המטפל בממשק המשתמש (מסך ולחצן). במקרה שלי: RaspBerry 3B+.

  1. RoboPhoto פועל בתוך מקום נגיש לציבור והוא (לאחר הפעלתו) פועל בעצמו. בעת הריצה מבקרים חולפים מעודדים את RoboPhoto ללחוץ על הכפתור האדום הגדול שלו.
  2. בכל פעם שנלחץ על הכפתור האדום והגדול הזה, RoboPhoto יצלם את המבקר שרק לחץ על הכפתור במצלמת Kinect.
  3. אז RoboPhoto ישתמש ב- A. I. ומיומנויות עיבוד תמונה כדי לשנות כל תמונה כך שתתאים ליצירה בתוך הפסיפס לעתיד. כדי להשיג זאת, RoboPhoto מצייר מחדש את הרקע של כל תמונה כך שיתאים לצבע של פיסת מטרה בתוך תמונה נטענת מראש. לאחר העריכה, RoboPhoto מדפיס את התמונה הערוכה על גבי מדבקה יחד עם קבוצת קואורדינטות שמצביעות על המיקום של המדבקה הזו בתוך הפסיפס.

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

RoboPhoto יכול לפעול גם במצב משתמש יחיד.

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

שלב 2: הרכבת החומרה

הרכבת החומרה
הרכבת החומרה
הרכבת החומרה
הרכבת החומרה

כפי שמוצג בתמונה למעלה, מחשב Win 10 מחובר למצלמת Kinect. קינקט חייב להיות מחובר באמצעות USB 3.0. בזמנו יצרתי את RoboPhoto - לא היה פטל פאי עם USB 3.0.*

המחשב משמש גם לטיפול בהדפסה למדפסת התוויות המצורפת. במקרה שלי אח VC-500W. מדפסת צבע ביתית די זולה. עם זאת, זה מאוד מאוד איטי. עדיף שתשתמש באיש מקצוע אם אתה יכול.

הכפתור האדום הגדול מחובר ל- Raspberry Pi 3B+. ל- GPIO מחוברים רק 4 חוטים. זוהי ההלחמה היחידה הנדרשת במדריך זה. ה- Pi מספק גם פידבק למבקר שלנו באמצעות מסך TFT בגודל 7 אינץ 'באמצעות HDMI.

כדי לסדר אותו, בניתי כף עץ שמחזיק את כל הרכיבים האלה.

ליד הדום, על הקיר, מונחת דף נייר המכיל את רשת המטרה וקואורדינטות (A1/A2). מכיוון שמדפסת התוויות שבהן השתמשתי מקסימלית לפי תווית רוחב = 2, 5 ס"מ, כל הריבועים ברשת זו מודדים 2, 5 ס"מ על 2, 5 ס"מ.

*כיום, Raspberry Pi4 אכן מציע USB3.0. ניתן להפעיל את Alse W10 במכשיר. אז תיאורטית צריך להיות אפשרי ליצור RoboPhoto v2.0 ללא שימוש במחשב. אולי קוביד -19 יספק לי מספיק זמן בכדי לפרסם בקרוב הוראה כזו.

שלב 3: כתיבת הקוד

כתיבת הקוד
כתיבת הקוד
כתיבת הקוד
כתיבת הקוד

קוד

RoboPhoto נוצר עם VisualStudio כפתרון עם שני פרויקטים:

  1. יישום Windows Forms במחשב המחשב מארח שרת TCP ומטפל בקלט Kinect
  2. Raspberry Pi 3B+ המארח לקוח TCP בתוך יישום בראשות UWP (מוגדר כאפליקציית הפעלה) כדי להתמודד עם אירועי לחיצות כפתורים ולספק למשתמש משוב באמצעות מסך ה- TFT בגודל 7 אינץ 'שלו.

בתרשים למעלה, ניסיתי לתת לך מושג מה הרך שלי עושה. Visual Studio שכתבתי כדי ליצור פתרון RoboPhoto זה (100% עובד לחלוטין) מסופק עם הוראה זו. עם זאת אני חייב להזהיר את כולם להוריד את הקובץ הזה: הקוד שכתבתי רחוק מלהיות יפה ולעתים קרובות קשור ל- dev-PC שלי. לכן אני ממליץ לכולם ליצור פתרון טוב יותר, נחמד ויציב יותר.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

רֶשֶׁת

בקוד הדוגמה, קוד ה- Pi נפרס דרך Visual Studio ל- IPAddress ברשת שלי. אתה כנראה צריך לשנות את זה כך שיתאים לשלך. לשם כך - לחץ באמצעות לחצן העכבר הימני על פרויקט לקוח ARM לאחר פתיחת הפתרון ב- Visual Studio, ולאחר מכן בחר מאפיינים וערך את הערך 'מכונה מרוחקת' ל- IPAddress של הפי שלך. כמו כן עליך לאפשר תעבורה לעבור מהלקוח לשרת ביציאה 8123 בתוך חומת האש של Windows בשרת (PC). אם אתה מפעיל את הפתרון מ- Visual Studio, הוא אמור לבקש ממך לעשות זאת עבור U.

בזמן הקידוד התקשיתי מאוד לגרום ל- W32 ו- UWP לתקשר כראוי. קיבלתי את זה עובד על ידי שימוש בשתי שיעורים נפרדים בלקוח ושרת: resp MyEchoClient.cs (בלקוח ARM) ו- ConnectionClient.cs (חיבורי לקוח hanlding בשרת).

קבצי פסיפס - מחלקה מותאמת אישית

RoboPhoto יוצר פסיפסים כדי לחקות תמונת מטרה. תמונת היעד הזו וכל התצלומים האישיים המרכיבים יחד את הפסיפס לעתיד, כמו גם כמה מאפיינים אחרים של כל RoboPhoto מאוחסנים בקבצים במערכת קבצים. הקוד המלווה שלי משתמש במערכת קבצים ותיקיות בספרייה c: / tmp / MosaicBuilder. בתוך תיקיה זו, הקוד יקרא את כל תיקיות המשנה עם שם תיקייה שמתחיל ב- [prj_] כתיקיות פרוייקט פסיפס. בתוך כל התיקיות [prj_] האלה הוא ינסה לפתוח קובץ פרוייקט בשם [_projectdata.txt] המכיל את כל המידע הנדרש עבור כל פרויקט.

קובץ פרויקט כזה מורכב מ:

  1. הנתיב המלא ושם הקובץ של תמונת היעד של הפרויקט הזה
  2. הנתיב המלא בו מאוחסנים תמונות בודדות של הפרויקט
  3. מספר העמודות שהפסיפס יכיל
  4. מספר השורות שהפסיפס יכיל

פרוייקטים לדוגמה מוצגים בקובץ ה- zip: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

בקוד שרת C#, כל הטיפול בפסיפס מתבצע באמצעות מחלקה מותאמת אישית: BBMosaicProject.cs

Microsoft Kinect v2.0 - מסך ירוק

פשוט לצלם כל מצלמה תעשה. אבל השתמשתי ב- Microsoft Kinect v2.0 כדי לשלב תמונות צבע ותמונות עומק. בדרך זו, ניתן ליצור אפקט של מסך ירוק. הרקע בכל תמונות הצבע שיתקבלו מ- Kinect יוחלף במשטח ירוק אחיד (BBBackgroundRemovalTool.cs).

הפניה ל- Microsoft. Kinect נוספה לפרויקט השרת.

EMGU

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

www.nuget.org/packages/Emgu. CV/3.4.3.3016

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

שלב רביעי: תודה

תודה
תודה

תודה שקראת את ההנחיה שלי. זה היה הראשון שלי. מקווה שנהנית מזה.

מוּמלָץ: