Sommario:

Analizzatore di modelli di traffico che utilizza il rilevamento di oggetti in tempo reale: 11 passaggi (con immagini)
Analizzatore di modelli di traffico che utilizza il rilevamento di oggetti in tempo reale: 11 passaggi (con immagini)

Video: Analizzatore di modelli di traffico che utilizza il rilevamento di oggetti in tempo reale: 11 passaggi (con immagini)

Video: Analizzatore di modelli di traffico che utilizza il rilevamento di oggetti in tempo reale: 11 passaggi (con immagini)
Video: Novità nel kernel linux parlando di Rust e Microkernels e guardando al futuro del kernel più diffuso 2024, Luglio
Anonim
Image
Image
Analizzatore di modelli di traffico che utilizza il rilevamento di oggetti in tempo reale
Analizzatore di modelli di traffico che utilizza il rilevamento di oggetti in tempo reale

Nel mondo di oggi, i semafori sono essenziali per una strada sicura. Tuttavia, molte volte, i semafori possono essere fastidiosi in situazioni in cui qualcuno si avvicina al semaforo proprio mentre sta diventando rosso. Questo fa perdere tempo, soprattutto se la luce impedisce a un singolo veicolo di attraversare l'incrocio quando non c'è nessun altro sulla strada. La mia innovazione è un semaforo intelligente che utilizza il rilevamento di oggetti in tempo reale da una telecamera per contare il numero di auto su ogni strada. L'hardware che utilizzerò per questo progetto è un Raspberry Pi 3, un modulo fotocamera e vari hardware elettronici per la luce stessa. Utilizzando OpenCV sul Raspberry Pi, le informazioni raccolte verranno eseguite tramite il codice che controlla i LED tramite il GPIO. A seconda di questi numeri, il semaforo cambierà, lasciando passare le auto nell'ordine più ottimale. In questo caso, la corsia con il maggior numero di auto verrebbe lasciata passare in modo che la corsia con meno auto rimarrebbe al minimo, riducendo l'inquinamento atmosferico. Ciò eliminerebbe le situazioni in cui molte auto vengono fermate mentre non ci sono auto sulla strada che si interseca. Questo non solo fa risparmiare tempo a tutti, ma salva anche l'ambiente. La quantità di tempo in cui le persone vengono fermate a un segnale di stop con il motore al minimo aumenta la quantità di inquinamento atmosferico, quindi creando un semaforo intelligente, sono in grado di ottimizzare i modelli di illuminazione in modo che le auto trascorrano il minor tempo possibile con il loro veicolo fermo. In definitiva, questo sistema di semafori potrebbe essere implementato nelle città, nei sobborghi o persino nelle aree rurali per essere più efficiente per le persone e ridurre l'inquinamento atmosferico.

Passaggio 1: elenco delle parti

Materiali:

Raspberry Pi 3 Modello B v1.2

Fotocamera Raspberry Pi v2.1

Alimentatore micro USB 5V/1A

Monitor HDMI, tastiera, mouse Scheda SD con Raspbian Jessie

Cavo breakout GPIO Raspberry Pi

LED rosso, giallo, verde (2 di ogni colore)

Connettori femmina per Raspberry Pi (7 colori unici)

Filo assortito da 24 gauge (diversi colori) + guaina termorestringente

Pannello o piattaforma in legno 2'x2'

Viti per legno

Superficie nera (cartone, cartone espanso, cartoncino, ecc.)

Nastro bianco (o di qualsiasi colore diverso dal nero) per segnaletica orizzontale

Vernice spray nera (per PVC)

Tubo in PVC da ½” con giunti a gomito a 90 gradi (2), presa a T (1), adattatore femmina (2)

Utensili

Saldatore

stampante 3d

Trapano con varie punte da trapano

tagliere

Pistola termica

Passaggio 2: configurazione del Raspberry Pi

Carica la scheda SD nel Raspberry Pi e avvia.

