aboutsummaryrefslogtreecommitdiff
path: root/nicla
diff options
context:
space:
mode:
Diffstat (limited to 'nicla')
-rw-r--r--nicla/road.py39
-rw-r--r--nicla/signs_detect.py41
-rw-r--r--nicla/traffic_light.py7
3 files changed, 53 insertions, 34 deletions
diff --git a/nicla/road.py b/nicla/road.py
index 143a9c5..2c4e84a 100644
--- a/nicla/road.py
+++ b/nicla/road.py
@@ -27,6 +27,28 @@ points = [(STRETCH, HORIZON),
(WIDTH-1+SQUEEZE, HEIGHT-1),
(-SQUEEZE, HEIGHT-1)]
+class CircularBuffer:
+ def __init__(self, size):
+ self.buffer = [None] * size
+ self.size = size
+ self.index = 0
+ self.counter = 0
+ self.output_value = None
+
+ def add(self, value):
+ self.buffer[self.index] = value
+ self.index = (self.index + 1) % self.size
+
+ if self.counter > 0 and self.buffer[self.index] == self.output_value:
+ self.counter += 1
+ else:
+ self.output_value = value
+ self.counter = 1
+
+ if self.counter == self.size * 2 // 3:
+ return self.output_value
+
+ return None
def drive(img):
img.to_grayscale()
@@ -54,19 +76,20 @@ def drive(img):
uart.uart_buffer(steerByte)
+traffic_buffer = CircularBuffer(2)
+sign_buffer = CircularBuffer(3)
while(True):
- #img = sensor.snapshot()
- #data = traffic_light.traf_lights(img)
- #if data is not None:
- #uart.uart_buffer(data)
-
+ img = sensor.snapshot()
+ data = traffic_buffer.add(traffic_light.traf_lights(img))
+ if data is not None:
+ uart.uart_buffer(data)
sign_img = sensor.snapshot()
- data_sign = signs_detect.sign_detection(sign_img)
- if data_sign is not None:
- uart.uart_buffer(data_sign)
+ data = sign_buffer.add(signs_detect.sign_detection(sign_img))
+ if data is not None:
+ uart.uart_buffer(data)
drive_img = sensor.snapshot()
drive(drive_img)
diff --git a/nicla/signs_detect.py b/nicla/signs_detect.py
index baf62e8..70bc633 100644
--- a/nicla/signs_detect.py
+++ b/nicla/signs_detect.py
@@ -13,45 +13,39 @@ def init_kpts(str):
kpts = temp_img.find_keypoints(max_keypoints=128, threshold=kpts_threshold, corner_detector=kpts_corner, scale_factor=1.2)
return kpts
+speed = init_kpts("speed")
+stop = init_kpts("stop")
+car = init_kpts("image")
+
def match_kpts(kpts0, kpts1):
if kpts0 is not None and kpts1 is not None:
match = image.match_descriptor(kpts0, kpts1, threshold=70)
#print("matched:%d dt:%d"%(match.count(), match.theta()))
if match.count() > 0:
print(match.count())
- return match.count() > 1
+ return match.count() > 0
else:
return 0
def read_red_sign(val, img, kpts):
+ data = 0x00
if match_kpts(kpts, stop):
- img.draw_rectangle(val.rect())
+ #img.draw_rectangle(val.rect())
#img.draw_cross(match.cx(), match.cy(), size=10)
- print("stop")
-
+ #print("stop")
+ return 0x01
if match_kpts(kpts, speed):
img.draw_rectangle(val.rect())
- print("speed")
-
+ #print("speed")
+ return 0x02
if match_kpts(kpts, car):
img.draw_rectangle(val.rect())
- print("car")
+ #print("car")
+ return 0x03
#def read_red_sign(val, img, kpts):
-
-kpts_threshold = 20
-kpts_corner = image.CORNER_FAST
-
-speed = init_kpts("speed")
-stop = init_kpts("stop")
-car = init_kpts("image")
-
-
-while(True):
- clock.tick() # Update the FPS clock.
- img = sensor.snapshot() # Take a picture and return the image.
-
+def sign_detection(img):
######## Detect signs
blobs_r = img.find_blobs([(0, 100, 25, 63, -128, 127)])
@@ -70,7 +64,8 @@ while(True):
kpts_img = img.find_keypoints(max_keypoints=255, threshold=kpts_threshold, corner_detector=kpts_corner)
for index, b in enumerate(blobs_r):
- read_red_sign(b, img, kpts_img)
+ sign_buffer = read_red_sign(b, img, kpts_img)
- for index, b in enumerate(blobs_b):
- read_blu_sign(b, img, kpts_img)
+ #for index, b in enumerate(blobs_b):
+ #sign_buffer = read_blu_sign(b, img, kpts_img)
+ return sign_buffer
diff --git a/nicla/traffic_light.py b/nicla/traffic_light.py
index 9499aea..f445690 100644
--- a/nicla/traffic_light.py
+++ b/nicla/traffic_light.py
@@ -32,6 +32,7 @@ def rgb2hsv(rgb):
def traf_lights(imgTraffic):
+ original = imgTraffic.copy(copy_to_fb=True)
img = imgTraffic.to_grayscale()
for blob in img.find_blobs([(0, 60)], pixels_threshold=100):
aspect = blob.h() / blob.w()
@@ -62,10 +63,10 @@ def traf_lights(imgTraffic):
#print(("", "rood", "geel", "groen")[light_status])
if light_status == 1:
- return 0x06
- elif light_status == 2:
return 0x07
- elif light_status == 3:
+ elif light_status == 2:
return 0x08
+ elif light_status == 3:
+ return 0x09
else:
return 0x01