aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/RegionOfInterest/ROI2DScene.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/argaze/RegionOfInterest/ROI2DScene.py')
-rw-r--r--src/argaze/RegionOfInterest/ROI2DScene.py48
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)