Segui questa guida per installare le librerie OpenCV richieste. Assicurati di avere tempo per eseguire questo passaggio, poiché l'installazione della libreria OpenCV può richiedere un paio d'ore. Assicurati di installare e configurare anche la videocamera qui.

Dovresti anche installare pip:

picamera

gpiozero

RPi. GPIO

Ecco il codice definitivo:

da picamera.array import PiRGBArray

da picamera import PiCamera

import picamera.array

importa numpy come np

tempo di importazione

importa cv2

importa RPi. GPIO come GPIO

tempo di importazione

GPIO.setmode(GPIO. BCM)

per io in (23, 25, 16, 21):

GPIO.setup(i, GPIO. OUT)

cam = PiCamera()

cam.risoluzione=(480, 480)

cam.framerate=30

raw=PiRGBArray(cam, size=(480, 480))

tempo.sonno(0.1)

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

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

initvert = 0

initoriz = 0

contatore = 0

per il frame in cam.capture_continuous(raw, format="bgr", use_video_port=True):

frame = frame.array

hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)

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

maschera = cv2.blur(maschera, (3, 3))

mask= cv2.dilate(maschera, Nessuna, iterazioni=5)

mask= cv2.erode(mask, Nessuno, iterazioni=1)

mask= cv2.dilate(maschera, Nessuna, iterazioni=3)

me, soglia = cv2.threshold(maschera, 127, 255, cv2. THRESH_BINARY)

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

centro = Nessuno

vert = 0

orizzonte = 0

se len(cnts) > 0:

per c in cnt:

(x, y), raggio = cv2.minEnclosingCircle(c)

centro = (int(x), int(y))

raggio = int(raggio)

cv2.circle(cornice, centro, raggio, (0, 255, 0), 2)

x = intero(x)

y = int(y)

se 180 < x < 300:

se y > 300:

vert = vert +1

elif y < 180:

vert = vert +1

altro:

vert = vert

se 180 < y < 300:

se x > 300:

orizzonte = orizzonte +1

elif x < 180:

orizzonte = orizzonte +1

altro:

horiz = horiz

se vert != initvert:

print"Auto in corsia verticale: " + str(vert)

initvert = vert

print"Auto in corsia orizzontale: " + str(horiz)

inithoriz = horiz

stampa '----------------------------'

if horiz != inithoriz:

print"Auto in corsia verticale: " + str(vert)

initvert = vert

print"Auto in corsia orizzontale: " + str(horiz)

inithoriz = horiz

stampa '----------------------------'

se vert < horiz:

GPIO.output(23, GPIO. HIGH)

GPIO.output(21, GPIO. HIGH)

GPIO.output(16, GPIO. LOW)

GPIO.output(25, GPIO. LOW)

se orizzontale < verticale:

GPIO.output(16, GPIO. HIGH)

GPIO.output(25, GPIO. HIGH)

GPIO.output(23, GPIO. LOW)

GPIO.output(21, GPIO. LOW)

cv2.imshow("Cornice", cornice)

cv2.imshow("HSV", hsv)

cv2.imshow("Soglia", Soglia)

raw.truncate(0)

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

rottura

cv2.destroyAllWindows()

GPIO.cleanup()

Passaggio 3: Raspberry Pi e supporto per fotocamera

Raspberry Pi e supporto per fotocamera
Raspberry Pi e supporto per fotocamera
Raspberry Pi e supporto per fotocamera
Raspberry Pi e supporto per fotocamera
Raspberry Pi e supporto per fotocamera
Raspberry Pi e supporto per fotocamera
Raspberry Pi e supporto per fotocamera
Raspberry Pi e supporto per fotocamera

Stampa in 3D la custodia e il supporto della fotocamera e assembla.

Passaggio 4: montaggio del semaforo

Assemblea del semaforo
Assemblea del semaforo
Assemblea del semaforo
Assemblea del semaforo
Assemblea del semaforo
Assemblea del semaforo

