|
3 | 3 | from os import error, read |
4 | 4 | import cv2 |
5 | 5 | import copy |
| 6 | +import sys |
6 | 7 | import time |
7 | 8 | import math |
8 | 9 | import funscript_editor.utils.logging as logging |
@@ -188,15 +189,17 @@ def get_dick_pos(self, max_distance_frame_num: int) -> dict: |
188 | 189 | max_distance_frame = FFmpegStream.get_projection(max_distance_frame, self.projection_config) |
189 | 190 | frame_h, frame_w = max_distance_frame.shape[:2] |
190 | 191 | center_line = self.ui.line_selector(max_distance_frame, "draw line on center of dick") |
| 192 | + print('center_line', center_line) |
191 | 193 |
|
192 | 194 | # last idx: 0 = x, 1 = y |
193 | 195 | dick_pos = { 'w': center_line[1], 'm': center_line[0] } \ |
194 | | - if center_line[0][0] > center_line[1][0] \ |
| 196 | + if center_line[0][1] > center_line[1][1] \ |
195 | 197 | else { 'w': center_line[0], 'm': center_line[1] } |
| 198 | + print('dick_pos', dick_pos) |
196 | 199 |
|
197 | 200 | # TODO: dividor is an hyperparameter |
198 | | - dx = (dick_pos['m'][0] - dick_pos['w'][0]) / 8 |
199 | | - dy = (dick_pos['m'][1] - dick_pos['w'][1]) / 8 |
| 201 | + dx = (dick_pos['m'][0] - dick_pos['w'][0]) / 3 |
| 202 | + dy = (dick_pos['m'][1] - dick_pos['w'][1]) / 3 |
200 | 203 | return { |
201 | 204 | 'w': (self.clamp(dick_pos['w'][0] - dx, 0, frame_w-1), self.clamp(dick_pos['w'][1] - dy, 0, frame_h-1)), |
202 | 205 | 'm': (self.clamp(dick_pos['m'][0] + dx, 0, frame_w-1), self.clamp(dick_pos['m'][1] + dy, 0, frame_h-1)) |
@@ -239,11 +242,30 @@ def calculate_score(self, bboxes) -> None: |
239 | 242 | dick_pos = self.get_dick_pos(max_distance_frame_num) |
240 | 243 | dick_pos['idx'] = max_distance_frame_num - self.params.start_frame |
241 | 244 |
|
| 245 | + if False: |
| 246 | + # debugging |
| 247 | + frame = FFmpegStream.get_frame(self.params.video_path, max_distance_frame_num) |
| 248 | + frame = FFmpegStream.get_projection(frame, self.projection_config) |
| 249 | + cv2.circle( frame, (int(dick_pos['w'][0]), int(dick_pos['w'][1])), 4, (0,255,0), 2) |
| 250 | + cv2.circle( frame, (int(dick_pos['m'][0]), int(dick_pos['m'][1])), 4, (255,0,0), 2) |
| 251 | + cv2.imshow('debug', frame) |
| 252 | + cv2.waitKey(10000) |
| 253 | + |
242 | 254 | roll_woman_offset = (dick_pos['w'][0] - woman_center[dick_pos['idx']][0], dick_pos['w'][1] - woman_center[dick_pos['idx']][1]) |
243 | | - roll_men_offset = (dick_pos['m'][0] - woman_center[dick_pos['idx']][0], dick_pos['m'][1] - woman_center[dick_pos['idx']][1]) |
| 255 | + roll_men_offset = (dick_pos['m'][0] - men_center[dick_pos['idx']][0], dick_pos['m'][1] - men_center[dick_pos['idx']][1]) |
244 | 256 | self.logger.info('use roll offset w = %s, m = %s', str(roll_woman_offset), str(roll_men_offset)) |
245 | 257 |
|
246 | 258 | for i in range( min(( len(men_center), len(woman_center) )) ): |
| 259 | + |
| 260 | + if False: |
| 261 | + #debugging |
| 262 | + frame = FFmpegStream.get_frame(self.params.video_path, i + self.params.start_frame) |
| 263 | + frame = FFmpegStream.get_projection(frame, self.projection_config) |
| 264 | + cv2.circle( frame, (int(woman_center[i][0] + roll_woman_offset[0]), int(woman_center[i][1] + roll_woman_offset[1])), 4, (255,0,255), 2) |
| 265 | + cv2.circle( frame, (int(men_center[i][0] + roll_men_offset[0]), int(men_center[i][1] + roll_men_offset[1])), 4, (255,0,255), 2) |
| 266 | + cv2.imshow('debug', frame) |
| 267 | + cv2.waitKey(1) |
| 268 | + |
247 | 269 | x = woman_center[i][0] + roll_woman_offset[0] - (men_center[i][0] + roll_men_offset[0]) |
248 | 270 | y = men_center[i][1] + roll_men_offset[1] - (woman_center[i][1] + roll_woman_offset[1]) |
249 | 271 | if x >= 0 and y >= 0: |
|
0 commit comments