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