Πίνακας περιεχομένων:

Αναλυτής μοτίβου κυκλοφορίας με χρήση ανίχνευσης ζωντανών αντικειμένων: 11 βήματα (με εικόνες)
Αναλυτής μοτίβου κυκλοφορίας με χρήση ανίχνευσης ζωντανών αντικειμένων: 11 βήματα (με εικόνες)

Βίντεο: Αναλυτής μοτίβου κυκλοφορίας με χρήση ανίχνευσης ζωντανών αντικειμένων: 11 βήματα (με εικόνες)

Βίντεο: Αναλυτής μοτίβου κυκλοφορίας με χρήση ανίχνευσης ζωντανών αντικειμένων: 11 βήματα (με εικόνες)
Βίντεο: Πώς να κάνεις καλά πράγματα να σου συμβούν. Ακουστικό βιβλίο 2024, Δεκέμβριος
Anonim
Image
Image
Αναλυτής μοτίβου κυκλοφορίας χρησιμοποιώντας ανίχνευση ζωντανών αντικειμένων
Αναλυτής μοτίβου κυκλοφορίας χρησιμοποιώντας ανίχνευση ζωντανών αντικειμένων

Στον σημερινό κόσμο, τα φανάρια είναι απαραίτητα για έναν ασφαλή δρόμο. Ωστόσο, πολλές φορές, τα φανάρια μπορεί να είναι ενοχλητικά σε καταστάσεις όπου κάποιος πλησιάζει το φως ακριβώς όταν γίνεται κόκκινο. Αυτό χάνει χρόνο, ειδικά αν το φως εμποδίζει ένα μόνο όχημα να περάσει από τη διασταύρωση όταν δεν υπάρχει κανένας άλλος στο δρόμο. Η καινοτομία μου είναι ένα έξυπνο φανάρι που χρησιμοποιεί ζωντανή ανίχνευση αντικειμένων από μια κάμερα για να μετρήσει τον αριθμό των αυτοκινήτων σε κάθε δρόμο. Το υλικό που θα χρησιμοποιήσω για αυτό το έργο είναι ένα Raspberry Pi 3, μια μονάδα κάμερας και διάφορα ηλεκτρονικά υλικά για το ίδιο το φως. Χρησιμοποιώντας το OpenCV στο Raspberry Pi, οι πληροφορίες που συλλέγονται θα εκτελούνται μέσω κώδικα που ελέγχει τα LED μέσω του GPIO. Ανάλογα με αυτούς τους αριθμούς, το φανάρι θα αλλάξει, αφήνοντας τα αυτοκίνητα να περάσουν στην πιο βέλτιστη σειρά. Σε αυτή την περίπτωση, η λωρίδα με τα περισσότερα αυτοκίνητα θα διαπεράσει, έτσι ώστε η λωρίδα με λιγότερα αυτοκίνητα να βρίσκεται σε ρελαντί, μειώνοντας την ατμοσφαιρική ρύπανση. Αυτό θα εξαλείψει καταστάσεις όταν πολλά αυτοκίνητα σταματούν ενώ δεν υπάρχουν αυτοκίνητα στο δρόμο που διασταυρώνεται. Αυτό όχι μόνο εξοικονομεί χρόνο για όλους, αλλά εξοικονομεί και το περιβάλλον. Ο χρόνος που οι άνθρωποι σταματούν στο σήμα στάσης με τον κινητήρα στο ρελαντί αυξάνει την ατμοσφαιρική ρύπανση, οπότε δημιουργώντας ένα έξυπνο φανάρι, είμαι σε θέση να βελτιστοποιήσω τα μοτίβα φωτισμού έτσι ώστε τα αυτοκίνητα να περνούν τον λιγότερο δυνατό χρόνο με το όχημά τους σταματημένο Το Τελικά, αυτό το σύστημα φωτεινών σηματοδοτών θα μπορούσε να εφαρμοστεί σε πόλεις, προάστια ή ακόμα και αγροτικές περιοχές, ώστε να είναι πιο αποτελεσματικό για τους ανθρώπους και θα μειώσει την ατμοσφαιρική ρύπανση.

