[timeline] improvements and use in tracks

This commit is contained in:
Jan Grewe 2025-01-26 23:24:22 +01:00
parent df878ea95e
commit 336f9b0a4c
2 changed files with 27 additions and 13 deletions

View File

@ -58,6 +58,8 @@ class DetectionTimeline(QWidget):
self._trackone = trackone_id
self._tracktwo = tracktwo_id
self._data = detectiondata
self._rangeStart = 0.0
self._rangeStop = 1.0
self._width = 2000
self._stepCount = 200
self._bg_brush = QBrush(QColor(20, 20, 20, 255))
@ -76,12 +78,13 @@ class DetectionTimeline(QWidget):
font.setPointSize(15)
font.setBold(False)
self._scene = QGraphicsScene(QRectF(0, 0, self._width, 50.))
self._scene.setBackgroundBrush(self._bg_brush)
self._view = QGraphicsView()
self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform);
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio)
self._scene = QGraphicsScene(QRectF(0, 0, self._width, 50.))
self._scene.setBackgroundBrush(self._bg_brush)
t1_label = self._scene.addText("track 1", font)
t1_label.setDefaultTextColor(self._t1_pen.color())
@ -133,6 +136,14 @@ class DetectionTimeline(QWidget):
if t2_coverage[i]: self._scene.addLine(pos[i], 17, pos[i], 32., pen=self._t2_pen)
if other_coverage[i]: self._scene.addLine(pos[i], 34, pos[i], 49., pen=self._other_pen)
@property
def rangeStart(self):
return self._rangeStart
@property
def rangeStop(self):
return self._rangeStop
def fit_scene_to_view(self):
"""Scale the image to fit the QGraphicsView."""
self._view.fitInView(self._scene.sceneRect(), Qt.KeepAspectRatio)
@ -147,9 +158,9 @@ class DetectionTimeline(QWidget):
start_pos = x - w/2 + scene_width/2
end_pos = x + w/2 + scene_width/2
range_start = np.round(start_pos / scene_width, 3)
range_end = np.round(end_pos / scene_width, 3)
self.signals.windowMoved.emit(range_start, range_end)
self._rangeStart = np.round(start_pos / scene_width, 3)
self._rangeStop = np.round(end_pos / scene_width, 3)
self.signals.windowMoved.emit(self._rangeStart, self._rangeStop)
# TODO add method to change window size

View File

@ -11,7 +11,7 @@ from PySide6.QtWidgets import QSpinBox, QSpacerItem, QFileDialog, QProgressBar,
from fixtracks.utils.reader import PickleLoader
from fixtracks.widgets.detectionview import DetectionView
from fixtracks.widgets.timeline import Timeline
from fixtracks.widgets.detectiontimeline import DetectionTimeline
class PoseTableModel(QAbstractTableModel):
column_header = ["frame", "track"]
@ -108,8 +108,8 @@ class FixTracks(QWidget):
self._progress_bar.setValue(0)
self._tasklabel = QLabel()
self._timeline = Timeline()
self._timeline.signals.changed.connect(self.on_windowChanged)
self._timeline = DetectionTimeline()
self._timeline.signals.windowMoved.connect(self.on_windowChanged)
self._windowspinner = QSpinBox()
self._windowspinner.setRange(100, 10000)
self._windowspinner.setSingleStep(100)
@ -208,8 +208,11 @@ class FixTracks(QWidget):
left_trackid = 1
right_trackid = 2
start_frame = self._timeline.sliderPosition - self._windowspinner.value() // 2
stop_frame = self._timeline.sliderPosition + self._windowspinner.value() // 2
max_frames = np.max(self._dataframe.frame.values)
start = self._timeline.rangeStart
stop = self._timeline._rangeStop
start_frame = np.floor(start * max_frames)
stop_frame = np.ceil(stop * max_frames)
df = self._dataframe[(self._dataframe.frame >= start_frame) & (self._dataframe.frame < stop_frame)]
assigned_left = df[(df.track == left_trackid)]
@ -235,7 +238,7 @@ class FixTracks(QWidget):
self._progress_bar.setValue(0)
if state and self._reader is not None:
self._dataframe = self._reader.data
self._timeline.setRange(np.max(self._dataframe.frame.values), self._windowspinner.value())
self._timeline.setDetectionData(self._dataframe)
self.populateTables()
def on_save(self):
@ -251,8 +254,8 @@ class FixTracks(QWidget):
def on_assignRight(self):
pass
def on_windowChanged(self, value):
logging.info("Timeline reports window change")
def on_windowChanged(self, start, stop):
logging.info("Timeline reports window change to range %f %f percent of data", start, stop)
self.populateTables()