Spisu treści:

Analizator wzorców ruchu wykorzystujący wykrywanie obiektów na żywo: 11 kroków (ze zdjęciami)
Analizator wzorców ruchu wykorzystujący wykrywanie obiektów na żywo: 11 kroków (ze zdjęciami)

Wideo: Analizator wzorców ruchu wykorzystujący wykrywanie obiektów na żywo: 11 kroków (ze zdjęciami)

Wideo: Analizator wzorców ruchu wykorzystujący wykrywanie obiektów na żywo: 11 kroków (ze zdjęciami)
Wideo: Leszek Miś - Walidacja środowiska analitycznego SIEM. 2024, Lipiec
Anonim
Image
Image
Analizator wzorców ruchu wykorzystujący wykrywanie obiektów na żywo
Analizator wzorców ruchu wykorzystujący wykrywanie obiektów na żywo

W dzisiejszym świecie sygnalizacja świetlna jest niezbędna dla bezpiecznej drogi. Jednak wiele razy sygnalizacja świetlna może być denerwująca w sytuacjach, gdy ktoś zbliża się do światła, gdy zmienia ono kolor na czerwony. To marnuje czas, zwłaszcza jeśli światło uniemożliwia przejazd jednemu pojazdowi przez skrzyżowanie, gdy na drodze nie ma nikogo. Moją innowacją jest inteligentna sygnalizacja świetlna, która wykorzystuje wykrywanie obiektów na żywo z kamery do zliczania samochodów na każdej drodze. Sprzęt, którego użyję do tego projektu, to Raspberry Pi 3, moduł kamery i różne elementy elektroniczne do samego światła. Korzystając z OpenCV na Raspberry Pi, zebrane informacje zostaną przepuszczone przez kod kontrolujący diody LED za pośrednictwem GPIO. W zależności od tych liczb zmieni się sygnalizacja świetlna, przepuszczając samochody w najbardziej optymalnej kolejności. W takim przypadku pas z największą liczbą samochodów zostanie przepuszczony, tak że pas z mniejszą liczbą samochodów będzie na biegu jałowym, zmniejszając zanieczyszczenie powietrza. Wyeliminowałoby to sytuacje, w których wiele samochodów zatrzymuje się, gdy na przecinającej się drodze nie ma samochodów. To nie tylko oszczędza czas dla wszystkich, ale także chroni środowisko. Czas, przez jaki ludzie są zatrzymywani na znaku stop z silnikiem na biegu jałowym, zwiększa zanieczyszczenie powietrza, więc tworząc inteligentne światła drogowe, jestem w stanie zoptymalizować wzorce świetlne, aby samochody spędzały jak najmniej czasu z zatrzymanym pojazdem. Ostatecznie ten system sygnalizacji świetlnej mógłby zostać wdrożony w miastach, na przedmieściach, a nawet na obszarach wiejskich, aby był bardziej wydajny dla ludzi i zmniejszyłby zanieczyszczenie powietrza.

Krok 1: Lista części

Materiały:

Raspberry Pi 3 Model B v1.2

Kamera Raspberry Pi v2.1

Zasilacz micro USB 5V/1A

Monitor HDMI, klawiatura, mysz karta SD z Raspbian Jessie

Kabel breakout GPIO Raspberry Pi

Czerwone, żółte, zielone diody LED (po 2 z każdego koloru)

Złącza żeńskie dla Raspberry Pi (7 unikalnych kolorów)

Różne przewody o grubości 24 (różne kolory) + rurki termokurczliwe

Drewniany panel lub platforma 2'x2'

Wkręty do drewna

Czarna powierzchnia (karton, płyta piankowa, tablica plakatowa itp.)

Biała (lub w innym kolorze niż czarna) taśma do znakowania dróg

Czarna farba w sprayu (do PCV)

Rura PVC ½” z kolankami 90 stopni (2), kielich T (1), adapter żeński (2)

Narzędzia

Lutownica

drukarka 3d

Wiertarka z różnymi wiertłami

Deska do krojenia chleba

Opalarka

Krok 2: Konfiguracja Raspberry Pi

Włóż kartę SD do Raspberry Pi i uruchom.