Βήμα 1: Λίστα μερών

Υλικά:

Raspberry Pi 3 Model B v1.2

Κάμερα Raspberry Pi v2.1

Τροφοδοσία 5V/1A micro USB

Οθόνη HDMI, πληκτρολόγιο, κάρτα SD ποντικιού με Raspbian Jessie

Raspberry Pi GPIO breakout καλώδιο

Κόκκινες, κίτρινες, πράσινες λυχνίες LED (2 από κάθε χρώμα)

Θηλυκές συνδέσεις για Raspberry Pi (7 μοναδικά χρώματα)

Ποικιλία καλωδίων 24 μετρητών (διαφορετικά χρώματα) + σωλήνες θερμοσυρρίκνωσης

Ξύλινο πάνελ ή πλατφόρμα 2’x2’

Βίδες ξύλου

Μαύρη επιφάνεια (χαρτόνι, σανίδα αφρού, αφίσα κλπ.)

Λευκή (ή οποιοδήποτε άλλο χρώμα εκτός από τη μαύρη) ταινία για σήμανση δρόμων

Μαύρη βαφή ψεκασμού (για PVC)

Pipe”σωλήνας PVC με αρθρώσεις αγκώνα 90 μοιρών (2), υποδοχή T (1), θηλυκό προσαρμογέα (2)

Εργαλεία

Συγκολλητικό σίδερο

Τρισδιάστατος εκτυπωτής

Τρυπάνι με διάφορα τρυπάνια

Breadboard

Θερμικό όπλο

Βήμα 2: Ρύθμιση του Raspberry Pi

Φορτώστε την κάρτα SD στο Raspberry Pi και ξεκινήστε.

Ακολουθήστε αυτόν τον οδηγό για να εγκαταστήσετε τις απαιτούμενες βιβλιοθήκες OpenCV. Βεβαιωθείτε ότι έχετε χρόνο να κάνετε αυτό το βήμα, καθώς η εγκατάσταση της βιβλιοθήκης OpenCV μπορεί να διαρκέσει μερικές ώρες. Φροντίστε επίσης να εγκαταστήσετε και να ρυθμίσετε τη φωτογραφική σας μηχανή εδώ.

Θα πρέπει επίσης να εγκαταστήσετε pip:

picamera

gpiozero

RPi. GPIO

Εδώ είναι ο οριστικός κωδικός:

από το picamera.array import 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

ακατέργαστο = PiRGBArray (έκκεντρο, μέγεθος = (480, 480))

ώρα. ύπνος (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):

πλαίσιο = πλαίσιο.συστοιχία

hsv = cv2.cvtColor (πλαίσιο, cv2. COLOR_BGR2HSV)

μάσκα = cv2.inRange (hsv, colorLower, colorUpper)

μάσκα = cv2.blur (μάσκα, (3, 3))

μάσκα = cv2.dilate (μάσκα, Καμία, επαναλήψεις = 5)

μάσκα = cv2.erode (μάσκα, Καμία, επαναλήψεις = 1)

μάσκα = cv2.dilate (μάσκα, Καμία, επαναλήψεις = 3)

εγώ, thresh = cv2.threshold (μάσκα, 127, 255, cv2. THRESH_BINARY)

cnts = cv2.findContours (thresh, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE) [-2]

κέντρο = Κανένα

vert = 0

horiz = 0

αν len (cnts)> 0:

για c σε cnts:

(x, y), ακτίνα = cv2.minEnclosingCircle (c)

κέντρο = (int (x), int (y))

ακτίνα = int (ακτίνα)

