From 6c75d24f97aa208c5bef8297b1f430a3a572fc6d Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Thu, 6 Feb 2025 09:42:54 +0100 Subject: [PATCH] [tracks, detections] add frame and all keypoint coordinates to Detection --- fixtracks/widgets/detectionview.py | 9 ++++++--- fixtracks/widgets/tracks.py | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/fixtracks/widgets/detectionview.py b/fixtracks/widgets/detectionview.py index 1b86459..56b945a 100644 --- a/fixtracks/widgets/detectionview.py +++ b/fixtracks/widgets/detectionview.py @@ -119,18 +119,21 @@ class DetectionView(QWidget): self._scene.removeItem(it) del it - def addDetections(self, coordinates:np.array, track_ids:np.array, detection_ids:np.array, brush:QBrush): + def addDetections(self, coordinates:np.array, track_ids:np.array, detection_ids:np.array, frames: np.array, + keypoint:int, brush:QBrush): 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] + x = coordinates[i, keypoint, 0] + y = coordinates[i, keypoint, 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]) + item.setData(2, coordinates[i, :, :]) + item.setData(3, frames[i]) item = self._scene.addItem(item) logging.debug("DetectionView: Number of items in scene: %i", len(self._scene.items())) diff --git a/fixtracks/widgets/tracks.py b/fixtracks/widgets/tracks.py index 5f19500..9d8f3e2 100644 --- a/fixtracks/widgets/tracks.py +++ b/fixtracks/widgets/tracks.py @@ -428,10 +428,11 @@ class FixTracks(QWidget): if len(df) == 0: return keypoint = self._keypointcombo.currentIndex() - coords = np.stack(df["keypoints"].values).astype(np.float32)[:, keypoint,:] + coords = np.stack(df["keypoints"].values).astype(np.float32)[:, :,:] tracks = df["track"].values.astype(int) ids = df.index.values.astype(int) - self._detectionView.addDetections(coords, tracks, ids, self._brushes[name]) + frames = df["frame"].values.astype(int) + self._detectionView.addDetections(coords, tracks, ids, frames, keypoint, self._brushes[name]) max_frames = self._data.max("frame") start = self._timeline.rangeStart @@ -571,9 +572,11 @@ class FixTracks(QWidget): logging.debug("Tracks: Detections selected") tracks = np.zeros(len(detections)) ids = np.zeros_like(tracks) + coordinates = np.zeros((len(detections), )) for i, d in enumerate(detections): tracks[i] = d.data(0) ids[i] = d.data(1) + self._data.setUserSelection(ids) self._controls_widget.setSelectedTracks(tracks) self.update()