diff --git a/src/orisys/configs/prototype.json b/src/orisys/configs/prototype.json index 5330393..0c895a0 100644 --- a/src/orisys/configs/prototype.json +++ b/src/orisys/configs/prototype.json @@ -22,7 +22,8 @@ "lower_threshold": 12.0, "upper_threshold": 18.0, "loop_closure_interval": 1, - "dis_preset": "medium" + "dis_preset": "medium", + "finest_scale": 1 }, "contact": { "min_contour_area": 3000, diff --git a/src/orisys/sensor.py b/src/orisys/sensor.py index 7c55f48..1f5b9a1 100644 --- a/src/orisys/sensor.py +++ b/src/orisys/sensor.py @@ -135,7 +135,7 @@ class Sensor: # Initialize components self.stitcher = Stitcher(isstitch=isstitch, config_stitcher=self.__config_stitcher, verbose=self.verbose) - self.__tracker = Tracker(adaptive=True, cuda=cuda, verbose=self.verbose, dis_preset=self._config_dis_preset) + self.__tracker = Tracker(adaptive=True, cuda=cuda, verbose=self.verbose, dis_preset=self._config_dis_preset, config_tracker=self.__config_tracker) self.__contact3d = Contact3D(config_contact=self.__config_contact, verbose=self.verbose) self.__hhd = None @@ -402,6 +402,7 @@ class Sensor: self._config_dis_preset = self._config["tracker"]["dis_preset"] + self.__config_tracker = self._config["tracker"] self.__config_stitcher = self._config["stitcher"] self.__config_contact = self._config["contact"] diff --git a/src/orisys/tracker.py b/src/orisys/tracker.py index 8458107..68cd336 100644 --- a/src/orisys/tracker.py +++ b/src/orisys/tracker.py @@ -1,14 +1,14 @@ import cv2 import numpy as np -# from .HHD import * -# import src.utils as utils - +import cupy as cp +import time class Tracker: def __init__(self, adaptive, cuda, + config_tracker=None, lower_threshold=12.0, upper_threshold=18.0, loop_closure_interval=1, @@ -23,7 +23,8 @@ class Tracker: self.verbose = verbose self.__loop_closure_interval = loop_closure_interval self.__frame_count = 0 - + dis_preset = config_tracker["dis_preset"] + loop_closure_interval = config_tracker["loop_closure_interval"] if not cuda: # DIS method - optimize for speed if dis_preset == 'ultrafast': @@ -37,7 +38,7 @@ class Tracker: # Aggressive optimization for CPU - # self.__tracking_inst.setFinestScale(1) # Skip finest pyramid level (2x faster) + self.__tracking_inst.setFinestScale(config_tracker["finest_scale"]) # Skip finest pyramid level (2x faster) # self.__tracking_inst.setPatchSize(8) # Smaller patches (default 8) # self.__tracking_inst.setPatchStride(4) # Larger stride = fewer patches # self.__tracking_inst.setGradientDescentIterations(12) # Reduce iterations (default 25) @@ -52,8 +53,8 @@ class Tracker: self.__fine_flow_queue = [] self.__prev_fine_flow = None self.__adaptive = adaptive - self.__lower_threshold = lower_threshold # error lower than threshold will close the loop - self.__upper_threshold = upper_threshold # error greater than threshold will add new reference frame + self.__lower_threshold = config_tracker["lower_threshold"] # error lower than threshold will close the loop + self.__upper_threshold = config_tracker["upper_threshold"] # error greater than threshold will add new reference frame def track(self, frame): @@ -145,10 +146,12 @@ class Tracker: self.__checkLoopClosure(frame) # CPU optical flow computation + start_time = time.perf_counter() self.__prev_fine_flow = self.__tracking_inst.calc( self.__fine_base_frame_queue[-1], frame, self.__prev_fine_flow) - + end_time = time.perf_counter() + print(f"CPU optical flow computation time: {end_time - start_time} seconds") # Direct numpy addition is faster than cv2.add final_flow = self.__fine_flow_queue[-1] + self.__prev_fine_flow @@ -229,8 +232,6 @@ class Tracker: self.__fine_flow_queue = [] self.__prev_fine_flow = None self.__frame_count = 0 - self.__vpi_prev_frame = None - self.__vpi_prev_pyramid = None def getFrameQueueLength(self): return len(self.__fine_base_frame_queue)