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

מנתח תבניות תנועה באמצעות זיהוי אובייקטים חיים: 11 שלבים (עם תמונות)
מנתח תבניות תנועה באמצעות זיהוי אובייקטים חיים: 11 שלבים (עם תמונות)

וִידֵאוֹ: מנתח תבניות תנועה באמצעות זיהוי אובייקטים חיים: 11 שלבים (עם תמונות)

וִידֵאוֹ: מנתח תבניות תנועה באמצעות זיהוי אובייקטים חיים: 11 שלבים (עם תמונות)
וִידֵאוֹ: WIZE: ד"ר נמרוד קוזלובסקי - עולם ללא פשע, חירות ובירה 2024, נוֹבֶמבֶּר
Anonim
Image
Image
מנתח תבניות תנועה באמצעות זיהוי אובייקטים חיים
מנתח תבניות תנועה באמצעות זיהוי אובייקטים חיים

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

שלב 1: רשימת חלקים

חומרים:

Raspberry Pi 3 דגם B v1.2

מצלמת Raspberry Pi v2.1

ספק כוח מיקרו USB 5V/1A

צג HDMI, מקלדת, כרטיס SD עכבר עם ג'סי Raspbian

כבל פריצה של Raspberry Pi GPIO

נוריות אדומות, צהובות, ירוקות (2 מכל צבע)

מחברים נקבים ל- Raspberry Pi (7 צבעים ייחודיים)

חוט 24 מד שונה (צבעים שונים) + צינורות כיווץ חום

לוח או פלטפורמה מעץ 2'x2 '

ברגים מעץ