Postępuj zgodnie z tym przewodnikiem, aby zainstalować wymagane biblioteki OpenCV. Upewnij się, że masz czas na wykonanie tego kroku, ponieważ instalacja biblioteki OpenCV może zająć kilka godzin. Pamiętaj, aby również zainstalować i skonfigurować tutaj kamerę.

Powinieneś również zainstalować pip:

pikamera

gpiozero

RPi. GPIO

Oto sfinalizowany kod:

z picamera.array importuj PiRGBArray

z picamera importuj PiCamera

import picamera.array

importuj numer jako np

czas importu

importuj cv2

importuj RPi. GPIO jako GPIO

czas importu

GPIO.setmode(GPIO. BCM)

dla mnie w (23, 25, 16, 21):

GPIO.setup(i, GPIO. OUT)

kamera = PiCamera()

krzywka.rozdzielczość=(480, 480)

cam.framerate=30

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

czas.sen(0.1)

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

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

odwrócenie = 0

inicjalizacja = 0

licznik = 0

dla ramki w cam.capture_continuous(raw, format="bgr", use_video_port=True):

ramka = ramka.tablica

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

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

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

maska= cv2.dilate(maska, brak, iteracje=5)

maska= cv2.erode(maska, brak, iteracje=1)

maska= cv2.dilate(maska, brak, iteracje=3)

ja, próg = cv2.próg(maska, 127, 255, cv2. THRESH_BINARY)

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

środek = Brak

wierzchołek = 0

poziomo = 0

jeśli dł.(cnts) > 0:

dla c w cnts:

(x, y), promień = cv2.minEnclosingCircle(c)

środek = (int(x), int(y))

promień = int(promień)

cv2.circle(ramka, środek, promień, (0, 255, 0), 2)

x = int(x)

y = int(y)

jeśli 180 < x < 300:

jeśli y > 300:

wierzchołek = wierzchołek +1

elif y < 180:

wierzchołek = wierzchołek +1

w przeciwnym razie:

wierzchołek = wierzchołek

jeśli 180 < r < 300:

jeśli x > 300:

poziom = poziom +1

elif x < 180:

poziom = poziom +1

w przeciwnym razie:

poziomo = poziomo

jeśli vert != initvert:

print"Samochody na pasie pionowym: " + str(vert)

initvert = vert

print"Samochody na pasie poziomym: " + str(horiz)

inithoriz = poziomo

wypisz '-----------------------------'

jeśli poziomo != inithoriz:

print"Samochody na pasie pionowym: " + str(vert)

initvert = vert

print"Samochody na pasie poziomym: " + str(horiz)

inithoriz = poziomo

wypisz '-----------------------------'

jeśli pion < poziom:

GPIO.wyjście(23, GPIO. HIGH)

GPIO.wyjście(21, GPIO. HIGH)

GPIO.wyjście(16, GPIO. LOW)

GPIO.wyjście(25, GPIO. LOW)

jeśli poziomo < pionowe:

GPIO.wyjście(16, GPIO. HIGH)

GPIO.wyjście(25, GPIO. HIGH)

GPIO.output(23, GPIO. LOW)

GPIO.wyjście(21, GPIO. LOW)

cv2.imshow("Ramka", ramka)

cv2.imshow("HSV", hsv)

cv2.imshow("Tresh", thresh)

surowe.obcinanie(0)

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

przerwa

cv2.zniszczWszystkieOkna()

GPIO.oczyszczanie()

Krok 3: Raspberry Pi i uchwyt kamery

Raspberry Pi i uchwyt kamery
Raspberry Pi i uchwyt kamery
Raspberry Pi i uchwyt kamery
Raspberry Pi i uchwyt kamery
Raspberry Pi i uchwyt kamery
Raspberry Pi i uchwyt kamery
Raspberry Pi i uchwyt kamery
Raspberry Pi i uchwyt kamery

Wydrukuj w 3D obudowę i uchwyt kamery oraz zmontuj.

Krok 4: Montaż sygnalizacji świetlnej

