[detectionview, tracks] selection of keypoint supported ...
aalpha value of detection codes for time
This commit is contained in:
parent
b9943f176b
commit
f366d6b8ff
Binary file not shown.
@ -78,7 +78,7 @@ class DetectionView(QWidget):
|
||||
super().__init__(parent)
|
||||
self._img = None
|
||||
self._pixmapitem = None
|
||||
self._scene = None
|
||||
self._scene = DetectionScene()
|
||||
self._view = QGraphicsView()
|
||||
self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
self._view.setMouseTracking(True)
|
||||
@ -89,7 +89,6 @@ class DetectionView(QWidget):
|
||||
|
||||
def setImage(self, image: QImage):
|
||||
self._img = image
|
||||
self._scene = DetectionScene()
|
||||
self._scene.signals.itemsSelected.connect(self.on_itemSelection)
|
||||
self._pixmapitem = self._scene.addPixmap(QPixmap.fromImage(self._img))
|
||||
self._view.setScene(self._scene)
|
||||
@ -104,11 +103,14 @@ class DetectionView(QWidget):
|
||||
del it
|
||||
|
||||
def addDetections(self, coordinates:np.array, track_ids:np.array, detection_ids:np.array, brush:QBrush):
|
||||
logging.debug("DetectionView: add %i detections with color", coordinates.shape[0])
|
||||
image_rect = self._pixmapitem.boundingRect()
|
||||
for i in range(coordinates.shape[0]):
|
||||
image_rect = self._pixmapitem.boundingRect() if self._pixmapitem is not None else QRectF(0,0,0,0)
|
||||
num_detections = coordinates.shape[0]
|
||||
for i in range(num_detections):
|
||||
x = coordinates[i, 0]
|
||||
y = coordinates[i, 1]
|
||||
c = brush.color()
|
||||
c.setAlpha(int(i * 255 / num_detections))
|
||||
brush.setColor(c)
|
||||
item = Detection(image_rect.left() + x, image_rect.top() + y, 20, 20, brush=brush)
|
||||
item.setData(0, track_ids[i])
|
||||
item.setData(1, detection_ids[i])
|
||||
|
@ -7,7 +7,7 @@ import pandas as pd
|
||||
from PySide6.QtCore import Qt, QThreadPool, Signal, QAbstractTableModel, QSortFilterProxyModel, QSize, QObject
|
||||
from PySide6.QtGui import QImage, QBrush, QColor, QFont
|
||||
from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QSizePolicy, QComboBox
|
||||
from PySide6.QtWidgets import QSpinBox, QSpacerItem, QProgressBar, QTableView, QSplitter, QGridLayout, QFileDialog
|
||||
from PySide6.QtWidgets import QSpinBox, QSpacerItem, QProgressBar, QSplitter, QGridLayout, QFileDialog, QGridLayout
|
||||
|
||||
from fixtracks.utils.reader import PickleLoader
|
||||
from fixtracks.utils.writer import PickleWriter
|
||||
@ -293,6 +293,11 @@ class DataController(QObject):
|
||||
with open(filename, 'wb') as f:
|
||||
pickle.dump(df, f)
|
||||
|
||||
def numKeypoints(self):
|
||||
if len(self._data["keypoints"]) == 0:
|
||||
return 0
|
||||
return self._data["keypoints"][0].shape[0]
|
||||
|
||||
|
||||
class FixTracks(QWidget):
|
||||
back = Signal()
|
||||
@ -327,11 +332,18 @@ class FixTracks(QWidget):
|
||||
self._windowspinner.setSingleStep(100)
|
||||
self._windowspinner.setValue(500)
|
||||
self._windowspinner.valueChanged.connect(self.on_windowSizeChanged)
|
||||
self._keypointcombo = QComboBox()
|
||||
self._keypointcombo.currentIndexChanged.connect(self.on_keypointSelected)
|
||||
|
||||
combo_layout = QGridLayout()
|
||||
combo_layout.addWidget(QLabel("Window:"), 0, 0)
|
||||
combo_layout.addWidget(self._windowspinner, 0, 1)
|
||||
combo_layout.addWidget(QLabel("Keypoint:"), 1, 0)
|
||||
combo_layout.addWidget(self._keypointcombo, 1, 1)
|
||||
|
||||
timelinebox = QHBoxLayout()
|
||||
timelinebox.addWidget(self._timeline)
|
||||
timelinebox.addWidget(QLabel("Window"))
|
||||
timelinebox.addWidget(self._windowspinner)
|
||||
timelinebox.addLayout(combo_layout)
|
||||
|
||||
self._controls_widget = SelectionControls()
|
||||
self._controls_widget.assignOne.connect(self.on_assignOne)
|
||||
@ -407,7 +419,8 @@ class FixTracks(QWidget):
|
||||
def update_detectionView(df, name):
|
||||
if len(df) == 0:
|
||||
return
|
||||
coords = np.stack(df["keypoints"].values).astype(np.float32)[:,0,:]
|
||||
keypoint = self._keypointcombo.currentIndex()
|
||||
coords = np.stack(df["keypoints"].values).astype(np.float32)[:, keypoint,:]
|
||||
tracks = df["track"].values.astype(int)
|
||||
ids = df.index.values.astype(int)
|
||||
self._detectionView.addDetections(coords, tracks, ids, self._brushes[name])
|
||||
@ -459,6 +472,12 @@ class FixTracks(QWidget):
|
||||
self._data_combo.addItem("Please select")
|
||||
self._data_combo.addItems(self.fileList)
|
||||
self._data_combo.setCurrentIndex(0)
|
||||
|
||||
def populateKeypointCombo(self, num_keypoints):
|
||||
self._keypointcombo.clear()
|
||||
for i in range(num_keypoints):
|
||||
self._keypointcombo.addItem(str(i))
|
||||
self._keypointcombo.setCurrentIndex(0)
|
||||
|
||||
def _on_dataOpenend(self, state):
|
||||
logging.info("Finished loading data with state %s", state)
|
||||
@ -467,6 +486,7 @@ class FixTracks(QWidget):
|
||||
self._progress_bar.setValue(0)
|
||||
if state and self._reader is not None:
|
||||
self._data.setData(self._reader.asdict)
|
||||
self.populateKeypointCombo(self._data.numKeypoints())
|
||||
self._timeline.setDetectionData(self._data.data)
|
||||
maxframes = self._data.max("frame")
|
||||
rel_width = self._windowspinner.value() / maxframes
|
||||
@ -474,6 +494,9 @@ class FixTracks(QWidget):
|
||||
self.update()
|
||||
self._saveBtn.setEnabled(True)
|
||||
|
||||
def on_keypointSelected(self):
|
||||
self.update()
|
||||
|
||||
def on_save(self):
|
||||
logging.debug("Saving fixtracks results")
|
||||
self._tasklabel.setText("Saving results to file...")
|
||||
|
Loading…
Reference in New Issue
Block a user