Innehållsförteckning:

Trafikmönsteranalysator med Live Object Detection: 11 steg (med bilder)
Trafikmönsteranalysator med Live Object Detection: 11 steg (med bilder)

Video: Trafikmönsteranalysator med Live Object Detection: 11 steg (med bilder)

Video: Trafikmönsteranalysator med Live Object Detection: 11 steg (med bilder)
Video: Realtids spårning av flera objekt med YOLOv7 + ByteTrack | Vehicle Traffic Analysis Tutorial 2023 2024, November
Anonim
Image
Image
Trafikmönsteranalysator med Live Object Detection
Trafikmönsteranalysator med Live Object Detection

I dagens värld är trafikljus avgörande för en säker väg. Men många gånger kan trafikljus vara irriterande i situationer där någon närmar sig ljuset precis som det blir rött. Detta slösar tid, särskilt om ljuset hindrar ett enda fordon från att ta sig genom korsningen när det inte finns någon annan på vägen. Min innovation är ett smart trafikljus som använder liveobjektdetektering från en kamera för att räkna antalet bilar på varje väg. Hårdvaran jag kommer att använda för detta projekt är en Raspberry Pi 3, en kameramodul och olika elektroniska hårdvaror för själva ljuset. Med OpenCV på Raspberry Pi körs den insamlade informationen genom kod som styr lysdioderna via GPIO. Beroende på dessa siffror kommer trafikljuset att ändras, så att bilar släpps igenom i den mest optimala ordningen. I det här fallet skulle banan med flest bilar släppas igenom så att banan med färre bilar skulle gå på tomgång och minska luftföroreningarna. Detta skulle eliminera situationer när många bilar stoppas medan det inte finns några bilar på den korsande vägen. Detta sparar inte bara tid för alla, utan det sparar också miljön. Mängden tid folk stannar vid ett stoppskylt med motorn i tomgång ökar mängden luftföroreningar, så genom att skapa ett smart trafikljus kan jag optimera ljusmönstren så att bilar tillbringar minsta möjliga tid med sitt fordon stannat. I slutändan kan detta trafikljussystem implementeras i städer, förorter eller till och med på landsbygden för att vara mer effektivt för människor skulle minska luftföroreningar.

Steg 1: Dellista

Material:

Raspberry Pi 3 Model B v1.2

Raspberry Pi -kamera v2.1

5V/1A mikro -USB -strömförsörjning

HDMI -skärm, tangentbord, mus -SD -kort med Raspbian Jessie

Raspberry Pi GPIO -brytkabel

Röda, gula, gröna lysdioder (2 av varje färg)

Kontaktdon för Raspberry Pi (7 unika färger)

Diverse 24 gauge tråd (olika färger) + värmekrympslang

2'x2 'träpanel eller plattform

Träskruvar

Svart yta (kartong, skumbräda, affischbräda, etc.)

Vit (eller annan färg än svart) tejp för vägmarkeringar

Svart sprayfärg (för PVC)

½”PVC -rör med 90 graders armbågsfogar (2), T -uttag (1), honadapter (2)

Verktyg

Lödkolv

3d skrivare

Borra med olika borr

Bakbord

Värmepistol

Steg 2: Konfigurera Raspberry Pi

Ladda SD -kortet i Raspberry Pi och starta upp.

Följ den här guiden för att installera nödvändiga OpenCV -bibliotek. Se till att du har tid att utföra detta steg, eftersom installationen av OpenCV -biblioteket kan ta ett par timmar. Var noga med att också installera och konfigurera din kamera här.

Du bör också pipinstallera:

picamera

gpiozero

RPi. GPIO

Här är den slutgiltiga koden:

från picamera.array importera PiRGBArray

från picamera import PiCamera

importera picamera.array

importera numpy som np

importtid

importera cv2

importera RPi. GPIO som GPIO

importtid

GPIO.setmode (GPIO. BCM)

för i in (23, 25, 16, 21):

GPIO.setup (i, GPIO. OUT)

cam = PiCamera ()

cam.resolution = (480, 480)

cam.framerate = 30

raw = PiRGBArray (kamera, storlek = (480, 480))

time.sleep (0,1)

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

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

initvert = 0

inithoriz = 0

räknare = 0

för ram i cam.capture_continuous (raw, format = "bgr", use_video_port = True):

ram = ram.array

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

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

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

mask = cv2.dilate (mask, None, iterations = 5)

mask = cv2.erode (mask, None, iterations = 1)

mask = cv2.dilate (mask, None, iterations = 3)

jag, tröskan = cv2.tröskel (mask, 127, 255, cv2. THRESH_BINARY)

cnts = cv2.findContours (trösk, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE) [-2]

center = Ingen

vert = 0

horisont = 0

om len (cnts)> 0:

för c i cnts:

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

center = (int (x), int (y))

radie = int (radie)

cv2.cirkel (ram, centrum, radie, (0, 255, 0), 2)

x = int (x)

y = int (y)

om 180 <x <300:

om y> 300:

vert = vert +1

elif y <180:

vert = vert +1

annan:

vert = vert

om 180 <y <300:

om x> 300:

horison = horisont +1

elif x <180:

horison = horisont +1

annan:

horison = horisont

om vert! = initvert:

print "Bilar i vertikalt körfält:" + str (vert)

initvert = vert

print "Bilar i horisontell körfält:" + str (horisont)

inithoriz = horizon

skriv ut '----------------------------'

if horizon! = inithoriz:

print "Bilar i vertikalt körfält:" + str (vert)

initvert = vert

print "Bilar i horisontell körfält:" + str (horisont)

inithoriz = horizon

skriv ut '----------------------------'

om vert <horizon:

GPIO.output (23, GPIO. HIGH)

GPIO.output (21, GPIO. HIGH)

GPIO.output (16, GPIO. LOW)

GPIO.output (25, GPIO. LOW)

om horisont <vert:

GPIO.output (16, GPIO. HIGH)

GPIO.output (25, GPIO. HIGH)

GPIO.output (23, GPIO. LOW)

GPIO.output (21, GPIO. LOW)

cv2.imshow ("Frame", ram)

cv2.imshow ("HSV", hsv)

cv2.imshow ("Thresh", tröskning)

raw. trunkera (0)

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

ha sönder

cv2.destroyAllWindows ()

GPIO.cleanup ()

Steg 3: Raspberry Pi och kamerafäste

Raspberry Pi och kamerafäste
Raspberry Pi och kamerafäste
Raspberry Pi och kamerafäste
Raspberry Pi och kamerafäste
Raspberry Pi och kamerafäste
Raspberry Pi och kamerafäste
Raspberry Pi och kamerafäste
Raspberry Pi och kamerafäste

3D -utskrift av fodral och kamerafäste och montering.

Steg 4: Trafikljusmontering

Trafikljusmontering
Trafikljusmontering
Trafikljusmontering
Trafikljusmontering
Trafikljusmontering
Trafikljusmontering

Testa trafikljuset med en brödbräda. Varje motsatt uppsättning lysdioder delar en anod, och alla delar en gemensam katod (jord). Det ska finnas totalt 7 ingångstrådar: 1 för varje par LEDS (6) + 1 jordledning. Löd och montera trafikljusen.

Steg 5: Kabeldragning (del 1)

Kabeldragning (del 1)
Kabeldragning (del 1)
Kabeldragning (del 1)
Kabeldragning (del 1)
Kabeldragning (del 1)
Kabeldragning (del 1)
Kabeldragning (del 1)
Kabeldragning (del 1)

Löd den kvinnliga huvudstiften till cirka 5 fot tråd. Det här är sidorna som dessa trådar kommer att snake genom PVC -rören senare. Se till att kunna skilja de olika uppsättningarna ljus (2 x 3 färger och 1 mark). I det här fallet markerade jag ändarna på en annan uppsättning röda, gula och blå trådar med skärpa så jag vet vilken som är vilken.

Steg 6: Bygga miljön

Bygga miljön
Bygga miljön
Bygga miljön
Bygga miljön
Bygga miljön
Bygga miljön
Bygga miljön
Bygga miljön

Bygga miljön Gör en 2 fot fyrkantig träpall så här. Skrot är bra eftersom det kommer att täckas över. Borra ett hål som passar just din adapter. Borra skruvar genom sidorna på pallen för att fästa PVC -röret på plats. Skär den svarta skumbrädan så att den matchar träpallen under. Borra ett hål som passar runt PVC -röret. Upprepa i motsatt hörn. Markera vägarna med lite tejp.

Steg 7: Avsluta PVC -ramen

Slutför PVC -ramen
Slutför PVC -ramen
Slutför PVC -ramen
Slutför PVC -ramen
Slutför PVC -ramen
Slutför PVC -ramen

På det övre röret, borra ett hål som passar en bunt trådar. Ett grovt hål är bra så länge du kan komma åt rörens insida. Dra kablarna genom PVC -rören och armbågsfogarna för en testpassning. När allt är klart målar du PVC med lite svart sprayfärg för att städa ut huvudramens utseende. Skär ett litet gap i ett av PVC-rören för att passa en T-fog. Lägg till ett PVC-rör i denna t-skarv för trafikljuset att hänga ner från. Diametern kan vara densamma som huvudramen (1/2 ), men om du använder ett tunnare rör, se till att de 7 trådarna kan slingra igenom. Borra ett hål genom detta rör för trafikljuset att hänga från.

Steg 8: Kabeldragning (del 2)

Kabeldragning (del 2)
Kabeldragning (del 2)
Kabeldragning (del 2)
Kabeldragning (del 2)
Kabeldragning (del 2)
Kabeldragning (del 2)

Dra om allt som testats tidigare. Dubbelkolla trafikljuset och ledningarna med en brödbräda för att bekräfta att alla anslutningar har gjorts. Löd trafikljuset till trådarna som kommer genom T-ledarmen. Linda de exponerade trådarna med eltejp för att förhindra eventuella shorts och för ett renare utseende.

Steg 9: Avslutad

Färdiga!
Färdiga!
Färdiga!
Färdiga!
Färdiga!
Färdiga!
Färdiga!
Färdiga!

För att köra koden måste du ställa in din källa som ~/.profil och cd till din projektplats.

Steg 10: Extra (foton)

Rekommenderad: