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

Raspberry Pi 4 רובוט זיהוי תמרורים: 6 שלבים
Raspberry Pi 4 רובוט זיהוי תמרורים: 6 שלבים

וִידֵאוֹ: Raspberry Pi 4 רובוט זיהוי תמרורים: 6 שלבים

וִידֵאוֹ: Raspberry Pi 4 רובוט זיהוי תמרורים: 6 שלבים
וִידֵאוֹ: TITANFALL 2 FULL GAME | CAMPAIGN - Walkthrough / PS4 (All Pilot Helmets) 2024, נוֹבֶמבֶּר
Anonim
Raspberry Pi 4 רובוט זיהוי תמרורים
Raspberry Pi 4 רובוט זיהוי תמרורים

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

למשל אם מזוהה סימן פנייה ימינה אז הרובוט יפנה ימינה, אם יזוהה שלט פנייה שמאלה הרובוט יפנה שמאלה, אם לא יזוהה אז הרובוט ימשיך קדימה. מערך הנתונים שישמש הוא זיהוי תמרורים רשמי של INI (2019) (Institut Fur Neuroinformatik), מערך הנתונים הזה כולל 43 שיעורים אולם יש צורך בשניים בלבד; תיקיות 00033 ו- 00034 במערך הנתונים הם סימני הפנייה שמאלה וימינה.

שלב 1: דרישות

דרישות
דרישות
דרישות
דרישות
דרישות
דרישות

הדרישות לפרויקט זה הן:

רובוט ארדואינו. (בעצם אונו ארדואינו, נהג מנועים ומנועים) (אין צורך אם אינך משתמש ברובוט)

פאי פטל 4.

מצלמת פי.

נדרשת תוכנה:

פייתון 3.

OpenCV 4.

זרימת מתח.

arduino IDE (אין צורך אם אינך משתמש ברובוט)

רוז (אין צורך אם אינך משתמש ברובוט)

לא משנה מה תהיה הפייתון האהוב עליך (על פאי הפטל, אני משתמש בתוני).

כדי להגדיר את OpenCV ו- Tensorflow, פעל לפי ההנחיות של אדריאן. קישור:

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

שלב 2: אימון נתונים

סקריפט הרכבת מיועד לגישה למערך הנתונים שמאגד כ -50,000 תמונות מ -43 כיתות. התסריט כתוב בפייתון, תוך שימוש במגוון ספריות: os - זה לצורך קישור סקריפט הפייתון לספרייה הנכונה שבה נמצא מערך הנתונים. Matplotlib - זה להצגת הנתונים ממודל האימון. Tensorflow ו- keras - אלה הספריות המשמשות ליצירת מודל הרשת העצבית המלאכותית, הן משמשות לעיצוב המודל. Numpy - ספרייה זו מיועדת להפיכת תמונות למערך שאפשר להעביר אותן דרך המודל כדי לאחזר תחזית.

התסריט המצורף הוא קוד הפיתון ליצירת מודל ממערך הנתונים. זה מורכב מ 2D קונפולוציה עם כניסת (5, 5) והפעלה של relu ואז איחוד, ברגע שזה נעשה הקלט עובר סיבולת נוספת עם כניסת (3, 3) עם אותה הפעלה ואיגום. זה קורה בפעם האחרונה לפני שהוחלף ואז הצפיפות מוחלת על כמות השיעורים שיש, במקרה זה 43.

השלב הבא היה חיבור המודל. זהו החלק שמגדיר את האופטימיזציה, sgd היה המתאים ביותר מכיוון שזה היה דומה לאופטימיזציה המשמשת במשימה 1. Sgd מייצג ירידה בשיפוע סטוכסטי. גם בתוך המהדר צריך להגדיר את ההפסד, בחירת הפסד דלי_קטגוריה_קרוסנטרופית היא ההתאמה הטובה ביותר מכיוון שהקטגוריות הן מספרים שלמים והמודל יפיק חיזוי לכל מחלקה כצף בין 0 ל -1. 1 הוא דיוק של 100%.

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

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

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

מצורף סקריפט ההדרכה:

שלב 3: יישום תחזיות המצלמה של פי

התוכנית הבאה היא חיזוי ותסריט המוציא לאור.

השלב הראשון הוא טעינת המודל באמצעות model.load (). השלב השני הוא לחזור על המסגרות ממצלמת ה- pi באמצעות opencv ולאחר מכן לשנות את גודל המסגרת לאותו גודל כמו גדלי הקלט המשמשים בשלב האימון, 32 x 32 פיקסלים. ברגע שזה נעשה, מסגרת הגודל החדשה משתנה באמצעות המודל באמצעות model.predict () שיוצא מטריצה, כל אלמנט של המטריצה הוא צף מ -0 ל -1, מדד האלמנטים זהה למחלקה שהיא מייצגת, ומכאן האלמנט הראשון הוא מחלקה אחת והמספר הוא חיזוי הוודאות של התמונה הנובעת ממעמד זה. לְמָשָׁל.

הערה: אם אינך משתמש בצד הרובוט. פשוט הסר את השורות:

"יבוא ורוד"

מדבר def (כיוון):

הודעה = מחרוזת ()

pub = rospy. Publisher ('רובוט', מחרוזת, queue_size = 10)

rospy.init_node ('מדבר', אנונימי = נכון)

הודעה = כיוון

rospy.loginfo (הודעה)

pub.publish (הודעה)"

"מדבר (כיוון)"

מצורף סקריפט המצלמה של Pi.

שלב 4: רובוט ארדואינו

השלב האחרון הוא סקריפט תוכנית הרובוט.

זה כתוב ב- C ++ והוא קובץ.ino עבור ה- arduino uno. התוכנית דורשת את ספריית ros שניתן למצוא במנהל הספריות בתוך האידי. ברגע שזה מיובא ישנם קבצי דוגמה, בחרתי להרחיב את קובץ ה- blink flash כיוון שזה יעשה מטרה דומה למה שאני צריך. התוכנית ממשיכה לולאה עד לניתוק הכוח, ראשית היא מקשיבה לרובוט הנושא, כאשר היא תופסת פקודה מאותו נושא תהיה לה הצהרת if כדי לראות מה הפקודה אומרת. אם הפקודה נשארת אז התסריט מריץ את שיטת הפנייה שמאלה, אם הפקודה צודקת אז היא תפעיל את שיטת הפנייה ימינה ואחר כך היא תריץ את שיטת קדימה. שלוש השיטות דומות מאוד זו לזו, הן אומרות שהסיכות הדיגיטליות הן LOW (קרקע) או 100 (PWM) בשביל זה, כך שהרובוט לא יהיה מהיר מדי על ידי כך שהוא אומר לנהג המנוע לתת רק קצת מתח החוצה. סדר היציאות הללו הוא מה שגורם לרובוט לפנות שמאלה וימינה או ללכת קדימה, זאת בשל כיוון המתח העובר למנועים.

מצורף סקריפט.ino עבור arduino.

שלב 5: בדיקה

בדיקה
בדיקה
בדיקה
בדיקה
בדיקה
בדיקה

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

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

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

שלב 6: כל הקבצים הנוספים

כל הקבצים הנוספים
כל הקבצים הנוספים

חלקם בדקו קבצים שיצרתי בדרך.

מוּמלָץ: