add OF finest scale tuning

This commit is contained in:
unknown
2026-01-14 10:05:53 +08:00
parent e735587d4f
commit 4d6bfb49ae
3 changed files with 15 additions and 12 deletions
+2 -1
View File
@@ -22,7 +22,8 @@
"lower_threshold": 12.0, "lower_threshold": 12.0,
"upper_threshold": 18.0, "upper_threshold": 18.0,
"loop_closure_interval": 1, "loop_closure_interval": 1,
"dis_preset": "medium" "dis_preset": "medium",
"finest_scale": 1
}, },
"contact": { "contact": {
"min_contour_area": 3000, "min_contour_area": 3000,
+2 -1
View File
@@ -135,7 +135,7 @@ class Sensor:
# Initialize components # Initialize components
self.stitcher = Stitcher(isstitch=isstitch, config_stitcher=self.__config_stitcher, verbose=self.verbose) 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.__contact3d = Contact3D(config_contact=self.__config_contact, verbose=self.verbose)
self.__hhd = None self.__hhd = None
@@ -402,6 +402,7 @@ class Sensor:
self._config_dis_preset = self._config["tracker"]["dis_preset"] self._config_dis_preset = self._config["tracker"]["dis_preset"]
self.__config_tracker = self._config["tracker"]
self.__config_stitcher = self._config["stitcher"] self.__config_stitcher = self._config["stitcher"]
self.__config_contact = self._config["contact"] self.__config_contact = self._config["contact"]
+11 -10
View File
@@ -1,14 +1,14 @@
import cv2 import cv2
import numpy as np import numpy as np
# from .HHD import * import cupy as cp
# import src.utils as utils import time
class Tracker: class Tracker:
def __init__(self, def __init__(self,
adaptive, adaptive,
cuda, cuda,
config_tracker=None,
lower_threshold=12.0, lower_threshold=12.0,
upper_threshold=18.0, upper_threshold=18.0,
loop_closure_interval=1, loop_closure_interval=1,
@@ -23,7 +23,8 @@ class Tracker:
self.verbose = verbose self.verbose = verbose
self.__loop_closure_interval = loop_closure_interval self.__loop_closure_interval = loop_closure_interval
self.__frame_count = 0 self.__frame_count = 0
dis_preset = config_tracker["dis_preset"]
loop_closure_interval = config_tracker["loop_closure_interval"]
if not cuda: if not cuda:
# DIS method - optimize for speed # DIS method - optimize for speed
if dis_preset == 'ultrafast': if dis_preset == 'ultrafast':
@@ -37,7 +38,7 @@ class Tracker:
# Aggressive optimization for CPU # 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.setPatchSize(8) # Smaller patches (default 8)
# self.__tracking_inst.setPatchStride(4) # Larger stride = fewer patches # self.__tracking_inst.setPatchStride(4) # Larger stride = fewer patches
# self.__tracking_inst.setGradientDescentIterations(12) # Reduce iterations (default 25) # self.__tracking_inst.setGradientDescentIterations(12) # Reduce iterations (default 25)
@@ -52,8 +53,8 @@ class Tracker:
self.__fine_flow_queue = [] self.__fine_flow_queue = []
self.__prev_fine_flow = None self.__prev_fine_flow = None
self.__adaptive = adaptive self.__adaptive = adaptive
self.__lower_threshold = lower_threshold # error lower than threshold will close the loop self.__lower_threshold = config_tracker["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.__upper_threshold = config_tracker["upper_threshold"] # error greater than threshold will add new reference frame
def track(self, frame): def track(self, frame):
@@ -145,10 +146,12 @@ class Tracker:
self.__checkLoopClosure(frame) self.__checkLoopClosure(frame)
# CPU optical flow computation # CPU optical flow computation
start_time = time.perf_counter()
self.__prev_fine_flow = self.__tracking_inst.calc( self.__prev_fine_flow = self.__tracking_inst.calc(
self.__fine_base_frame_queue[-1], frame, self.__fine_base_frame_queue[-1], frame,
self.__prev_fine_flow) 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 # Direct numpy addition is faster than cv2.add
final_flow = self.__fine_flow_queue[-1] + self.__prev_fine_flow final_flow = self.__fine_flow_queue[-1] + self.__prev_fine_flow
@@ -229,8 +232,6 @@ class Tracker:
self.__fine_flow_queue = [] self.__fine_flow_queue = []
self.__prev_fine_flow = None self.__prev_fine_flow = None
self.__frame_count = 0 self.__frame_count = 0
self.__vpi_prev_frame = None
self.__vpi_prev_pyramid = None
def getFrameQueueLength(self): def getFrameQueueLength(self):
return len(self.__fine_base_frame_queue) return len(self.__fine_base_frame_queue)