diff --git a/tsmark/video_annotator.py b/tsmark/video_annotator.py index 049b493..c803cb2 100755 --- a/tsmark/video_annotator.py +++ b/tsmark/video_annotator.py @@ -55,10 +55,10 @@ class Marker: self.forced_fps = opts.fps try: - self.load_plugin() self.open() self.calculate_res() self.parse_timestamps() + self.load_plugin() if self.opts.start_time: try: self.nr = int(self.opts.start_time) @@ -615,7 +615,7 @@ class World: if self.plugin: self.plugin(self) - def interpolate_points(self): + def interpolate_points(self, point_index = None): """types: key: user clicked / accepted frame interp: interpolated frame @@ -623,6 +623,9 @@ class World: post: after any keyframes """ + if point_index is None: + point_index = self.point_index + def i_point(x0=None, y0=None, x1=None, y1=None, t=None, visible=None, age=None): return {"x0": x0, "y0": y0, "x1": x1, "y1": y1, "type": t, "visible": visible, "age"=age} @@ -630,23 +633,25 @@ class World: return [p["x0"], p["y0"], p["x1"], p["y1"]] - if not self.point_index in self.points_interpolated: - self.points_interpolated[self.point_index] = {key: {} for key in range(self.frames)} + if not point_index in self.points: + return - if len(self.points[self.point_index]) == 1: # only one point added - key = list(self.points[self.point_index].keys())[0] - vals = self.points[self.point_index][key] - # x, y, x2, y2 = self.points[self.point_index][key] + if not point_index in self.points_interpolated: + self.points_interpolated[point_index] = {key: {} for key in range(self.frames)} + + if len(self.points[point_index]) == 1: # only one point added + key = list(self.points[point_index].keys())[0] + vals = self.points[point_index][key] for key in range(self.frames): - self.points_interpolated[self.point_index][key] = i_point() - self.points_interpolated[self.point_index][key].update(vals) - self.points_interpolated[self.point_index][key]["type"] = "pre" + self.points_interpolated[point_index][key] = i_point() + self.points_interpolated[point_index][key].update(vals) + self.points_interpolated[point_index][key]["type"] = "pre" - self.points_interpolated[self.point_index][self.nr]["type"] = "key" + self.points_interpolated[point_index][self.nr]["type"] = "key" else: # more points - point_keys = list(sorted(list(self.points[self.point_index].keys()))) - point_values = [point2array(self.points[self.point_index][k]) for k in point_keys] + point_keys = list(sorted(list(self.points[point_index].keys()))) + point_values = [point2array(self.points[point_index][k]) for k in point_keys] xyxy = np.array(point_values).T spline = PchipInterpolator(point_keys, xyxy, axis=1) start_key = min(point_keys) @@ -654,14 +659,14 @@ class World: t2 = np.arange(start_key, end_key) # Pre points for key in range(0, start_key): - self.points_interpolated[self.point_index][key]["type"] = "pre" - self.points_interpolated[self.point_index][key].update(self.points[self.point_index][start_key]) + self.points_interpolated[point_index][key]["type"] = "pre" + self.points_interpolated[point_index][key].update(self.points[point_index][start_key]) # interpolated points - visible = self.points[self.point_index][start_key]["visible"] + visible = self.points[point_index][start_key]["visible"] for row in np.vstack((t2, spline(t2))).T: if row[0] in point_keys: - visible = self.points[self.point_index][row[0]]["visible"] - self.points_interpolated[self.point_index][row[0]] = { + visible = self.points[point_index][row[0]]["visible"] + self.points_interpolated[point_index][row[0]] = { "type": "interp", "x0": int(row[1]), "y0": int(row[2]), @@ -672,7 +677,7 @@ class World: # post points for key in range(end_key, self.frames + 1): - self.points_interpolated[self.point_index][key] = { + self.points_interpolated[point_index][key] = { "type": "post", "x0": int(row[1]), "y0": int(row[2]), @@ -682,14 +687,14 @@ class World: } # clicked points (not necessary, could determine at draw time!) for key in point_keys: - self.points_interpolated[self.point_index][key]["type"] = "key" + self.points_interpolated[point_index][key]["type"] = "key" age=0 - for key in self.points_interpolated[self.point_index]: - if self.points_interpolated[self.point_index][key]["type"] == "key": + for key in self.points_interpolated[point_index]: + if self.points_interpolated[point_index][key]["type"] == "key": age = 0 - if self.points_interpolated[self.point_index][key]["type"] == "interp": + if self.points_interpolated[point_index][key]["type"] == "interp": age += 1 - self.points_interpolated[self.point_index][key]["type"] = age + self.points_interpolated[point_index][key]["type"] = age def draw_help(self, frame):