Inhaltsverzeichnis:

Traffic Pattern Analyzer mit Live-Objekterkennung - Gunook
Traffic Pattern Analyzer mit Live-Objekterkennung - Gunook

Video: Traffic Pattern Analyzer mit Live-Objekterkennung - Gunook

Video: Traffic Pattern Analyzer mit Live-Objekterkennung - Gunook
Video: Object Detection & Identification using ESP32 CAM Module & OpenCV 2024, November
Anonim
Image
Image
Traffic Pattern Analyzer mit Live-Objekterkennung
Traffic Pattern Analyzer mit Live-Objekterkennung

In der heutigen Welt sind Ampeln unverzichtbar für eine sichere Straße. Oftmals können Ampeln jedoch in Situationen stören, in denen sich jemand der Ampel nähert, während sie auf Rot schaltet. Das ist Zeitverschwendung, vor allem, wenn das Licht ein einzelnes Fahrzeug daran hindert, die Kreuzung zu passieren, während niemand auf der Straße ist. Meine Innovation ist eine intelligente Ampel, die die Live-Objekterkennung einer Kamera verwendet, um die Anzahl der Autos auf jeder Straße zu zählen. Die Hardware, die ich für dieses Projekt verwenden werde, ist ein Raspberry Pi 3, ein Kameramodul und verschiedene elektronische Hardware für das Licht selbst. Mit OpenCV auf dem Raspberry Pi werden die gesammelten Informationen durch Code geleitet, der die LEDs über den GPIO steuert. Abhängig von diesen Zahlen ändert sich die Ampel und lässt Autos in der optimalsten Reihenfolge durch. In diesem Fall würde die Spur mit den meisten Autos durchgelassen, sodass die Spur mit weniger Autos im Leerlauf wäre, was die Luftverschmutzung reduziert. Dies würde Situationen eliminieren, in denen viele Autos angehalten werden, während sich keine Autos auf der kreuzenden Straße befinden. Das spart nicht nur Zeit für alle, sondern schont auch die Umwelt. Die Zeit, die Menschen mit laufendem Motor an einem Stoppschild anhalten, erhöht die Luftverschmutzung. Durch die Schaffung einer intelligenten Ampel kann ich die Lichtmuster so optimieren, dass Autos so wenig Zeit wie möglich mit stehendem Fahrzeug verbringen. Letztendlich könnte dieses Ampelsystem in Städten, Vororten oder sogar ländlichen Gebieten implementiert werden, um für die Menschen effizienter zu sein und die Luftverschmutzung zu reduzieren.

Schritt 1: Teileliste

Materialien:

Raspberry Pi 3 Modell B v1.2

Raspberry Pi Kamera v2.1

5V/1A Micro-USB-Netzteil

HDMI-Monitor, Tastatur, Maus SD-Karte mit Raspbian Jessie

Raspberry Pi GPIO-Breakout-Kabel

Rote, gelbe, grüne LEDs (2 von jeder Farbe)

Buchsen für Raspberry Pi (7 einzigartige Farben)

Sortierter 24 Gauge Draht (verschiedene Farben) + Schrumpfschlauch

2'x2' Holzplatte oder Plattform

Holzschrauben

Schwarze Oberfläche (Karton, Hartschaumplatte, Plakatkarton, etc.)

Weißes (oder eine andere Farbe als schwarz) Klebeband für Straßenmarkierungen

Schwarze Sprühfarbe (für PVC)

½” PVC-Rohr mit 90-Grad-Winkelstücken (2), T-Muffe (1), Innenadapter (2)

Werkzeuge

Lötkolben

3D Drucker

Bohren Sie mit verschiedenen Bohrern

Steckbrett

Heißluftpistole

Schritt 2: Einrichten des Raspberry Pi

Laden Sie die SD-Karte in den Raspberry Pi und booten Sie.

Folgen Sie dieser Anleitung, um die erforderlichen OpenCV-Bibliotheken zu installieren. Stellen Sie sicher, dass Sie Zeit für diesen Schritt haben, da die Installation der OpenCV-Bibliothek einige Stunden dauern kann. Stellen Sie sicher, dass Sie hier auch Ihre Kamera installieren und einrichten.

