Skip to content

Commit 3d7462a

Browse files
author
arch
committed
add threads
1 parent a5d329c commit 3d7462a

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

funscript_editor/algorithms/funscriptgenerator.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from funscript_editor.algorithms.scenedetect import SceneDetectFromFile, SceneContentDetector, SceneThresholdDetector
3333

3434
import funscript_editor.algorithms.signalprocessing as sp
35+
import multiprocessing as mp
3536
import numpy as np
3637

3738
@dataclass
@@ -76,7 +77,7 @@ class FunscriptGeneratorParameter:
7677
max_threshold: float = float(HYPERPARAMETER['max_threshold'])
7778

7879

79-
def merge_score(item: list, number_of_trackers: int) -> list:
80+
def merge_score(item: list, number_of_trackers: int, return_queue: mp.Queue = None) -> list:
8081
""" Merge score for given number of trackers
8182
8283
Note:
@@ -87,19 +88,26 @@ def merge_score(item: list, number_of_trackers: int) -> list:
8788
Args:
8889
item (list): score for each tracker
8990
number_of_trackers (int): number of used tracker (pairs)
91+
return_queue (mp.Queue, optional): return queue to return values via queue
9092
9193
Returns:
9294
list: merged score
9395
"""
9496
if number_of_trackers == 1:
95-
return item[0] if len(item) > 0 else []
97+
if return_queue is not None:
98+
return_queue.put(item[0] if len(item) > 0 else [])
99+
else:
100+
return item[0] if len(item) > 0 else []
96101
else:
97102
max_frame_number = max([len(item[i]) for i in range(number_of_trackers)])
98103
arr = np.ma.empty((max_frame_number,number_of_trackers))
99104
arr.mask = True
100105
for tracker_number in range(number_of_trackers):
101106
arr[:item[tracker_number].shape[0],tracker_number] = item[tracker_number]
102-
return list(filter(None.__ne__, arr.mean(axis=1).tolist()))
107+
if return_queue is not None:
108+
return_queue.put(list(filter(None.__ne__, arr.mean(axis=1).tolist())))
109+
else:
110+
return list(filter(None.__ne__, arr.mean(axis=1).tolist()))
103111

104112

105113
class FunscriptGeneratorThread(QtCore.QThread):
@@ -416,20 +424,20 @@ def calculate_score(self, bboxes) -> None:
416424
score['y'][tracker_number] = np.array([max([x[1] for x in bboxes['Woman'][tracker_number]]) - w[1] for w in bboxes['Woman'][tracker_number]])
417425

418426
self.logger.info("Merge Scores")
419-
"""
420-
pool, queue = {}, {}
421-
for metric in score.keys():
422-
queue[metric] = mp.Queue()
423-
pool[metric] = threading.Thread(target=merge_score, args=(score[metric], self.params.number_of_trackers, queue[metric], ))
424-
pool[metric].start()
425427

426-
for metric in score.keys():
427-
pool[metric].join()
428-
score[metric] = queue[metric].get()
429-
"""
428+
if True:
429+
pool, queue = {}, {}
430+
for metric in score.keys():
431+
queue[metric] = mp.Queue()
432+
pool[metric] = threading.Thread(target=merge_score, args=(score[metric], self.params.number_of_trackers, queue[metric], ))
433+
pool[metric].start()
430434

431-
for metric in score.keys():
432-
score[metric] = merge_score(score[metric], self.params.number_of_trackers)
435+
for metric in score.keys():
436+
pool[metric].join()
437+
score[metric] = queue[metric].get()
438+
else:
439+
for metric in score.keys():
440+
score[metric] = merge_score(score[metric], self.params.number_of_trackers)
433441

434442
self.logger.info("Scale Score to 0 - 100")
435443
for metric in score.keys():

0 commit comments

Comments
 (0)