1- import time
21import argparse
2+ import time
3+
34from bbc_dataset import BBCDataset
45from evaluator import Evaluator
5-
66from tqdm import tqdm
7- from scenedetect import detect
8- from scenedetect import AdaptiveDetector , ContentDetector , HashDetector , HistogramDetector , ThresholdDetector
97
10- def _load_detector (detector_name : str ):
8+ from scenedetect import (
9+ AdaptiveDetector ,
10+ ContentDetector ,
11+ HashDetector ,
12+ HistogramDetector ,
13+ ThresholdDetector ,
14+ detect ,
15+ )
16+
17+
18+ def make_detector (detector_name : str ):
1119 detector_map = {
12- ' detect-adaptive' : AdaptiveDetector (),
13- ' detect-content' : ContentDetector (),
14- ' detect-hash' : HashDetector (),
15- ' detect-hist' : HistogramDetector (),
16- ' detect-threshold' : ThresholdDetector (),
20+ " detect-adaptive" : AdaptiveDetector (),
21+ " detect-content" : ContentDetector (),
22+ " detect-hash" : HashDetector (),
23+ " detect-hist" : HistogramDetector (),
24+ " detect-threshold" : ThresholdDetector (),
1725 }
1826 return detector_map [detector_name ]
1927
20- def _detect_scenes (detector , dataset ):
28+
29+ def _detect_scenes (detector_type : str , dataset ):
2130 pred_scenes = {}
2231 for video_file , scene_file in tqdm (dataset ):
2332 start = time .time ()
33+ detector = make_detector (detector_type )
2434 pred_scene_list = detect (video_file , detector )
2535 elapsed = time .time () - start
26-
27- pred_scenes [scene_file ] = {
28- 'video_file' : video_file ,
29- 'elapsed' : elapsed ,
30- 'pred_scenes' : [scene [1 ].frame_num for scene in pred_scene_list ]
36+ scenes = {
37+ scene_file : {
38+ "video_file" : video_file ,
39+ "elapsed" : elapsed ,
40+ "pred_scenes" : [scene [1 ].frame_num for scene in pred_scene_list ],
41+ }
3142 }
43+ result = Evaluator ().evaluate_performance (scenes )
44+ print (f"{ video_file } results:" )
45+ print (
46+ "Recall: {:.2f}, Precision: {:.2f}, F1: {:.2f} Elapsed time: {:.2f}\n " .format (
47+ result ["recall" ], result ["precision" ], result ["f1" ], result ["elapsed" ]
48+ )
49+ )
50+ pred_scenes .update (scenes )
3251
3352 return pred_scenes
3453
35- def main (args ):
36- dataset = BBCDataset ('BBC' )
37- detector = _load_detector (args .detector )
38- pred_scenes = _detect_scenes (detector , dataset )
39- evaluator = Evaluator ()
40- result = evaluator .evaluate_performance (pred_scenes )
4154
42- print ('Detector: {} Recall: {:.2f}, Precision: {:.2f}, F1: {:.2f} Elapsed time: {:.2f}'
43- .format (args .detector , result ['recall' ], result ['precision' ], result ['f1' ], result ['elapsed' ]))
55+ def main (args ):
56+ pred_scenes = _detect_scenes (detector_type = args .detector , dataset = BBCDataset ("BBC" ))
57+ result = Evaluator ().evaluate_performance (pred_scenes )
58+ print ("Overall Results:" )
59+ print (
60+ "Detector: {} Recall: {:.2f}, Precision: {:.2f}, F1: {:.2f} Elapsed time: {:.2f}" .format (
61+ args .detector , result ["recall" ], result ["precision" ], result ["f1" ], result ["elapsed" ]
62+ )
63+ )
4464
4565
46- if __name__ == '__main__' :
47- parser = argparse .ArgumentParser (description = 'Benchmarking PySceneDetect performance.' )
48- parser .add_argument ('--detector' , type = str , choices = ['detect-adaptive' , 'detect-content' , 'detect-hash' , 'detect-hist' , 'detect-threshold' ],
49- default = 'detect-content' , help = 'Detector name. Implemented detectors are listed: https://www.scenedetect.com/docs/latest/cli.html' )
66+ if __name__ == "__main__" :
67+ parser = argparse .ArgumentParser (description = "Benchmarking PySceneDetect performance." )
68+ parser .add_argument (
69+ "--detector" ,
70+ type = str ,
71+ choices = [
72+ "detect-adaptive" ,
73+ "detect-content" ,
74+ "detect-hash" ,
75+ "detect-hist" ,
76+ "detect-threshold" ,
77+ ],
78+ default = "detect-content" ,
79+ help = "Detector name. Implemented detectors are listed: https://www.scenedetect.com/docs/latest/cli.html" ,
80+ )
5081 args = parser .parse_args ()
51- main (args )
82+ main (args )
0 commit comments