Prova il semaforo con una breadboard. Ogni serie opposta di LED condivide un anodo e tutti condividono un catodo comune (terra). Dovrebbero esserci un totale di 7 fili di ingresso: 1 per ogni coppia di LED (6) + 1 filo di terra. Saldare e montare i semafori.

Passaggio 5: cablaggio (parte 1)

Cablaggio (Parte 1)
Cablaggio (Parte 1)
Cablaggio (Parte 1)
Cablaggio (Parte 1)
Cablaggio (Parte 1)
Cablaggio (Parte 1)
Cablaggio (Parte 1)
Cablaggio (Parte 1)

Saldare i pin dell'intestazione femmina a circa 5 piedi di filo. Questi sono i lati che questi fili serperanno attraverso i tubi in PVC in seguito. Assicurati di essere in grado di distinguere i diversi set di luci (2 x 3 colori e 1 terreno). In questo caso, ho contrassegnato le estremità di un'altra serie di fili rossi, gialli e blu con un pennarello in modo da sapere quale è quale.

Passaggio 6: costruire l'ambiente

Costruire l'ambiente
Costruire l'ambiente
Costruire l'ambiente
Costruire l'ambiente
Costruire l'ambiente
Costruire l'ambiente
Costruire l'ambiente
Costruire l'ambiente

Costruire l'ambiente Crea un pallet di legno quadrato di 2 piedi come questo. Il legno di scarto va bene perché sarà coperto. Pratica un foro che si adatti perfettamente al tuo adattatore. Forare le viti attraverso i lati del pallet per fissare il tubo in PVC in posizione. Taglia il pannello di schiuma nera in modo che corrisponda al pallet di legno sottostante. Praticare un foro che si adatti al tubo in PVC. Ripetere sull'angolo opposto. Segna le strade con del nastro adesivo bianco.

Passaggio 7: finalizzazione del telaio in PVC

Finalizzazione del telaio in PVC
Finalizzazione del telaio in PVC
Finalizzazione del telaio in PVC
Finalizzazione del telaio in PVC
Finalizzazione del telaio in PVC
Finalizzazione del telaio in PVC

Sul tubo superiore, praticare un foro che possa contenere un fascio di fili. Un foro grezzo va bene fintanto che è possibile accedere all'interno dei tubi. Infilare i fili attraverso i tubi in PVC e i giunti a gomito per una prova di adattamento. Una volta che tutto è stato finalizzato, dipingi il PVC con della vernice spray nera per ripulire l'aspetto del telaio principale. Taglia un piccolo spazio in uno dei tubi in PVC per adattarlo a un giunto a T. Aggiungi un tubo in PVC a questo giunto a T per far pendere il semaforo. Il diametro potrebbe essere lo stesso del telaio principale (1/2 ), ma se usi un tubo più sottile, assicurati che i 7 fili possano passare attraverso. Pratica un foro attraverso questo tubo per far penzolare il semaforo.

Passaggio 8: cablaggio (parte 2)

Cablaggio (Parte 2)
Cablaggio (Parte 2)
Cablaggio (Parte 2)
Cablaggio (Parte 2)
Cablaggio (Parte 2)
Cablaggio (Parte 2)

Ricollegare tutto come testato in precedenza. Ricontrolla il semaforo e il cablaggio con una breadboard per confermare che tutti i collegamenti siano stati effettuati. Saldare il semaforo ai fili che passano attraverso il braccio del giunto a T. Avvolgi i fili scoperti con del nastro isolante per evitare cortocircuiti e per un aspetto più pulito.

Passaggio 9: finito

Finito!
Finito!
Finito!
Finito!
Finito!
Finito!
Finito!
Finito!

Per eseguire il codice, assicurati di impostare la tua fonte come ~/.profile e cd nella posizione del tuo progetto.

Passaggio 10: extra (foto)

Consigliato: