Mercurial Hosting > traffic-intelligence
view trafficintelligence/sensors.py @ 1202:059b7282aa09
first version of kitti loader
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 16 Mar 2023 17:03:18 -0400 |
parents | cc5cb04b04b0 |
children |
line wrap: on
line source
#! /usr/bin/env python '''Libraries for detecting, counting, etc., road users''' from numpy import mean, isnan from trafficintelligence import moving # TODO graphical user interface for creation class Sensor: def detect(self, o): print("Detect method not implemented") return False def detectInstants(self, o): print("DetectInstants method not implemented") return [] class BoxSensor(Sensor): def __init__(self, polygon, minNPointsInBox = 1): self.polygon = polygon # check 2xN? self.minNPointsInBox = minNPointsInBox def detectInstants(self, obj): indices = obj.getPositions().getInstantsInPolygon(self.polygon) firstInstant = obj.getFirstInstant() return [i+firstInstant for i in indices] def detect(self, obj): instants = self.detectInstants(obj) return len(instants) >= self.minNPointsInBox def detectAnd(sensors, obj): 'Returns True if all sensors detect the object' result = True for s in sensors: result = result and s.detect(obj) if not result: return result return result def detectOr(sensors, obj): 'Returns True if any sensor detects the object' result = False for s in sensors: result = result or s.detect(obj) if result: return result return result def detectAndOrder(sensors, obj): 'Returns True if all sensors are detected and in their order' detectionInstants = [] for s in sensors: instants = s.detectInstants(obj) if len(instants) == 0: return False else: detectionInstants.append(mean(instants)) result = True for i in range(len(sensors)-1): result = result and (detectionInstants[i] <= detectionInstants[i+1]) if not result: return result return result