[tracks] disentanglement
This commit is contained in:
parent
461f3aadfe
commit
f1a4f4dc84
@ -22,6 +22,7 @@ class DetectionSceneSignals(QObject):
|
||||
|
||||
class DetectionTimelineSignals(QObject):
|
||||
windowMoved = Signal()
|
||||
manualMove = Signal()
|
||||
|
||||
class DetectionSignals(QObject):
|
||||
hover = Signal((int, QPointF))
|
||||
|
@ -57,7 +57,7 @@ class TrackingData(QObject):
|
||||
return self._selection
|
||||
|
||||
def setSelectionRange(self, col, start, stop):
|
||||
logging.debug("Trackingdata: set selection range based on column %s to %.2f - %.2f", col, start, stop)
|
||||
logging.info("Trackingdata: set selection range based on column %s to %.2f - %.2f", col, start, stop)
|
||||
col_indices = np.where((self[col] >= start) & (self[col] < stop))[0]
|
||||
self._selection = self._indices[col_indices]
|
||||
if len(col_indices) < 1:
|
||||
@ -77,10 +77,9 @@ class TrackingData(QObject):
|
||||
ids : array-like
|
||||
An array-like object containing the IDs to be set as user selections.
|
||||
"""
|
||||
print(ids)
|
||||
logging.debug("TrackingData.setSelection: %i number of ids", len(ids))
|
||||
self._selection = self._find(ids)
|
||||
self._selected_ids = ids
|
||||
print(self._selection, self._selected_ids)
|
||||
|
||||
def setTrack(self, track_id:int, setUserLabeled:bool=True)-> None:
|
||||
"""Assign a new track_id to the user-selected detections
|
||||
@ -92,7 +91,7 @@ class TrackingData(QObject):
|
||||
setUserLabeled : bool
|
||||
Should the "userlabeled" state of the detections be set to True? Otherwise they will be left untouched.
|
||||
"""
|
||||
print(self._selection)
|
||||
logging.info("TrackingData: set track id %i for selection, set user-labeled status %s", track_id, str(setUserLabeled))
|
||||
self["track"][self._selection] = track_id
|
||||
if setUserLabeled:
|
||||
self.setUserLabeledStatus(True, True)
|
||||
@ -114,7 +113,7 @@ class TrackingData(QObject):
|
||||
else:
|
||||
self["userlabeled"][:] = new_status
|
||||
|
||||
def revertAssignmentStatus(self):
|
||||
def revertUserLabeledStatus(self):
|
||||
logging.debug("TrackingData:Un-setting assignment status of all data!")
|
||||
self["userlabeled"][:] = False
|
||||
|
||||
|
@ -119,6 +119,11 @@ class ConsistencyWorker(QRunnable):
|
||||
last_angle[assignments[i]-1] = self.orientations[idx]
|
||||
last_length[assignments[i]-1] += ((self.lengths[idx] - last_length[assignments[i]-1])/processed)
|
||||
|
||||
# self.userlabeled
|
||||
|
||||
|
||||
|
||||
|
||||
last_pos = [self.positions[(self.tracks == 1) & (self.frames <= self._startframe)][-1],
|
||||
self.positions[(self.tracks == 2) & (self.frames <= self._startframe)][-1]]
|
||||
last_frame = [self.frames[(self.tracks == 1) & (self.frames <= self._startframe)][-1],
|
||||
@ -614,7 +619,9 @@ def main():
|
||||
data = TrackingData()
|
||||
data.setData(as_dict(df))
|
||||
coords = data.coordinates()
|
||||
|
||||
cogs = data.centerOfGravity()
|
||||
userlabeled = data["userlabeled"]
|
||||
embed()
|
||||
app = QApplication([])
|
||||
window = QWidget()
|
||||
window.setMinimumSize(200, 200)
|
||||
@ -624,7 +631,7 @@ def main():
|
||||
# else:
|
||||
w = ClassifierWidget()
|
||||
w.setData(data)
|
||||
w.size_classifier.setCoordinates(coords)
|
||||
# w.size_classifier.setCoordinates(coords)
|
||||
|
||||
layout = QVBoxLayout()
|
||||
layout.addWidget(w)
|
||||
|
@ -30,7 +30,7 @@ class Window(QGraphicsRectItem):
|
||||
def setWindowX(self, newx):
|
||||
logging.debug("timeline.window: set position to %.3f", newx)
|
||||
self.setX(newx)
|
||||
self.signals.windowMoved.emit()
|
||||
# self.signals.windowMoved.emit()
|
||||
|
||||
def setWindowWidth(self, newwidth):
|
||||
logging.debug("timeline.window: update window width to %f", newwidth)
|
||||
@ -38,7 +38,7 @@ class Window(QGraphicsRectItem):
|
||||
r = self.rect()
|
||||
r.setWidth(newwidth)
|
||||
self.setRect(r)
|
||||
self.signals.windowMoved.emit()
|
||||
# self.signals.windowMoved.emit()
|
||||
|
||||
def setWindow(self, newx:float, newwidth:float):
|
||||
"""
|
||||
@ -58,7 +58,7 @@ class Window(QGraphicsRectItem):
|
||||
r = self.rect()
|
||||
self.setRect(newx, r.y(), self._width, r.height())
|
||||
self.update()
|
||||
self.signals.windowMoved.emit()
|
||||
# self.signals.windowMoved.emit()
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
super().mouseMoveEvent(event)
|
||||
@ -77,7 +77,7 @@ class Window(QGraphicsRectItem):
|
||||
if r.y() != self._y:
|
||||
self.setY(self._y)
|
||||
super().mouseReleaseEvent(event)
|
||||
self.signals.windowMoved.emit()
|
||||
self.signals.manualMove.emit()
|
||||
|
||||
def hoverEnterEvent(self, event):
|
||||
super().hoverEnterEvent(event)
|
||||
@ -116,7 +116,7 @@ class DetectionTimeline(QWidget):
|
||||
font.setBold(True)
|
||||
|
||||
self._window = Window(0, 0, 100, 60, window_pen, transparent_brush)
|
||||
self._window.signals.windowMoved.connect(self.on_windowMoved)
|
||||
self._window.signals.manualMove.connect(self.on_windowMoved)
|
||||
|
||||
self._scene = QGraphicsScene(QRectF(0, 0, self._total_width, 85.))
|
||||
self._scene.setBackgroundBrush(self._bg_brush)
|
||||
|
@ -31,6 +31,7 @@ class FixTracks(QWidget):
|
||||
self._currentWindowPos = 0 # in frames
|
||||
self._currentWindowWidth = 0 # in frames
|
||||
self._maxframes = 0
|
||||
self._manualmove = False
|
||||
self._data = None
|
||||
|
||||
self._detectionView = DetectionView()
|
||||
@ -161,9 +162,10 @@ class FixTracks(QWidget):
|
||||
def update(self):
|
||||
start_frame = self._currentWindowPos
|
||||
stop_frame = start_frame + self._currentWindowWidth
|
||||
self._timeline.setWindow(start_frame / self._maxframes,
|
||||
self._currentWindowWidth/self._maxframes)
|
||||
logging.debug("Tracks:update: Updating View for detection range %i, %i frames", start_frame, stop_frame)
|
||||
self._data.setSelectionRange("frame", start_frame, stop_frame)
|
||||
|
||||
self._controls_widget.setWindow(start_frame, stop_frame)
|
||||
kp = self._keypointcombo.currentText().lower()
|
||||
kpi = -1 if "center" in kp else int(kp)
|
||||
@ -208,11 +210,11 @@ class FixTracks(QWidget):
|
||||
self._saveBtn.setEnabled(True)
|
||||
self._currentWindowPos = 0
|
||||
self._currentWindowWidth = self._windowspinner.value()
|
||||
self._maxframes = self._data.max("frame")
|
||||
self._maxframes = np.max(self._data["frame"])
|
||||
self.populateKeypointCombo(self._data.numKeypoints())
|
||||
self._timeline.setData(self._data)
|
||||
self._timeline.setWindow(self._currentWindowPos / self._maxframes,
|
||||
self._currentWindowWidth / self._maxframes)
|
||||
# self._timeline.setWindow(self._currentWindowPos / self._maxframes,
|
||||
# self._currentWindowWidth / self._maxframes)
|
||||
self._detectionView.setData(self._data)
|
||||
self._classifier.setData(self._data)
|
||||
self.update()
|
||||
@ -276,7 +278,7 @@ class FixTracks(QWidget):
|
||||
|
||||
def on_revertUserFlags(self):
|
||||
logging.debug("Tracks:revert ALL UserFlags and track assignments")
|
||||
self._data.revertAssignmentStatus()
|
||||
self._data.revertUserLabeledStatus()
|
||||
self._data.revertTrackAssignments()
|
||||
self._timeline.update()
|
||||
self.update()
|
||||
@ -289,8 +291,10 @@ class FixTracks(QWidget):
|
||||
|
||||
def on_windowChanged(self):
|
||||
logging.debug("Tracks:Timeline reports window change ")
|
||||
self._currentWindowPos = np.round(self._timeline.rangeStart * self._maxframes)
|
||||
self.update()
|
||||
if not self._manualmove:
|
||||
self._currentWindowPos = np.round(self._timeline.rangeStart * self._maxframes)
|
||||
self.update()
|
||||
self._manualmove = False
|
||||
|
||||
def on_windowSizeChanged(self, value):
|
||||
"""Reacts on the user window-width selection. Selection is done in the unit of frames.
|
||||
@ -306,8 +310,7 @@ class FixTracks(QWidget):
|
||||
self._controls_widget.setSelectedTracks(None)
|
||||
|
||||
def on_detectionsSelected(self, detections):
|
||||
logging.debug("Tracks: Detections selected")
|
||||
print(detections)
|
||||
logging.debug("Tracks: %i Detections selected", len(detections))
|
||||
tracks = np.zeros(len(detections), dtype=int)
|
||||
ids = np.zeros_like(tracks)
|
||||
frames = np.zeros_like(tracks)
|
||||
@ -325,12 +328,11 @@ class FixTracks(QWidget):
|
||||
self._controls_widget.setSelectedTracks(tracks)
|
||||
self._skeleton.clear()
|
||||
self._skeleton.addSkeletons(coordinates, ids, frames, tracks, QBrush(QColor(10, 255, 65, 255)))
|
||||
self.update()
|
||||
|
||||
def moveWindow(self, stepsize):
|
||||
step = np.round(stepsize * (self._currentWindowWidth))
|
||||
new_start_frame = self._currentWindowPos + step
|
||||
self._timeline.setWindowPos(new_start_frame / self._maxframes)
|
||||
logging.info("Tracks.moveWindow: move window with stepsize %.2f", stepsize)
|
||||
self._manualmove = True
|
||||
new_start_frame = self._currentWindowPos + np.round(stepsize * self._currentWindowWidth)
|
||||
self._currentWindowPos = new_start_frame
|
||||
self._controls_widget.setSelectedTracks(None)
|
||||
self.update()
|
||||
|
Loading…
Reference in New Issue
Block a user