diff options
Diffstat (limited to 'src/argaze/RegionOfInterest/ROI2DScene.py')
-rw-r--r-- | src/argaze/RegionOfInterest/ROI2DScene.py | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/src/argaze/RegionOfInterest/ROI2DScene.py b/src/argaze/RegionOfInterest/ROI2DScene.py index acf8e0a..066d8f1 100644 --- a/src/argaze/RegionOfInterest/ROI2DScene.py +++ b/src/argaze/RegionOfInterest/ROI2DScene.py @@ -9,25 +9,22 @@ class ROI2D(DataStructures.DictObject): """Define Region Of Interest 2D ``` { - 'name': str, - 'vertices': array of (x, y) tuples + 'vertices': array of (x, y) tuples, 'pointer': (x, y) tuple or None } ``` """ - def __init__(self, name, vertices, pointer = None): + def __init__(self, vertices, pointer = None): - super().__init__(type(self).__name__, **{'name': name, 'vertices': vertices, 'pointer': pointer}) + super().__init__(type(self).__name__, **{'vertices': vertices, 'pointer': pointer}) -class ROI2DScene(list): - """List of ROI2D.""" +class ROI2DScene(DataStructures.DictObject): + """Define ROI 2D scene as dictionnary of named ROI2Ds.""" - def __new__(cls): - return super(ROI2DScene, cls).__new__(cls) + def __init__(self, **rois_2d): - def __init__(self): - pass + super().__init__(type(self).__name__, **rois_2d) def __del__(self): pass @@ -35,28 +32,41 @@ class ROI2DScene(list): def inside(self, pointer): """Store pointer position if it is inside ROIs.""" - for roi in self: + for name in self.keys(): + + roi2D = self[name] - if mpath.Path(roi.vertices).contains_points([pointer])[0]: + if mpath.Path(roi2D.vertices).contains_points([pointer])[0]: - roi.pointer = pointer + roi2D.pointer = pointer else: - roi.pointer = None + roi2D.pointer = None def draw(self, frame): """Draw ROI polygons on frame.""" - for roi in self: + for name in self.keys(): - inside = roi.pointer != None + roi2D = self[name] + inside = roi2D.pointer != None color = (0, 255, 0) if inside else (0, 0, 255) if inside: - cv.putText(frame, roi.name, (roi.vertices[3][0], roi.vertices[3][1]), cv.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 1, cv.LINE_AA) + cv.putText(frame, name, (roi2D.vertices[3][0], roi2D.vertices[3][1]), cv.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 1, cv.LINE_AA) - cv.line(frame, roi.vertices[-1], roi.vertices[0], color, 1) - for A, B in zip(roi.vertices, roi.vertices[1:]): + cv.line(frame, roi2D.vertices[-1], roi2D.vertices[0], color, 1) + for A, B in zip(roi2D.vertices, roi2D.vertices[1:]): cv.line(frame, A, B, color, 1) + +class TimeStampedROI2DScenes(DataStructures.TimeStampedBuffer): + """Define timestamped buffer to store ROI2D scenes""" + + def __setitem__(self, key, value: ROI2DScene): + """Force value to be a ROI2DScene""" + if type(value) != ROI2DScene: + raise ValueError('value must be a ROI2DScene') + + super().__setitem__(key, value) |