Skip to content

Commit 13e4497

Browse files
authored
Merge pull request #487 from littlemountainman/patch-22
create traffic init
2 parents b699fb1 + 03278f7 commit 13e4497

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

selfdrive/traffic.py

+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import os
2+
import cv2
3+
import numpy as np
4+
import zmq
5+
6+
def detect(source):
7+
8+
font = cv2.FONT_HERSHEY_SIMPLEX
9+
img = cv2.imread(source)
10+
11+
cimg = img
12+
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
13+
14+
15+
lower_red1 = np.array([0,100,100])
16+
upper_red1 = np.array([10,255,255])
17+
lower_red2 = np.array([160,100,100])
18+
upper_red2 = np.array([180,255,255])
19+
lower_green = np.array([40,50,50])
20+
upper_green = np.array([90,255,255])
21+
lower_yellow = np.array([15,150,150])
22+
upper_yellow = np.array([35,255,255])
23+
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
24+
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
25+
maskg = cv2.inRange(hsv, lower_green, upper_green)
26+
masky = cv2.inRange(hsv, lower_yellow, upper_yellow)
27+
maskr = cv2.add(mask1, mask2)
28+
29+
size = img.shape
30+
31+
r_circles = cv2.HoughCircles(maskr, cv2.HOUGH_GRADIENT, 1, 80,
32+
param1=50, param2=10, minRadius=0, maxRadius=30)
33+
34+
g_circles = cv2.HoughCircles(maskg, cv2.HOUGH_GRADIENT, 1, 60,
35+
param1=50, param2=10, minRadius=0, maxRadius=30)
36+
37+
y_circles = cv2.HoughCircles(masky, cv2.HOUGH_GRADIENT, 1, 30,
38+
param1=50, param2=5, minRadius=0, maxRadius=30)
39+
40+
# traffic light detect
41+
r = 5
42+
bound = 4.0 / 10
43+
if r_circles is not None:
44+
r_circles = np.uint16(np.around(r_circles))
45+
46+
for i in r_circles[0, :]:
47+
if i[0] > size[1] or i[1] > size[0]or i[1] > size[0]*bound:
48+
continue
49+
50+
h, s = 0.0, 0.0
51+
for m in range(-r, r):
52+
for n in range(-r, r):
53+
54+
if (i[1]+m) >= size[0] or (i[0]+n) >= size[1]:
55+
continue
56+
h += maskr[i[1]+m, i[0]+n]
57+
s += 1
58+
if h / s > 50:
59+
cv2.circle(cimg, (i[0], i[1]), i[2]+10, (0, 255, 0), 2)
60+
cv2.circle(maskr, (i[0], i[1]), i[2]+30, (255, 255, 255), 2)
61+
#cv2.putText(cimg,'RED',(i[0], i[1]), font, 1,(255,0,0),2,cv2.LINE_AA)
62+
print("RED")
63+
if g_circles is not None:
64+
g_circles = np.uint16(np.around(g_circles))
65+
66+
for i in g_circles[0, :]:
67+
if i[0] > size[1] or i[1] > size[0] or i[1] > size[0]*bound:
68+
continue
69+
70+
h, s = 0.0, 0.0
71+
for m in range(-r, r):
72+
for n in range(-r, r):
73+
74+
if (i[1]+m) >= size[0] or (i[0]+n) >= size[1]:
75+
continue
76+
h += maskg[i[1]+m, i[0]+n]
77+
s += 1
78+
if h / s > 100:
79+
cv2.circle(cimg, (i[0], i[1]), i[2]+10, (0, 255, 0), 2)
80+
cv2.circle(maskg, (i[0], i[1]), i[2]+30, (255, 255, 255), 2)
81+
#cv2.putText(cimg,'GREEN',(i[0], i[1]), font, 1,(255,0,0),2,cv2.LINE_AA)
82+
print("GREEN")
83+
if y_circles is not None:
84+
y_circles = np.uint16(np.around(y_circles))
85+
86+
for i in y_circles[0, :]:
87+
if i[0] > size[1] or i[1] > size[0] or i[1] > size[0]*bound:
88+
continue
89+
90+
h, s = 0.0, 0.0
91+
for m in range(-r, r):
92+
for n in range(-r, r):
93+
94+
if (i[1]+m) >= size[0] or (i[0]+n) >= size[1]:
95+
continue
96+
h += masky[i[1]+m, i[0]+n]
97+
s += 1
98+
if h / s > 50:
99+
cv2.circle(cimg, (i[0], i[1]), i[2]+10, (0, 255, 0), 2)
100+
cv2.circle(masky, (i[0], i[1]), i[2]+30, (255, 255, 255), 2)
101+
#cv2.putText(cimg,'YELLOW',(i[0], i[1]), font, 1,(255,0,0),2,cv2.LINE_AA)
102+
print("YELLOW")
103+
104+
105+
return cimg
106+
if __name__ == '__main__':
107+
108+
109+
while True:
110+
context = zmq.Context()
111+
socket = context.socket(zmq.REP)
112+
socket.bind("tcp://*:9000")
113+
message = socket.recv()
114+
print(message)
115+
detectimg =detect(message)
116+
sleep(0.05)
117+
# This function either gives out "RED" "YELLOW" or "GREEN"
118+
119+

0 commit comments

Comments
 (0)