cv2. κύκλος (πλαίσιο, κέντρο, ακτίνα, (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:

horiz = horiz +1

elif x <180:

horiz = horiz +1

αλλού:

horiz = horiz

αν vert! = initvert:

εκτύπωση "Αυτοκίνητα σε κάθετη λωρίδα:" + str (vert)

initvert = vert

εκτύπωση "Αυτοκίνητα σε οριζόντια λωρίδα:" + str (horizon)

inithoriz = ορίζοντας

Τυπώνω '----------------------------'

if horiz! = inithoriz:

εκτύπωση "Αυτοκίνητα σε κάθετη λωρίδα:" + str (vert)

initvert = vert

εκτύπωση "Αυτοκίνητα σε οριζόντια λωρίδα:" + str (horizon)

inithoriz = ορίζοντας

Τυπώνω '----------------------------'

αν vert <horiz:

GPIO.output (23, GPIO. HIGH)

GPIO.output (21, GPIO. HIGH)

GPIO.output (16, GPIO. LOW)

GPIO.output (25, GPIO. LOW)

αν horiz <vert:

GPIO.output (16, GPIO. HIGHT)

GPIO.output (25, GPIO. HIGH)

GPIO.output (23, GPIO. LOW)

GPIO.output (21, GPIO. LOW)

cv2.imshow ("Πλαίσιο", πλαίσιο)

cv2.imshow ("HSV", hsv)

cv2.imshow ("Thresh", thresh)

raw.truncate (0)

εάν cv2.waitKey (1) & 0xFF == ord ('q'):

Διακοπή

cv2.destroyAllWindows ()

GPIO.cleanup ()

Βήμα 3: Raspberry Pi και Camera Mount

Raspberry Pi και Camera Mount
Raspberry Pi και Camera Mount
Raspberry Pi και Camera Mount
Raspberry Pi και Camera Mount
Raspberry Pi και Camera Mount
Raspberry Pi και Camera Mount
Raspberry Pi και Camera Mount
Raspberry Pi και Camera Mount

Τρισδιάστατη εκτύπωση της θήκης και της κάμερας για τοποθέτηση και συναρμολόγηση.

Βήμα 4: Συναρμολόγηση φανών

Συναρμολόγηση φανών
Συναρμολόγηση φανών
Συναρμολόγηση φανών
Συναρμολόγηση φανών
Συναρμολόγηση φανών
Συναρμολόγηση φανών

Δοκιμάστε το φανάρι με ένα breadboard. Κάθε αντίθετο σύνολο LED μοιράζεται μια άνοδο και όλα έχουν μια κοινή κάθοδο (γείωση). Θα πρέπει να υπάρχουν συνολικά 7 καλώδια εισόδου: 1 για κάθε ζεύγος LEDS (6) + 1 καλώδιο γείωσης. Συγκολλήστε και συναρμολογήστε τα φανάρια.

Βήμα 5: Καλωδίωση (Μέρος 1)

Καλωδίωση (Μέρος 1)
Καλωδίωση (Μέρος 1)
Καλωδίωση (Μέρος 1)
Καλωδίωση (Μέρος 1)
Καλωδίωση (Μέρος 1)
Καλωδίωση (Μέρος 1)
Καλωδίωση (Μέρος 1)
Καλωδίωση (Μέρος 1)

Συγκολλήστε τις θηλυκές καρφίτσες κεφαλίδας σε περίπου 5 πόδια σύρμα. Αυτές είναι οι πλευρές που αυτά τα καλώδια θα περάσουν αργότερα από τους σωλήνες PVC. Φροντίστε να μπορείτε να διακρίνετε τα διαφορετικά σετ φώτων (2 x 3 χρώματα και 1 γείωση). Σε αυτή την περίπτωση, σημάδεψα τα άκρα ενός άλλου σετ κόκκινων, κίτρινων και μπλε καλωδίων με αιχμηρό άκρο, ώστε να ξέρω ποιο είναι ποιο.

Βήμα 6: Χτίζοντας το Περιβάλλον

Χτίζοντας το Περιβάλλον
Χτίζοντας το Περιβάλλον
Χτίζοντας το Περιβάλλον
Χτίζοντας το Περιβάλλον
Χτίζοντας το Περιβάλλον
Χτίζοντας το Περιβάλλον
Χτίζοντας το Περιβάλλον
Χτίζοντας το Περιβάλλον

Χτίζοντας το περιβάλλον Κάντε μια τετράγωνη ξύλινη παλέτα 2 ποδιών σαν αυτή. Τα παλιοσίδερα είναι ωραία καθώς θα καλυφθούν. Τρυπήστε μια τρύπα που ταιριάζει ακριβώς στον προσαρμογέα σας. Τρυπήστε βίδες στις πλευρές της παλέτας για να στερεώσετε τον σωλήνα PVC στη θέση του. Κόψτε τη μαύρη σανίδα αφρού για να ταιριάζει με την ξύλινη παλέτα από κάτω. Τρυπήστε μια τρύπα που ταιριάζει γύρω από το σωλήνα PVC. Επαναλάβετε στην απέναντι γωνία. Σημειώστε τους δρόμους με κάποια λευκή ταινία.

Βήμα 7: Ολοκλήρωση του πλαισίου PVC

Ολοκλήρωση του πλαισίου PVC
Ολοκλήρωση του πλαισίου PVC
Ολοκλήρωση του πλαισίου PVC
Ολοκλήρωση του πλαισίου PVC
Ολοκλήρωση του πλαισίου PVC
Ολοκλήρωση του πλαισίου PVC

Στον επάνω σωλήνα, ανοίξτε μια τρύπα που μπορεί να χωρέσει μια δέσμη καλωδίων. Μια τραχιά τρύπα είναι καλή αρκεί να έχετε πρόσβαση στο εσωτερικό των σωλήνων. Περάστε τα καλώδια μέσω των σωλήνων PVC και των αρθρώσεων των αγκώνων για δοκιμαστική εφαρμογή. Μόλις οριστικοποιηθούν όλα, βάψτε το PVC με λίγο μαύρο χρώμα σπρέι για να καθαρίσετε την εμφάνιση του κύριου πλαισίου. Κόψτε ένα μικρό κενό σε έναν από τους σωλήνες PVC για να χωρέσει μια άρθρωση Τ. Προσθέστε έναν σωλήνα PVC σε αυτήν την ένωση t για να κρεμάσει το φανάρι. Η διάμετρος θα μπορούσε να είναι η ίδια με το κύριο πλαίσιο (1/2 ), αν και εάν χρησιμοποιείτε λεπτότερο σωλήνα, βεβαιωθείτε ότι τα 7 καλώδια μπορούν να περάσουν. Τρυπήστε μια τρύπα μέσω αυτού του σωλήνα για να κρεμάσει το φανάρι.

Βήμα 8: Καλωδίωση (Μέρος 2)

Καλωδίωση (Μέρος 2)
Καλωδίωση (Μέρος 2)
Καλωδίωση (Μέρος 2)
Καλωδίωση (Μέρος 2)
Καλωδίωση (Μέρος 2)
Καλωδίωση (Μέρος 2)

Συνδέστε ξανά τα πάντα όπως δοκιμάστηκε προηγουμένως. Ελέγξτε ξανά το φανάρι και την καλωδίωση με ένα breadboard για να επιβεβαιώσετε ότι έχουν πραγματοποιηθεί όλες οι συνδέσεις. Συγκολλήστε το φανάρι στα καλώδια που περνούν μέσω του βραχίονα άρθρωσης Τ. Τυλίξτε τα εκτεθειμένα καλώδια με ηλεκτρική ταινία για να αποφύγετε τυχόν σορτς και για καθαρότερη εμφάνιση.

Βήμα 9: Τέλειωσε

Πεπερασμένος!
Πεπερασμένος!
Πεπερασμένος!
Πεπερασμένος!
Πεπερασμένος!
Πεπερασμένος!
Πεπερασμένος!
Πεπερασμένος!

Για να εκτελέσετε τον κώδικα, φροντίστε να ορίσετε την πηγή σας ως pr/.profile και cd στην τοποθεσία του έργου σας.

Βήμα 10: Επιπλέον (Φωτογραφίες)

Συνιστάται: