Skip to content

Commit 82aba17

Browse files
committed
[benchmarks] Add ability to run benchmarks from root of repo
This allows using the local `scenedetect` module rather than requiring it being installed. This is required to run the benchmarks with local changes during development. Update instructions to run benchmarks accordingly.
1 parent f85e7cd commit 82aba17

File tree

7 files changed

+35
-35
lines changed

7 files changed

+35
-35
lines changed

benchmark/BBC/.gitkeep

Whitespace-only changes.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ rm AutoShot.tar.gz
2424
```
2525

2626
## Evaluation
27-
To evaluate PySceneDetect on a dataset, run the following command:
27+
To evaluate PySceneDetect on a dataset, run the following command from the root of the repo:
2828
```
29-
python benchmark.py -d <dataset_name> --detector <detector_name>
29+
python -m benchmark -d <dataset_name> --detector <detector_name>
3030
```
3131
For example, to evaluate ContentDetector on the BBC dataset:
3232
```
33-
python evaluate.py -d BBC --detector detect-content
33+
python -m benchmark -d BBC --detector detect-content
3434
```
3535

3636
### Result
Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import argparse
22
import time
3+
import os
34

4-
from bbc_dataset import BBCDataset
5-
from autoshot_dataset import AutoShotDataset
6-
7-
from evaluator import Evaluator
85
from tqdm import tqdm
96

7+
from benchmark.autoshot_dataset import AutoShotDataset
8+
from benchmark.bbc_dataset import BBCDataset
9+
from benchmark.evaluator import Evaluator
1010
from scenedetect import (
1111
AdaptiveDetector,
1212
ContentDetector,
@@ -18,22 +18,27 @@
1818

1919

2020
def _make_detector(detector_name: str):
21-
detector_map = {
22-
"detect-adaptive": AdaptiveDetector(),
23-
"detect-content": ContentDetector(),
24-
"detect-hash": HashDetector(),
25-
"detect-hist": HistogramDetector(),
26-
"detect-threshold": ThresholdDetector(),
27-
}
28-
return detector_map[detector_name]
21+
if detector_name == "detect-adaptive":
22+
return AdaptiveDetector()
23+
if detector_name == "detect-content":
24+
return ContentDetector()
25+
if detector_name == "detect-hash":
26+
return HashDetector()
27+
if detector_name == "detect-hist":
28+
return HistogramDetector()
29+
if detector_name == "detect-threshold":
30+
return ThresholdDetector()
31+
raise RuntimeError(f"Unknown detector: {detector_name}")
32+
2933

34+
_DATASETS = {
35+
"BBC": BBCDataset("benchmark/BBC"),
36+
"AutoShot": AutoShotDataset("benchmark/AutoShot"),
37+
}
3038

31-
def _make_dataset(dataset_name: str):
32-
dataset_map = {
33-
"BBC": BBCDataset("BBC"),
34-
"AutoShot": AutoShotDataset("AutoShot"),
35-
}
36-
return dataset_map[dataset_name]
39+
_RESULT_PRINT_FORMAT = (
40+
"Recall: {recall:.2f}, Precision: {precision:.2f}, F1: {f1:.2f} Elapsed time: {elapsed:.2f}\n"
41+
)
3742

3843

3944
def _detect_scenes(detector_type: str, dataset):
@@ -43,34 +48,28 @@ def _detect_scenes(detector_type: str, dataset):
4348
detector = _make_detector(detector_type)
4449
pred_scene_list = detect(video_file, detector)
4550
elapsed = time.time() - start
51+
filename = os.path.basename(video_file)
4652
scenes = {
4753
scene_file: {
48-
"video_file": video_file,
54+
"video_file": filename,
4955
"elapsed": elapsed,
5056
"pred_scenes": [scene[1].frame_num for scene in pred_scene_list],
5157
}
5258
}
5359
result = Evaluator().evaluate_performance(scenes)
54-
print(f"{video_file} results:")
55-
print(
56-
"Recall: {:.2f}, Precision: {:.2f}, F1: {:.2f} Elapsed time: {:.2f}\n".format(
57-
result["recall"], result["precision"], result["f1"], result["elapsed"]
58-
)
59-
)
60+
print(f"\n{filename} results:")
61+
print(_RESULT_PRINT_FORMAT.format(**result) + "\n")
6062
pred_scenes.update(scenes)
6163

6264
return pred_scenes
6365

6466

6567
def main(args):
66-
pred_scenes = _detect_scenes(detector_type=args.detector, dataset=_make_dataset(args.dataset))
68+
print(f"Evaluating {args.detector} on dataset {args.dataset}...\n")
69+
pred_scenes = _detect_scenes(detector_type=args.detector, dataset=_DATASETS[args.dataset])
6770
result = Evaluator().evaluate_performance(pred_scenes)
68-
print("Overall Results:")
69-
print(
70-
"Detector: {} Recall: {:.2f}, Precision: {:.2f}, F1: {:.2f} Elapsed time: {:.2f}".format(
71-
args.detector, result["recall"], result["precision"], result["f1"], result["elapsed"]
72-
)
73-
)
71+
print(f"\nOverall Results for {args.detector} on dataset {args.dataset}:")
72+
print(_RESULT_PRINT_FORMAT.format(**result))
7473

7574

7675
if __name__ == "__main__":
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import glob
22
import os
33

4+
45
class AutoShotDataset:
56
"""
67
The AutoShot Dataset (test splits) proposed by Zhu et al. in AutoShot: A Short Video Dataset and State-of-the-Art Shot Boundary Detection

0 commit comments

Comments
 (0)