[timeline] improvements and use in tracks
This commit is contained in:
parent
df878ea95e
commit
336f9b0a4c
@ -58,6 +58,8 @@ class DetectionTimeline(QWidget):
|
|||||||
self._trackone = trackone_id
|
self._trackone = trackone_id
|
||||||
self._tracktwo = tracktwo_id
|
self._tracktwo = tracktwo_id
|
||||||
self._data = detectiondata
|
self._data = detectiondata
|
||||||
|
self._rangeStart = 0.0
|
||||||
|
self._rangeStop = 1.0
|
||||||
self._width = 2000
|
self._width = 2000
|
||||||
self._stepCount = 200
|
self._stepCount = 200
|
||||||
self._bg_brush = QBrush(QColor(20, 20, 20, 255))
|
self._bg_brush = QBrush(QColor(20, 20, 20, 255))
|
||||||
@ -76,12 +78,13 @@ class DetectionTimeline(QWidget):
|
|||||||
font.setPointSize(15)
|
font.setPointSize(15)
|
||||||
font.setBold(False)
|
font.setBold(False)
|
||||||
|
|
||||||
|
self._scene = QGraphicsScene(QRectF(0, 0, self._width, 50.))
|
||||||
|
self._scene.setBackgroundBrush(self._bg_brush)
|
||||||
|
|
||||||
self._view = QGraphicsView()
|
self._view = QGraphicsView()
|
||||||
self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform);
|
self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform);
|
||||||
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||||
self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio)
|
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 = self._scene.addText("track 1", font)
|
||||||
t1_label.setDefaultTextColor(self._t1_pen.color())
|
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 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)
|
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):
|
def fit_scene_to_view(self):
|
||||||
"""Scale the image to fit the QGraphicsView."""
|
"""Scale the image to fit the QGraphicsView."""
|
||||||
self._view.fitInView(self._scene.sceneRect(), Qt.KeepAspectRatio)
|
self._view.fitInView(self._scene.sceneRect(), Qt.KeepAspectRatio)
|
||||||
@ -147,9 +158,9 @@ class DetectionTimeline(QWidget):
|
|||||||
start_pos = x - w/2 + scene_width/2
|
start_pos = x - w/2 + scene_width/2
|
||||||
end_pos = x + w/2 + scene_width/2
|
end_pos = x + w/2 + scene_width/2
|
||||||
|
|
||||||
range_start = np.round(start_pos / scene_width, 3)
|
self._rangeStart = np.round(start_pos / scene_width, 3)
|
||||||
range_end = np.round(end_pos / scene_width, 3)
|
self._rangeStop = np.round(end_pos / scene_width, 3)
|
||||||
self.signals.windowMoved.emit(range_start, range_end)
|
self.signals.windowMoved.emit(self._rangeStart, self._rangeStop)
|
||||||
|
|
||||||
# TODO add method to change window size
|
# TODO add method to change window size
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ from PySide6.QtWidgets import QSpinBox, QSpacerItem, QFileDialog, QProgressBar,
|
|||||||
from fixtracks.utils.reader import PickleLoader
|
from fixtracks.utils.reader import PickleLoader
|
||||||
from fixtracks.widgets.detectionview import DetectionView
|
from fixtracks.widgets.detectionview import DetectionView
|
||||||
from fixtracks.widgets.timeline import Timeline
|
from fixtracks.widgets.timeline import Timeline
|
||||||
|
from fixtracks.widgets.detectiontimeline import DetectionTimeline
|
||||||
|
|
||||||
class PoseTableModel(QAbstractTableModel):
|
class PoseTableModel(QAbstractTableModel):
|
||||||
column_header = ["frame", "track"]
|
column_header = ["frame", "track"]
|
||||||
@ -108,8 +108,8 @@ class FixTracks(QWidget):
|
|||||||
self._progress_bar.setValue(0)
|
self._progress_bar.setValue(0)
|
||||||
self._tasklabel = QLabel()
|
self._tasklabel = QLabel()
|
||||||
|
|
||||||
self._timeline = Timeline()
|
self._timeline = DetectionTimeline()
|
||||||
self._timeline.signals.changed.connect(self.on_windowChanged)
|
self._timeline.signals.windowMoved.connect(self.on_windowChanged)
|
||||||
self._windowspinner = QSpinBox()
|
self._windowspinner = QSpinBox()
|
||||||
self._windowspinner.setRange(100, 10000)
|
self._windowspinner.setRange(100, 10000)
|
||||||
self._windowspinner.setSingleStep(100)
|
self._windowspinner.setSingleStep(100)
|
||||||
@ -208,8 +208,11 @@ class FixTracks(QWidget):
|
|||||||
|
|
||||||
left_trackid = 1
|
left_trackid = 1
|
||||||
right_trackid = 2
|
right_trackid = 2
|
||||||
start_frame = self._timeline.sliderPosition - self._windowspinner.value() // 2
|
max_frames = np.max(self._dataframe.frame.values)
|
||||||
stop_frame = self._timeline.sliderPosition + self._windowspinner.value() // 2
|
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)]
|
df = self._dataframe[(self._dataframe.frame >= start_frame) & (self._dataframe.frame < stop_frame)]
|
||||||
assigned_left = df[(df.track == left_trackid)]
|
assigned_left = df[(df.track == left_trackid)]
|
||||||
@ -235,7 +238,7 @@ class FixTracks(QWidget):
|
|||||||
self._progress_bar.setValue(0)
|
self._progress_bar.setValue(0)
|
||||||
if state and self._reader is not None:
|
if state and self._reader is not None:
|
||||||
self._dataframe = self._reader.data
|
self._dataframe = self._reader.data
|
||||||
self._timeline.setRange(np.max(self._dataframe.frame.values), self._windowspinner.value())
|
self._timeline.setDetectionData(self._dataframe)
|
||||||
self.populateTables()
|
self.populateTables()
|
||||||
|
|
||||||
def on_save(self):
|
def on_save(self):
|
||||||
@ -251,8 +254,8 @@ class FixTracks(QWidget):
|
|||||||
def on_assignRight(self):
|
def on_assignRight(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def on_windowChanged(self, value):
|
def on_windowChanged(self, start, stop):
|
||||||
logging.info("Timeline reports window change")
|
logging.info("Timeline reports window change to range %f %f percent of data", start, stop)
|
||||||
|
|
||||||
self.populateTables()
|
self.populateTables()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user