mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-08 20:25:26 +03:00
In progress
This commit is contained in:
parent
ce36fd16af
commit
f61b06fd61
@ -22,7 +22,7 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
THRESHOLD_STATIONARY_IOU_AVERAGE = 0.6
|
THRESHOLD_STATIONARY_IOU_AVERAGE = 0.6
|
||||||
MAX_STATIONARY_IOU_HISTORY = 10
|
MAX_STATIONARY_HISTORY = 10
|
||||||
|
|
||||||
|
|
||||||
# Normalizes distance from estimate relative to object size
|
# Normalizes distance from estimate relative to object size
|
||||||
@ -78,7 +78,7 @@ class NorfairTracker(ObjectTracker):
|
|||||||
self.untracked_object_boxes: list[list[int]] = []
|
self.untracked_object_boxes: list[list[int]] = []
|
||||||
self.disappeared = {}
|
self.disappeared = {}
|
||||||
self.positions = {}
|
self.positions = {}
|
||||||
self.stationary_iou: dict[str, list[int]] = {}
|
self.stationary_box_history: dict[str, list[list[int, int, int, int]]] = {}
|
||||||
self.camera_config = config
|
self.camera_config = config
|
||||||
self.detect_config = config.detect
|
self.detect_config = config.detect
|
||||||
self.ptz_metrics = ptz_metrics
|
self.ptz_metrics = ptz_metrics
|
||||||
@ -144,7 +144,7 @@ class NorfairTracker(ObjectTracker):
|
|||||||
|
|
||||||
# tracks the current position of the object based on the last N bounding boxes
|
# tracks the current position of the object based on the last N bounding boxes
|
||||||
# returns False if the object has moved outside its previous position
|
# returns False if the object has moved outside its previous position
|
||||||
def update_position(self, id: str, box: [int, int, int, int]):
|
def update_position(self, id: str, box: list[int, int, int, int]):
|
||||||
position = self.positions[id]
|
position = self.positions[id]
|
||||||
position_box = (
|
position_box = (
|
||||||
position["xmin"],
|
position["xmin"],
|
||||||
@ -153,19 +153,18 @@ class NorfairTracker(ObjectTracker):
|
|||||||
position["ymax"],
|
position["ymax"],
|
||||||
)
|
)
|
||||||
|
|
||||||
xmin, ymin, xmax, ymax = box
|
self.stationary_box_history[id].append(box)
|
||||||
|
|
||||||
iou = intersection_over_union(position_box, box)
|
if len(self.stationary_box_history[id]) > MAX_STATIONARY_HISTORY:
|
||||||
|
self.stationary_box_history[id] = self.stationary_box_history[id][
|
||||||
self.stationary_iou[id].append(iou)
|
-MAX_STATIONARY_HISTORY:
|
||||||
|
|
||||||
if len(self.stationary_iou[id]) > MAX_STATIONARY_IOU_HISTORY:
|
|
||||||
self.stationary_iou[id] = self.stationary_iou[id][
|
|
||||||
-MAX_STATIONARY_IOU_HISTORY:
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# TODO calculate mean of boxes
|
||||||
avg_iou = np.mean(self.stationary_iou[id])
|
avg_iou = np.mean(self.stationary_iou[id])
|
||||||
|
|
||||||
|
xmin, ymin, xmax, ymax = box
|
||||||
|
|
||||||
# if the iou drops below the threshold
|
# if the iou drops below the threshold
|
||||||
# assume the object has moved to a new position and reset the computed box
|
# assume the object has moved to a new position and reset the computed box
|
||||||
if avg_iou < THRESHOLD_STATIONARY_IOU_AVERAGE:
|
if avg_iou < THRESHOLD_STATIONARY_IOU_AVERAGE:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user