Montaż sygnalizacji świetlnej
Montaż sygnalizacji świetlnej
Montaż sygnalizacji świetlnej
Montaż sygnalizacji świetlnej
Montaż sygnalizacji świetlnej
Montaż sygnalizacji świetlnej

Przetestuj sygnalizację świetlną za pomocą płytki stykowej. Każdy przeciwny zestaw diod LED ma wspólną anodę, a wszystkie mają wspólną katodę (masę). Łącznie powinno być 7 przewodów wejściowych: 1 na każdą parę diod LED (6) + 1 przewód uziemiający. Przylutuj i zmontuj sygnalizację świetlną.

Krok 5: Okablowanie (Część 1)

Okablowanie (część 1)
Okablowanie (część 1)
Okablowanie (część 1)
Okablowanie (część 1)
Okablowanie (część 1)
Okablowanie (część 1)
Okablowanie (część 1)
Okablowanie (część 1)

Przylutuj żeńskie styki nagłówka do około 5 stóp drutu. To są strony, po których te przewody będą później wiły się przez rury PCV. Upewnij się, że potrafisz rozróżnić różne zestawy świateł (2 x 3 kolory i 1 podstawa). W tym przypadku zaznaczyłem końcówkę innego zestawu przewodów czerwonego, żółtego i niebieskiego sharpie więc wiem który jest który.

Krok 6: Budowanie środowiska

Budowanie środowiska
Budowanie środowiska
Budowanie środowiska
Budowanie środowiska
Budowanie środowiska
Budowanie środowiska
Budowanie środowiska
Budowanie środowiska

Budowanie środowiska Zrób taką drewnianą paletę o powierzchni 2 stóp kwadratowych. Złom drewna jest w porządku, ponieważ zostanie zakryty. Wywierć otwór pasujący do adaptera. Wywiercić śruby po bokach palety, aby zamocować rurę PVC na miejscu. Wytnij czarną płytę piankową, aby pasowała do drewnianej palety pod spodem. Wywierć otwór pasujący do rury PVC. Powtórz w przeciwległym rogu. Oznacz drogi białą taśmą.

Krok 7: Finalizacja ramy PCV

Wykańczanie ramy PCV
Wykańczanie ramy PCV
Wykańczanie ramy PCV
Wykańczanie ramy PCV
Wykańczanie ramy PCV
Wykańczanie ramy PCV

Na górnej rurze wywierć otwór, w którym zmieści się wiązka przewodów. Szorstka dziura jest w porządku, o ile masz dostęp do wnętrza rur. Przeprowadź przewody przez rury PVC i złącza kolankowe w celu sprawdzenia dopasowania. Gdy wszystko jest gotowe, pomaluj PCV czarną farbą w sprayu, aby oczyścić wygląd ramy głównej. Wytnij niewielką szczelinę w jednej z rur PVC, aby pasowała do trójnika. Dodaj rurę PVC do tego trójnika, aby sygnalizacja świetlna zwisała. Średnica może być taka sama jak ramy głównej (1/2 cala), ale jeśli używasz cieńszej rury, upewnij się, że 7 przewodów może się przewlec. Wywierć otwór w tej rurze, aby zwisała z niej sygnalizacja świetlna.

Krok 8: Okablowanie (Część 2)

Okablowanie (część 2)
Okablowanie (część 2)
Okablowanie (część 2)
Okablowanie (część 2)
Okablowanie (część 2)
Okablowanie (część 2)

Ponownie podłącz wszystko zgodnie z wcześniejszymi testami. Dokładnie sprawdź sygnalizację świetlną i okablowanie za pomocą płytki stykowej, aby potwierdzić, że wszystkie połączenia zostały wykonane. Przylutuj sygnalizację świetlną do przewodów przechodzących przez ramię przegubu T. Owiń odsłonięte przewody taśmą elektryczną, aby uniknąć spodenek i uzyskać czystszy wygląd.

Krok 9: Gotowe

Skończone!
Skończone!
Skończone!
Skończone!
Skończone!
Skończone!
Skończone!
Skończone!

Aby uruchomić kod, upewnij się, że ustawiłeś źródło jako ~/.profile i cd na lokalizację projektu.

Krok 10: Dodatki (zdjęcia)

Zalecana: