Skip to content

Commit 2ff3fb4

Browse files
author
arch
committed
more post processing parameter
1 parent 6a4a105 commit 2ff3fb4

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

funscript_editor/algorithms/signal.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -541,18 +541,18 @@ def categorize_points(self, signal: list, points: list) -> dict:
541541
points (list): list with all point indexes
542542
543543
Returns:
544-
dict: dictionary with grouped points { 'min': [], 'max': [] }
544+
dict: dictionary with grouped points { 'upper': [], 'lower': [] }
545545
"""
546546
avg = Signal.moving_average(signal, w=round(self.fps * self.params.avg_sec_for_local_min_max_extraction))
547547
smothed_signal = Signal.moving_average(signal, w=self.params.local_min_max_filter_len)
548548

549-
grouped_points = {'min': [], 'max': []}
549+
grouped_points = {'upper': [], 'lower': []}
550550
for idx in points:
551551
if -1 < idx < min((len(smothed_signal), len(avg))):
552552
if smothed_signal[idx] > avg[idx]:
553-
grouped_points['max'].append(idx)
553+
grouped_points['upper'].append(idx)
554554
else:
555-
grouped_points['min'].append(idx)
555+
grouped_points['lower'].append(idx)
556556

557557
return grouped_points
558558

funscript_editor/ui/postprocessing.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
simplify_coords_vw_idx,
55
)
66

7+
import copy
78
import numpy as np
89
import pyqtgraph as pg
910

1011
from funscript_editor.algorithms.signal import Signal
1112
from funscript_editor.ui.cut_tracking_result import Slider
1213

14+
class QHLine(QtWidgets.QFrame):
15+
def __init__(self):
16+
super(QHLine, self).__init__()
17+
self.setFrameShape(QtWidgets.QFrame.HLine)
18+
self.setFrameShadow(QtWidgets.QFrame.Sunken)
1319

1420
class PostprocessingWidget(QtWidgets.QWidget):
1521
def __init__(self, metric, raw_score, video_info, parent=None):
@@ -97,14 +103,27 @@ def add_custom_tab(self):
97103
self.tabs_content[tab_name]["widgets"]["evenly_intermediate"] = QtWidgets.QCheckBox("Evenly Intermediate")
98104
self.tabs_content[tab_name]["widgets"]["evenly_intermediate"].stateChanged.connect(self.update_plot)
99105

100-
self.tabs_content[tab_name]["widgets"]["runs"] = Slider("Additionl Points Algorthm Runs", 8, 2)
106+
self.tabs_content[tab_name]["widgets"]["runs"] = Slider("Max additional Points", 8, 2)
101107
self.tabs_content[tab_name]["widgets"]["runs"].slider.valueChanged.connect(self.update_plot)
102108

109+
self.tabs_content[tab_name]["widgets"]["lower"] = Slider("Lower Offset", 100, 0)
110+
self.tabs_content[tab_name]["widgets"]["lower"].slider.valueChanged.connect(self.update_plot)
111+
112+
self.tabs_content[tab_name]["widgets"]["upper"] = Slider("Upper Offset", 100, 0)
113+
self.tabs_content[tab_name]["widgets"]["upper"].slider.valueChanged.connect(self.update_plot)
114+
115+
self.tabs_content[tab_name]["main"].layout.addWidget(QtWidgets.QLabel("Points:"))
103116
self.tabs_content[tab_name]["main"].layout.addWidget(self.tabs_content[tab_name]["widgets"]["points"])
117+
self.tabs_content[tab_name]["main"].layout.addWidget(QHLine())
118+
self.tabs_content[tab_name]["main"].layout.addWidget(QtWidgets.QLabel("Additinal Points:"))
104119
self.tabs_content[tab_name]["main"].layout.addWidget(self.tabs_content[tab_name]["widgets"]["high_second_derivate"])
105120
self.tabs_content[tab_name]["main"].layout.addWidget(self.tabs_content[tab_name]["widgets"]["distance_minimization"])
106121
self.tabs_content[tab_name]["main"].layout.addWidget(self.tabs_content[tab_name]["widgets"]["evenly_intermediate"])
107122
self.tabs_content[tab_name]["main"].layout.addWidget(self.tabs_content[tab_name]["widgets"]["runs"])
123+
self.tabs_content[tab_name]["main"].layout.addWidget(QHLine())
124+
self.tabs_content[tab_name]["main"].layout.addWidget(QtWidgets.QLabel("Offset:"))
125+
self.tabs_content[tab_name]["main"].layout.addWidget(self.tabs_content[tab_name]["widgets"]["lower"])
126+
self.tabs_content[tab_name]["main"].layout.addWidget(self.tabs_content[tab_name]["widgets"]["upper"])
108127

109128
self.tabs_content[tab_name]["main"].setLayout(self.tabs_content[tab_name]["main"].layout)
110129
self.tabs.addTab(self.tabs_content[tab_name]["main"], tab_name)
@@ -138,6 +157,8 @@ def update_plot(self):
138157
if current_tab_name == "Custom":
139158
base_algo = self.tabs_content[current_tab_name]["widgets"]["points"].currentText()
140159
runs = self.tabs_content[current_tab_name]["widgets"]["runs"].x
160+
offset_lower = self.tabs_content[current_tab_name]["widgets"]["lower"].x
161+
offset_upper = self.tabs_content[current_tab_name]["widgets"]["upper"].x
141162

142163
base_point_algorithm = Signal.BasePointAlgorithm.local_min_max
143164
if base_algo == 'Direction Changed':
@@ -160,6 +181,15 @@ def update_plot(self):
160181
additional_points_algorithms,
161182
additional_points_repetitions = runs
162183
)
163-
self.result_val = [val for idx,val in enumerate(self.raw_score) if idx in self.result_idx]
184+
categorized = signal.categorize_points(self.raw_score, self.result_idx)
185+
self.result_val = []
186+
score = copy.deepcopy(self.raw_score)
187+
score_min, score_max = min(score), max(score)
188+
for idx in categorized['upper']:
189+
score[idx] = max(( score_min, min((score_max, score[idx] + offset_upper)) ))
190+
for idx in categorized['lower']:
191+
score[idx] = max(( score_min, min((score_max, score[idx] - offset_lower)) ))
192+
193+
self.result_val = [val for idx,val in enumerate(score) if idx in self.result_idx]
164194
self.curve_result.setData(self.result_idx, self.result_val)
165195
return

0 commit comments

Comments
 (0)