Sie sollten auch pip installieren:

Pikamera

gpiozero

RPi. GPIO

Hier ist der fertige Code:

von picamera.array importieren PiRGBArray

aus Picamera importieren PiCamera

picamera.array importieren

numpy als np importieren

Importzeit

CV2 importieren

RPi. GPIO als GPIO importieren

Importzeit

GPIO.setmode(GPIO. BCM)

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

GPIO.setup(i, GPIO. OUT)

cam = PiCamera()

Kameraauflösung=(480, 480)

Kamera. Framerate=30

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

time.sleep(0.1)

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

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

invertieren = 0

inithoriz = 0

Zähler = 0

für 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)

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

mask = cv2.dilate (Maske, Keine, Iterationen = 5)

mask= cv2.erode(Maske, Keine, Iterationen=1)

mask = cv2.dilate (Maske, Keine, Iterationen = 3)

me, thresh = cv2.threshold(mask, 127, 255, cv2. THRESH_BINARY)

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

Mitte = Keine

vert = 0

horizontal = 0

wenn len(cnts) > 0:

für c in cnts:

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

Zentrum = (int(x), int(y))

Radius = int (Radius)

cv2.circle(Rahmen, Zentrum, Radius, (0, 255, 0), 2)

x = int(x)

y = int(y)

wenn 180 < x < 300:

wenn y > 300:

vert = vert +1

elif y < 180:

vert = vert +1

anders:

vert = vert

wenn 180 < j < 300:

wenn x > 300:

horiz = horiz +1

elif x < 180:

horiz = horiz +1

anders:

horiz = horiz

if vert != initvert:

print"Autos in vertikaler Spur: " + str(vert)

initvert = vert

print"Autos in horizontaler Spur: " + str(horiz)

inithoriz = horiz

drucken '----------------------------'

if horiz != inithoriz:

print"Autos in vertikaler Spur: " + str(vert)

initvert = vert

print"Autos in horizontaler Spur: " + str(horiz)

inithoriz = horiz

drucken '----------------------------'

wenn vert < horiz:

GPIO. Ausgabe(23, GPIO. HIGH)

GPIO. Ausgang(21, GPIO. HIGH)

GPIO. Ausgang(16, GPIO. LOW)

GPIO. Ausgabe(25, GPIO. LOW)

wenn horiz < vert:

GPIO. Ausgang(16, GPIO. HIGH)

GPIO. Ausgabe(25, GPIO. HIGH)

GPIO. Ausgang(23, GPIO. LOW)

GPIO. Ausgang(21, GPIO. LOW)

cv2.imshow("Rahmen", Rahmen)

cv2.imshow("HSV", hsv)

cv2.imshow("Thresh", thresh)

raw.truncate(0)

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

brechen

cv2.destroyAllWindows()

GPIO.cleanup()

Schritt 3: Raspberry Pi und Kamerahalterung

Raspberry Pi und Kamerahalterung
Raspberry Pi und Kamerahalterung
Raspberry Pi und Kamerahalterung
Raspberry Pi und Kamerahalterung
Raspberry Pi und Kamerahalterung
Raspberry Pi und Kamerahalterung
Raspberry Pi und Kamerahalterung
Raspberry Pi und Kamerahalterung

3D-Drucken Sie das Gehäuse und die Kamerahalterung und montieren Sie sie.

Schritt 4: Ampelmontage

Ampelmontage
Ampelmontage
Ampelmontage
Ampelmontage
Ampelmontage
Ampelmontage

Testen Sie die Ampel mit einem Steckbrett. Jeder gegenüberliegende LED-Satz teilt sich eine Anode, und alle teilen sich eine gemeinsame Kathode (Masse). Es sollten insgesamt 7 Eingangsdrähte vorhanden sein: 1 für jedes LED-Paar (6) + 1 Erdungsdraht. Löten und montieren Sie die Ampeln.

Schritt 5: Verdrahtung (Teil 1)

Verkabelung (Teil 1)
Verkabelung (Teil 1)
Verkabelung (Teil 1)
Verkabelung (Teil 1)
Verkabelung (Teil 1)
Verkabelung (Teil 1)
Verkabelung (Teil 1)
Verkabelung (Teil 1)

Löten Sie die Buchsenleistenstifte auf etwa 5 Fuß Draht. Dies sind die Seiten, an denen sich diese Drähte später durch die PVC-Rohre schlängeln. Achten Sie darauf, die verschiedenen Lichtersätze (2 x 3 Farben und 1 Boden) unterscheiden zu können. In diesem Fall habe ich die Enden eines anderen Satzes roter, gelber und blauer Drähte mit Sharpie markiert, damit ich weiß, welcher welcher ist.

Schritt 6: Aufbau der Umgebung

Die Umwelt aufbauen
Die Umwelt aufbauen
Die Umwelt aufbauen
Die Umwelt aufbauen
Die Umwelt aufbauen
Die Umwelt aufbauen
Die Umwelt aufbauen
Die Umwelt aufbauen

Bauen Sie die Umgebung auf Stellen Sie eine 2 Fuß große Holzpalette wie diese her. Altholz ist in Ordnung, da es abgedeckt wird. Bohren Sie ein Loch, das gerade zu Ihrem Adapter passt. Bohren Sie Schrauben durch die Seiten der Palette, um das PVC-Rohr zu befestigen. Schneiden Sie die schwarze Schaumstoffplatte so zu, dass sie der darunter liegenden Holzpalette entspricht. Bohren Sie ein Loch, das um das PVC-Rohr passt. Wiederholen Sie dies an der gegenüberliegenden Ecke. Markieren Sie die Straßen mit weißem Klebeband.

Schritt 7: Fertigstellen des PVC-Rahmens

Fertigstellen des PVC-Rahmens
Fertigstellen des PVC-Rahmens
Fertigstellen des PVC-Rahmens
Fertigstellen des PVC-Rahmens
Fertigstellen des PVC-Rahmens
Fertigstellen des PVC-Rahmens

Bohren Sie am oberen Rohr ein Loch, das für ein Kabelbündel geeignet ist. Ein grobes Loch ist in Ordnung, solange Sie Zugang zu den Innenseiten der Rohre haben. Führen Sie die Drähte für einen Testsitz durch die PVC-Rohre und Winkelstücke. Sobald alles fertig ist, bemalen Sie das PVC mit etwas schwarzer Sprühfarbe, um das Aussehen des Hauptrahmens zu bereinigen. Schneiden Sie eine kleine Lücke in eines der PVC-Rohre, um eine T-Verbindung zu passen. Fügen Sie diesem T-Stück ein PVC-Rohr hinzu, damit die Ampel herunterhängt. Der Durchmesser könnte der gleiche sein wie der des Hauptrahmens (1/2 ). Wenn Sie jedoch ein dünneres Rohr verwenden, stellen Sie sicher, dass die 7 Drähte sich durchschlängeln können. Bohren Sie ein Loch durch dieses Rohr, damit die Ampel daran hängen kann.

Schritt 8: Verdrahtung (Teil 2)

Verkabelung (Teil 2)
Verkabelung (Teil 2)
Verkabelung (Teil 2)
Verkabelung (Teil 2)
Verkabelung (Teil 2)
Verkabelung (Teil 2)

Verkabeln Sie alles wie zuvor getestet. Überprüfen Sie die Ampel und die Verkabelung mit einem Steckbrett, um sicherzustellen, dass alle Verbindungen hergestellt wurden. Löten Sie die Ampel an die Drähte, die durch den T-Verbindungsarm kommen. Umwickeln Sie die freiliegenden Drähte mit Isolierband, um Kurzschlüsse zu vermeiden und ein saubereres Aussehen zu erzielen.

Schritt 9: Fertig

Fertig!
Fertig!
Fertig!
Fertig!
Fertig!
Fertig!
Fertig!
Fertig!

Um den Code auszuführen, stellen Sie sicher, dass Ihre Quelle als ~/.profile festgelegt ist und cd auf Ihren Projektspeicherort.

Schritt 10: Extras (Fotos)

Empfohlen: