make preview left-right aware

This commit is contained in:
Jan Grewe 2024-12-22 01:00:17 +01:00
parent 37f505a725
commit 1a22362872
3 changed files with 25 additions and 16 deletions

View File

@ -1,5 +1,6 @@
import logging import logging
from PyQt6.QtWidgets import QWidget, QStackedLayout from PyQt6.QtWidgets import QWidget, QStackedLayout
from PyQt6.QtCore import Qt
from fixtracks.taskwidgets import FixTracks from fixtracks.taskwidgets import FixTracks
from fixtracks.detectionmerge import MergeDetections from fixtracks.detectionmerge import MergeDetections
@ -10,7 +11,9 @@ class CentralWidget(QWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
layout = QStackedLayout() layout = QStackedLayout()
layout.setAlignment(Qt.AlignmentFlag.AlignVCenter)
self._tw = TasksWidget() self._tw = TasksWidget()
self._tw.setMaximumHeight(200)
self._tw.clicked.connect(self._select_task) self._tw.clicked.connect(self._select_task)
self._tasksindex = layout.addWidget(self._tw) self._tasksindex = layout.addWidget(self._tw)
self._mergewidget = MergeDetections(self) self._mergewidget = MergeDetections(self)

View File

@ -8,14 +8,15 @@ from fixtracks.util import ImageReader
class VideoPreview(QWidget): class VideoPreview(QWidget):
def __init__(self, parent=None): def __init__(self, left=True, parent=None):
super().__init__(parent) super().__init__(None)
self._image = None self._image = None
self._line_pen = QPen(QColor.fromString("red"), 4) self._line_pen = QPen(QColor.fromString("red"), 4)
self._view = QGraphicsView() self._view = QGraphicsView()
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self._scene = None self._scene = None
self._pixmap = None self._pixmap = None
self._left = left
layout = QVBoxLayout() layout = QVBoxLayout()
layout.addWidget(self._view) layout.addWidget(self._view)
self.setLayout(layout) self.setLayout(layout)
@ -26,7 +27,7 @@ class VideoPreview(QWidget):
self._view.setScene(self._scene) self._view.setScene(self._scene)
self._view.fitInView(self._scene.sceneRect(), mode=Qt.AspectRatioMode.KeepAspectRatio) self._view.fitInView(self._scene.sceneRect(), mode=Qt.AspectRatioMode.KeepAspectRatio)
image_rect = self._pixmap.boundingRect() image_rect = self._pixmap.boundingRect()
start_x = image_rect.right() start_x = image_rect.right() if self._left else image_rect.left()
start_y = image_rect.top() start_y = image_rect.top()
end_y = image_rect.bottom() end_y = image_rect.bottom()
@ -62,7 +63,7 @@ class MergeDetections(QWidget):
self.left_videocombo.addItems(self._files) self.left_videocombo.addItems(self._files)
self.left_posspinner = QSpinBox() self.left_posspinner = QSpinBox()
self.left_posspinner.valueChanged.connect(self.on_leftmergelinemove) self.left_posspinner.valueChanged.connect(self.on_leftmergelinemove)
self.left_preview = VideoPreview(self) self.left_preview = VideoPreview()
self.right_datacombo = QComboBox() self.right_datacombo = QComboBox()
self.right_videocombo = QComboBox() self.right_videocombo = QComboBox()
@ -70,7 +71,7 @@ class MergeDetections(QWidget):
self.right_videocombo.addItems(self._files) self.right_videocombo.addItems(self._files)
self.right_posspinner = QSpinBox() self.right_posspinner = QSpinBox()
self.right_posspinner.valueChanged.connect(self.on_rightmergelinemove) self.right_posspinner.valueChanged.connect(self.on_rightmergelinemove)
self.right_preview = VideoPreview(self) self.right_preview = VideoPreview(left=False)
layout.addLayout(self.layout_controls()) layout.addLayout(self.layout_controls())
splitter = QGridLayout() splitter = QGridLayout()
@ -106,7 +107,6 @@ class MergeDetections(QWidget):
grd.setColumnStretch(3, 50) grd.setColumnStretch(3, 50)
grd.setColumnMinimumWidth(0, 50) grd.setColumnMinimumWidth(0, 50)
grd.setColumnMinimumWidth(2, 50) grd.setColumnMinimumWidth(2, 50)
# grd.setRowStretch(4, 100)
return grd return grd
@property @property
@ -138,13 +138,11 @@ class MergeDetections(QWidget):
self.right_datacombo.setCurrentIndex(0) self.right_datacombo.setCurrentIndex(0)
self.right_videocombo.currentIndexChanged.connect(self.on_rightvideoSelection) self.right_videocombo.currentIndexChanged.connect(self.on_rightvideoSelection)
self.left_videocombo.currentIndexChanged.connect(self.on_leftvideoSelection) self.left_videocombo.currentIndexChanged.connect(self.on_leftvideoSelection)
# self._files = file_list
def _toImage(self, frame): def _toImage(self, frame):
height, width, _ = frame.shape height, width, _ = frame.shape
bytesPerLine = 3 * width bytesPerLine = 3 * width
img = QImage(frame.data, width, height, bytesPerLine, QImage.Format.Format_BGR888).rgbSwapped() img = QImage(frame.data, width, height, bytesPerLine, QImage.Format.Format_BGR888).rgbSwapped()
# pm = QPixmap.fromImage(img)
return img return img
def on_rightvideoSelection(self): def on_rightvideoSelection(self):
@ -159,7 +157,7 @@ class MergeDetections(QWidget):
img = self._toImage(frame) img = self._toImage(frame)
self.right_preview.set_image(img) self.right_preview.set_image(img)
self.right_posspinner.setMaximum(img.width() - 1) self.right_posspinner.setMaximum(img.width() - 1)
self.right_posspinner.setValue(img.width() - 1) self.right_posspinner.setValue(0)
def on_leftvideoSelection(self): def on_leftvideoSelection(self):
logging.debug("Video selection of the %s side", "left") logging.debug("Video selection of the %s side", "left")
@ -178,5 +176,5 @@ class MergeDetections(QWidget):
def on_leftmergelinemove(self): def on_leftmergelinemove(self):
self.left_preview.set_lineposition(self.left_posspinner.value()) self.left_preview.set_lineposition(self.left_posspinner.value())
def on_leftmergelinemove(self): def on_rightmergelinemove(self):
self.right_preview.set_lineposition(self.right_posspinner.value()) self.right_preview.set_lineposition(self.right_posspinner.value())

View File

@ -1,8 +1,8 @@
import logging import logging
import pathlib import pathlib
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog from PyQt6.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QLabel, QPushButton, QFileDialog, QSizePolicy
from PyQt6.QtCore import pyqtSignal from PyQt6.QtCore import pyqtSignal, Qt
class TasksWidget(QWidget): class TasksWidget(QWidget):
@ -10,20 +10,28 @@ class TasksWidget(QWidget):
def __init__(self, parent = None): def __init__(self, parent = None):
super().__init__(parent) super().__init__(parent)
l = QVBoxLayout() l = QHBoxLayout()
l.addWidget(QLabel("Tasks:")) l.setAlignment(Qt.AlignmentFlag.AlignVCenter)
folderBtn = QPushButton("Select data folder") folderBtn = QPushButton("Select data folder")
folderBtn.setEnabled(True) folderBtn.setEnabled(True)
folderBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
folderBtn.clicked.connect(self._open_folder) folderBtn.clicked.connect(self._open_folder)
l.addWidget(folderBtn) l.addWidget(folderBtn)
sublayout = QVBoxLayout()
self.mergeBtn = QPushButton("Merge detections") self.mergeBtn = QPushButton("Merge detections")
self.mergeBtn.setEnabled(False) self.mergeBtn.setEnabled(False)
self.mergeBtn.clicked.connect(self._merge_clicked) self.mergeBtn.clicked.connect(self._merge_clicked)
self.mergeBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self.tracksBtn = QPushButton("Join tracks") self.tracksBtn = QPushButton("Join tracks")
self.tracksBtn.setEnabled(False) self.tracksBtn.setEnabled(False)
self.tracksBtn.clicked.connect(self._tracks_clicked) self.tracksBtn.clicked.connect(self._tracks_clicked)
l.addWidget(self.mergeBtn) self.tracksBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
l.addWidget(self.tracksBtn)
sublayout.addWidget(self.mergeBtn)
sublayout.addWidget(self.tracksBtn)
l.addLayout(sublayout)
self.setLayout(l) self.setLayout(l)
self._file_list = [] self._file_list = []