[classifier] improvements, but needs more ideas
This commit is contained in:
parent
2bba098b77
commit
47b1988539
@ -16,6 +16,7 @@ class WorkerSignals(QObject):
|
||||
error = Signal(str)
|
||||
running = Signal(bool)
|
||||
progress = Signal(int, int, int)
|
||||
currentframe = Signal(int)
|
||||
stopped = Signal(int)
|
||||
|
||||
class ConsitencyDataLoader(QRunnable):
|
||||
@ -95,12 +96,15 @@ class ConsistencyWorker(QRunnable):
|
||||
def assign_by_orientation(f, o):
|
||||
t1_step = f - last_frame[0]
|
||||
t2_step = f - last_frame[1]
|
||||
orientationchange = np.unwrap((last_angle - o)/np.array([t1_step, t2_step]))
|
||||
most_likely_track = np.argmin(orientationchange) + 1
|
||||
orientationchange = (last_angle - o)
|
||||
orientationchange[orientationchange > 180] = 360 - orientationchange[orientationchange > 180]
|
||||
orientationchange /= np.array([t1_step, t2_step])
|
||||
# orientationchange = np.abs(np.unwrap((last_angle - o)/np.array([t1_step, t2_step])))
|
||||
most_likely_track = np.argmin(np.abs(orientationchange)) + 1
|
||||
return most_likely_track, orientationchange
|
||||
|
||||
def assign_by_length(f, o):
|
||||
length_difference = (last_length - o)
|
||||
|
||||
def assign_by_length(o):
|
||||
length_difference = np.abs((last_length - o))
|
||||
most_likely_track = np.argmin(length_difference) + 1
|
||||
return most_likely_track, length_difference
|
||||
|
||||
@ -130,8 +134,8 @@ class ConsistencyWorker(QRunnable):
|
||||
steps = int((maxframes - startframe) // 200)
|
||||
|
||||
for f in np.unique(self.frames[self.frames > startframe]):
|
||||
print(f)
|
||||
processed += 1
|
||||
self.signals.currentframe.emit(f)
|
||||
if self._stoprequest:
|
||||
break
|
||||
indices = np.where(self.frames == f)[0]
|
||||
@ -146,7 +150,6 @@ class ConsistencyWorker(QRunnable):
|
||||
lengths = np.zeros_like(distances)
|
||||
|
||||
for i, (idx, p) in enumerate(zip(indices, pp)):
|
||||
print(i)
|
||||
if self.userlabeled[idx]:
|
||||
print("user")
|
||||
userlabeled[i] = True
|
||||
@ -157,17 +160,13 @@ class ConsistencyWorker(QRunnable):
|
||||
continue
|
||||
dist_assignments[i], distances[i, :] = assign_by_distance(f, p)
|
||||
angle_assignments[i], orientations[i,:] = assign_by_orientation(f, self.orientations[idx])
|
||||
length_assignments[i], lengths[i, :] = assign_by_length(f, self.lengths[idx])
|
||||
length_assignments[i], lengths[i, :] = assign_by_length(self.lengths[idx])
|
||||
if np.any(userlabeled):
|
||||
continue
|
||||
# check (re) assignment, update, and proceed
|
||||
if not needs_checking(originaltracks, dist_assignments):
|
||||
logging.info("frame %i: Decision based on distance")
|
||||
do_assignment(f, indices, dist_assignments)
|
||||
else:
|
||||
print(distances)
|
||||
print(orientations)
|
||||
print(lengths)
|
||||
if not (np.all(length_assignments == 1) or np.all(length_assignments == 2)): # if I find a solution by body length
|
||||
logging.debug("frame %i: Decision based on body length", f)
|
||||
do_assignment(f, indices, length_assignments)
|
||||
@ -180,7 +179,6 @@ class ConsistencyWorker(QRunnable):
|
||||
self.tracks[idx] = -1
|
||||
errors += 1
|
||||
if self._stoponerror:
|
||||
embed()
|
||||
break
|
||||
|
||||
if steps > 0 and f % steps == 0:
|
||||
@ -398,6 +396,7 @@ class ConsistencyClassifier(QWidget):
|
||||
self._processed_frames = 0
|
||||
|
||||
self._errorlabel = QLabel()
|
||||
self._framelabel = QLabel()
|
||||
self._errorlabel.setStyleSheet("QLabel { color : red; }")
|
||||
self._assignedlabel = QLabel()
|
||||
self._maxframeslabel = QLabel()
|
||||
@ -439,17 +438,19 @@ class ConsistencyClassifier(QWidget):
|
||||
lyt.addWidget(QLabel("of"), 1, 1, 1, 1)
|
||||
lyt.addWidget(self._maxframeslabel, 1, 2, 1, 1)
|
||||
lyt.addWidget(self._stoponerror, 2, 0, 1, 3)
|
||||
lyt.addWidget(QLabel("assigned"), 3, 0)
|
||||
lyt.addWidget(self._assignedlabel, 3, 1)
|
||||
lyt.addWidget(QLabel("errors/issues"), 4, 0)
|
||||
lyt.addWidget(self._errorlabel, 4, 1)
|
||||
|
||||
lyt.addWidget(self._startbtn, 5, 0)
|
||||
lyt.addWidget(self._stopbtn, 5, 1)
|
||||
lyt.addWidget(self._proceedbtn, 5, 2)
|
||||
lyt.addWidget(self._apply_btn, 6, 0, 1, 2)
|
||||
lyt.addWidget(self._refreshbtn, 6, 2, 1, 1)
|
||||
lyt.addWidget(self._progressbar, 7, 0, 1, 3)
|
||||
lyt.addWidget(QLabel("Current frame"), 3,0)
|
||||
lyt.addWidget(self._framelabel, 3,1)
|
||||
lyt.addWidget(QLabel("assigned"), 4, 0)
|
||||
lyt.addWidget(self._assignedlabel, 4, 1)
|
||||
lyt.addWidget(QLabel("errors/issues"), 5, 0)
|
||||
lyt.addWidget(self._errorlabel, 5, 1)
|
||||
|
||||
lyt.addWidget(self._startbtn, 6, 0)
|
||||
lyt.addWidget(self._stopbtn, 6, 1)
|
||||
lyt.addWidget(self._proceedbtn, 6, 2)
|
||||
lyt.addWidget(self._apply_btn, 7, 0, 1, 2)
|
||||
lyt.addWidget(self._refreshbtn, 7, 2, 1, 1)
|
||||
lyt.addWidget(self._progressbar, 8, 0, 1, 3)
|
||||
self.setLayout(lyt)
|
||||
|
||||
def setData(self, data:TrackingData):
|
||||
@ -514,8 +515,12 @@ class ConsistencyClassifier(QWidget):
|
||||
self._startframe_spinner.value(), self._stoponerror.isChecked())
|
||||
self._worker.signals.stopped.connect(self.worker_stopped)
|
||||
self._worker.signals.progress.connect(self.worker_progress)
|
||||
self._worker.signals.currentframe.connect(self.worker_frame)
|
||||
self.threadpool.start(self._worker)
|
||||
|
||||
def worker_frame(self, frame):
|
||||
self._framelabel.setText(str(frame))
|
||||
|
||||
def proceed(self):
|
||||
self.start()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user