3232from funscript_editor .algorithms .scenedetect import SceneDetectFromFile , SceneContentDetector , SceneThresholdDetector
3333
3434import funscript_editor .algorithms .signalprocessing as sp
35+ import multiprocessing as mp
3536import 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
105113class 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