משטח שחור (קרטון, לוח קצף, לוח פוסטרים וכו ')

סרט לבן (או כל צבע אחר מאשר שחור) לסימון כבישים

צבע ריסוס שחור (ל- PVC)

צינור PVC בגודל חצי אינץ 'עם מפרקי מרפקים 90 מעלות (2), שקע T (1), מתאם נקבה (2)

כלים

מלחם

מדפסת תלת מימד

מקדחה עם מקדחים שונים

לוח לחם

אקדח חום

שלב 2: הגדרת ה- Raspberry Pi

טען את כרטיס ה- SD ב- Raspberry Pi והפעל אתחול.

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

עליך גם להתקין פיפ:

פיקמרה

gpiozero

RPi. GPIO

להלן הקוד הסופי:

מייבוא picamera.array PiRGBArray

מייבוא picamera PiCamera

ייבא picamera.array

ייבא numpy כמו np

זמן יבוא

יבוא cv2

ייבא RPi. GPIO כ- GPIO

זמן יבוא

GPIO.setmode (GPIO. BCM)

עבור i in (23, 25, 16, 21):

GPIO.setup (i, GPIO. OUT)

cam = PiCamera ()

cam.resolution = (480, 480)

cam.framerate = 30

raw = PiRGBArray (מצלמה, גודל = (480, 480))

time.sleep (0.1)

colorLower = np.array ([0, 100, 100])

colorUpper = np.array ([179, 255, 255])

initvert = 0

inithoriz = 0

מונה = 0

למסגרת ב- cam.capture_continuous (raw, format = "bgr", use_video_port = True):

frame = frame.array

hsv = cv2.cvtColor (מסגרת, cv2. COLOR_BGR2HSV)

mask = cv2.inRange (hsv, colorLower, colorUpper)

מסכה = cv2.blur (מסכה, (3, 3))

מסכה = cv2.dilate (מסכה, ללא, איטרציות = 5)

mask = cv2.erode (מסכה, ללא, איטרציות = 1)

מסכה = cv2.dilate (מסכה, ללא, איטרציות = 3)

אני, גוש = cv2.threshold (מסכה, 127, 255, cv2. THRESH_BINARY)

cnts = cv2.findContours (גוש, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE) [-2]

מרכז = אין

vert = 0

אופק = 0

אם len (cnts)> 0:

עבור c ב- cnts:

(x, y), רדיוס = cv2.min סגירת מעגל (c)

מרכז = (int (x), int (y))

רדיוס = int (רדיוס)

cv2.circle (מסגרת, מרכז, רדיוס, (0, 255, 0), 2)

x = int (x)

y = int (y)

אם 180 <x <300:

אם y> 300:

vert = vert +1

elif y <180:

vert = vert +1

אַחֵר:

vert = vert

אם 180 <y <300:

אם x> 300:

אופק = אופק +1

elif x <180:

אופק = אופק +1

אַחֵר:

אופק = אופק

אם vert! = initvert:

- "מכוניות בנתיב אנכי:" + str (vert)

initvert = vert

- "מכוניות בנתיב אופקי:" + str (אופק)

inithoriz = אופק

הדפס '----------------------------'

אם אופק! = inithoriz:

- "מכוניות בנתיב אנכי:" + str (vert)

initvert = vert

- "מכוניות בנתיב אופקי:" + str (אופק)

inithoriz = אופק

הדפס '----------------------------'

אם vert <אופק:

פלט GPIO.out (23, GPIO. HIGH)

פלט GPIO. 21 (GPIO. HIGH)

פלט GPIO.out (16, GPIO. LOW)

פלט GPIO.out (25, GPIO. LOW)

אם אופק <vert:

פלט GPIO (16, GPIO. HIGH)

פלט GPIO.out (25, GPIO. HIGH)

פלט GPIO.out (23, GPIO. LOW)

פלט GPIO.out (21, GPIO. LOW)

cv2.imshow ("מסגרת", מסגרת)

cv2.imshow ("HSV", hsv)

cv2.imshow ("סף", גוש)

raw.truncate (0)

אם cv2.waitKey (1) & 0xFF == ord ('q'):

לשבור

cv2.destroyAllWindows ()

GPIO.cleanup ()

שלב 3: פטל פאי והר מצלמה

פטל פאי והר מצלמה
פטל פאי והר מצלמה
פטל פאי והר מצלמה
פטל פאי והר מצלמה
פטל פאי והר מצלמה
פטל פאי והר מצלמה
פטל פאי והר מצלמה
פטל פאי והר מצלמה

הדפס תלת -ממד את המארז ותושבת המצלמה והרכבה.

שלב 4: הרכבה של רמזורים

הרכבה של רמזור
הרכבה של רמזור
הרכבת רמזור
הרכבת רמזור
הרכבה של רמזור
הרכבה של רמזור

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

שלב 5: חיווט (חלק 1)

חיווט (חלק 1)
חיווט (חלק 1)
חיווט (חלק 1)
חיווט (חלק 1)
חיווט (חלק 1)
חיווט (חלק 1)
חיווט (חלק 1)
חיווט (חלק 1)

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

שלב 6: בניית הסביבה

בניית איכות הסביבה
בניית איכות הסביבה
בניית איכות הסביבה
בניית איכות הסביבה
בניית איכות הסביבה
בניית איכות הסביבה
בניית איכות הסביבה
בניית איכות הסביבה

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

שלב 7: סיום מסגרת ה- PVC

סיום מסגרת PVC
סיום מסגרת PVC
סיום מסגרת PVC
סיום מסגרת PVC
סיום מסגרת PVC
סיום מסגרת PVC

על הצינור העליון, לקדוח חור שיכול להתאים לצרור חוטים. חור מחוספס בסדר גמור כל עוד ניתן לגשת אל פנים הצינורות. נחש את החוטים דרך צינורות ה- PVC ומפרקי המרפק להתאמת מבחן. לאחר שהכל סיים, צבעו את ה- PVC בעזרת צבע ריסוס שחור כדי לנקות את מראה המסגרת הראשית. חותכים פער קטן באחד מצינורות ה- PVC כך שיתאימו למפרק T. הוסף צינור PVC למפרק ה- t כדי שהרמזור יתקע ממנו. הקוטר יכול להיות זהה למסגרת הראשית (1/2 אינץ '), אם כי אם אתה משתמש בצינור דק יותר, וודא ש -7 החוטים יכולים להתגנב דרכו. קדח חור דרך הצינור כדי שהרמזור יתלוש ממנו.

שלב 8: חיווט (חלק 2)

חיווט (חלק 2)
חיווט (חלק 2)
חיווט (חלק 2)
חיווט (חלק 2)
חיווט (חלק 2)
חיווט (חלק 2)

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

שלב 9: סיים

גָמוּר!
גָמוּר!
גָמוּר!
גָמוּר!
גָמוּר!
גָמוּר!
גָמוּר!
גָמוּר!

כדי להפעיל את הקוד, הקפד להגדיר את המקור שלך כ ~/.profile ו- cd למיקום הפרויקט שלך.

שלב 10: תוספות (תמונות)

מוּמלָץ: