fixing interpolator

This commit is contained in:
Q
2025-08-22 21:06:55 +03:00
parent 74db994d16
commit c35a3e90bd

View File

@@ -284,17 +284,15 @@ class Marker:
frame, (0, self.mouse_position[1]), (self.video_res[0], self.mouse_position[1]), (128, 128, 128), 1 frame, (0, self.mouse_position[1]), (self.video_res[0], self.mouse_position[1]), (128, 128, 128), 1
) )
# Show current track # Show current track
x, y = [20, 70]
intrp_str = ( intrp_str = (
"" ""
if not self.points_interpolation_enabled if not self.points_interpolation_enabled
else " i*" if True in self.points_interpolation_required.values() else " i" else " i*" if True in self.points_interpolation_required.values() else " i"
) )
self.shadow_text( self.shadow_text(
frame, frame,
f"P:{str(self.point_index)}{intrp_str}", f"P:{str(self.point_index)}{intrp_str}",
(x, y), (20, 70),
0.5, 0.5,
1, 1,
(255, 255, 255), (255, 255, 255),
@@ -383,7 +381,7 @@ class Marker:
"y1": ip["y1"], "y1": ip["y1"],
"visible": ip["visible"], "visible": ip["visible"],
} }
self.points_interpolation_required[self.point_index] = True self.interpolate_set(self.point_index)
except Exception: except Exception:
pass pass
@@ -560,8 +558,7 @@ class Marker:
self.points[self.point_index][self.nr]["y0"], self.points[self.point_index][self.nr]["y0"],
self.points[self.point_index][self.nr]["y1"], self.points[self.point_index][self.nr]["y1"],
) )
self.interpolate_set(self.point_index)
self.points_interpolation_required[self.point_index] = True
def modify_point_wh(self): def modify_point_wh(self):
@@ -582,8 +579,7 @@ class Marker:
self.points[self.point_index][self.nr]["x1"] = int(curr_point["cx"] + new_wh) self.points[self.point_index][self.nr]["x1"] = int(curr_point["cx"] + new_wh)
self.points[self.point_index][self.nr]["y1"] = int(curr_point["cy"] + new_hh) self.points[self.point_index][self.nr]["y1"] = int(curr_point["cy"] + new_hh)
self.points[self.point_index][self.nr]["visible"] = POINT_VISIBILITY[0] self.points[self.point_index][self.nr]["visible"] = POINT_VISIBILITY[0]
self.interpolate_set(self.point_index)
self.points_interpolation_required[self.point_index] = True
def toggle_point_visibility(self): def toggle_point_visibility(self):
@@ -610,7 +606,7 @@ class Marker:
except Exception as e: except Exception as e:
print(e) print(e)
pass pass
self.points_interpolation_required[self.point_index] = True self.interpolate_set(self.point_index)
def track_point(self): def track_point(self):
@@ -626,7 +622,7 @@ class Marker:
if len(tracker_gui.points) > 0: if len(tracker_gui.points) > 0:
for nr in tracker_gui.points: for nr in tracker_gui.points:
self.points[self.point_index][nr] = tracker_gui.points[nr] self.points[self.point_index][nr] = tracker_gui.points[nr]
self.points_interpolation_required[self.point_index] = True self.interpolate_set(self.point_index)
self.nr = max(tracker_gui.points) - 1 self.nr = max(tracker_gui.points) - 1
self.read_next = True self.read_next = True
@@ -675,6 +671,15 @@ class World:
if self.plugin: if self.plugin:
self.plugin() self.plugin()
def interpolate_set(self, point_index=None):
if point_index is None:
point_index = self.point_index
self.points_interpolation_required[point_index] = True
if not self.interpolate_thread_alive():
print("ERROR: Interpolator thread is not running!")
self.interpolate_thread_start()
def interpolate_points(self, point_index=None): def interpolate_points(self, point_index=None):
"""types: """types:
key: user clicked / accepted frame key: user clicked / accepted frame
@@ -685,7 +690,6 @@ class World:
try: try:
if not point_index in self.points: if not point_index in self.points:
return return
self.interpolate_thread_start()
if point_index is None: if point_index is None:
point_index = self.point_index point_index = self.point_index
@@ -779,12 +783,17 @@ class World:
def interpolate_thread_stop(self): def interpolate_thread_stop(self):
self.points_interpolation_thread_exit = True self.points_interpolation_thread_exit = True
for point_index in self.points_interpolation_required: for point_index in self.points_interpolation_required:
if self.points_interpolation_required[point_index]: if self.points_interpolation_required[point_index]:
self.interpolate_points(point_index) self.interpolate_points(point_index)
def interpolate_thread_alive(self):
if self.points_interpolation_thread is None:
return False
return self.points_interpolation_thread.is_alive()
def interpolate_points_in_thread(self): def interpolate_points_in_thread(self):
self.points_interpolation_frequency = 1 self.points_interpolation_frequency = 1
@@ -807,7 +816,7 @@ class World:
self.points_interpolation_enabled = not self.points_interpolation_enabled self.points_interpolation_enabled = not self.points_interpolation_enabled
if self.points_interpolation_enabled: if self.points_interpolation_enabled:
self.interpolate_points() self.interpolate_thread_start()
def draw_help(self, frame): def draw_help(self, frame):
@@ -1035,7 +1044,7 @@ class World:
) )
if not self.points[index][key].get("visible", "NA") in POINT_VISIBILITY: if not self.points[index][key].get("visible", "NA") in POINT_VISIBILITY:
self.points[index][key]["visible"] = POINT_VISIBILITY[0] self.points[index][key]["visible"] = POINT_VISIBILITY[0]
self.interpolate_points() self.interpolate_set(index)
print(f"Loaded points with index: {index}") print(f"Loaded points with index: {index}")
self.point_index = None self.point_index = None
@@ -1617,7 +1626,7 @@ class TrackerGUI:
if i >= cut_after: if i >= cut_after:
continue continue
track_area = tracked[i][2] * tracked[i][3] track_area = tracked[i][2] * tracked[i][3]
visibility = POINT_VISIBILITY[0] if track_area > 0.9 * bbox_area else POINT_VISIBILITY[1] visibility = POINT_VISIBILITY[0] if track_area > 0.5 * bbox_area else POINT_VISIBILITY[1]
self.points[old_nr + i] = { self.points[old_nr + i] = {
"x0": tracked[i][0], "x0": tracked[i][0],
"y0": tracked[i][1], "y0": tracked[i][1],