From 1945cce0e66f74bcd3fa617924a3f920108bf1bf Mon Sep 17 00:00:00 2001 From: Ruben van de Ven Date: Tue, 15 Oct 2024 10:42:22 +0200 Subject: [PATCH] Animation timing depends on walking speed --- moonwalk.py | 36 ++++++++++++++++++++++++++++-------- walk_bw.jpg | Bin 0 -> 35667 bytes 2 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 walk_bw.jpg diff --git a/moonwalk.py b/moonwalk.py index 0f4660c..29d3a30 100644 --- a/moonwalk.py +++ b/moonwalk.py @@ -26,7 +26,7 @@ Interval = float # seconds logger = logging.getLogger('moonwalk') -colorset = [(0, 0, 0), +colorset = [(255, 0, 0), (0, 0, 255), (0, 255, 0), (0, 255, 255), @@ -36,15 +36,15 @@ colorset = [(0, 0, 0), ] -walk_image = pyglet.image.load('walk.jpg') # TODO investigaet pyglet.resource: https://pyglet.readthedocs.io/en/latest/programming_guide/image.html#displaying-images +VELOCITY_FACTOR = 1000*.05 # a pixels/second velocity of 400 gives a frame-duration of .05 +walk_image = pyglet.image.load('walk_bw.jpg') # TODO investigaet pyglet.resource: https://pyglet.readthedocs.io/en/latest/programming_guide/image.html#displaying-images image_grid = pyglet.image.ImageGrid(walk_image, rows=1, columns=4) # texture_grid = image_grid.get_texture_sequence() -walk_animation = image_grid.get_animation(period=.2) +walk_animation = image_grid.get_animation(period=.05) walk_animation_dim = { 'y': walk_animation.get_max_height(), 'x': walk_animation.get_max_width() } -sprite = pyglet.sprite.Sprite(img=walk_animation) @dataclass @@ -54,7 +54,7 @@ class Params: tracker_fps: float = 5.6 # iou = None emitter_speed: float = 4 # objects per second - object_velocity: float = 80 # pixels/second + object_velocity: float = 400 # pixels/second velocity_decay: float = 1 # make system a bit springy iou_threshold: float = 0 # SORT Intersection over union @@ -91,15 +91,17 @@ class Params: for listener in self._listeners[attr]: listener(attr, old_val, val) + + class DetectedObject: def __init__(self, canvas: Canvas): self.canvas = canvas # TODO handle variability self.v = self.canvas.params.object_velocity - self.l = 0 # left - self.w = 10 # width - self.h = 20 # height + self.w = 80 # width + self.h = 160 # height + self.l = -self.w # left self.t = (self.canvas.height - self.h)/2 # top # self.shape = pyglet.shapes.Rectangle(self.l, self.t, self.w, self.h, color=(255, 22, 20), batch=self.canvas.batch_figures) @@ -211,6 +213,9 @@ class Canvas: self.interval_items: list[pyglet.clock._ScheduledIntervalItem] = [i for i in pyglet.clock._default._schedule_interval_items if i.func == self.on_track] self.params.add_listener('tracker_fps', self.on_tracker_fps_change) self.params.add_listener('iou_threshold', self.on_iou_threshold_change) + self.params.add_listener('object_velocity', self.on_object_velocity_change) + # trigger first time around + self.on_object_velocity_change('object_velocity', None, self.params.object_velocity) def getTrackBboxShapes(self, track_id): color = colorset[int(track_id) % len(colorset)] @@ -220,6 +225,7 @@ class Canvas: # pyglet.shapes.Lab(0,0,0,0,color=(0,255,0),thickness=2, batch=self.batch_bounding_boxes) ] + def on_tracker_fps_change(self, field, old_value, new_value): """ Param dataclass listener for changes to tracker_fps @@ -228,6 +234,20 @@ class Canvas: ii.interval = 1/new_value logger.debug(f"Set tracker interval to {ii.interval}") + def on_object_velocity_change(self, field, old_value, new_value): + """ + Param dataclass listener for changes to object_velocity as to change walk animation + """ + duration = max(.001, VELOCITY_FACTOR / new_value) + logger.debug(f"set frame duration to {duration=} (for {new_value} p/s, factor: {VELOCITY_FACTOR})") + for frame in walk_animation.frames: + # a velocity of + frame.duration = duration + + # for ii in self.interval_items: + # ii.interval = 1/new_value + # logger.debug(f"Set tracker interval to {ii.interval}") + def on_iou_threshold_change(self, field, old_value, new_value): """ Param dataclass listener for changes to iou_threshold diff --git a/walk_bw.jpg b/walk_bw.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23446cbda4f5b3d3f0f21f4cd1f0a18ddea3cbd1 GIT binary patch literal 35667 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