From 6214f23318a11dca9fc7a0bf9cbf4cfa21396b72 Mon Sep 17 00:00:00 2001 From: Breakthrough Date: Fri, 21 Feb 2025 23:27:56 -0500 Subject: [PATCH] [detectors] Add downscale performance hit #401 --- benchmark/__main__.py | 2 +- scenedetect/detectors/hash_detector.py | 4 ++++ scenedetect/scene_detector.py | 5 +++++ scenedetect/scene_manager.py | 4 +++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/benchmark/__main__.py b/benchmark/__main__.py index b1a90d67..1e0f714d 100644 --- a/benchmark/__main__.py +++ b/benchmark/__main__.py @@ -1,6 +1,6 @@ import argparse -import time import os +import time from tqdm import tqdm diff --git a/scenedetect/detectors/hash_detector.py b/scenedetect/detectors/hash_detector.py index 2ca37afa..bf8b638b 100644 --- a/scenedetect/detectors/hash_detector.py +++ b/scenedetect/detectors/hash_detector.py @@ -179,3 +179,7 @@ def hash_frame(frame_img, hash_size, factor) -> numpy.ndarray: hash_img = dct_low_freq > med return hash_img + + @property + def downscale_performance_hint(self) -> bool: + return False diff --git a/scenedetect/scene_detector.py b/scenedetect/scene_detector.py index 014bf31a..2750e5f9 100644 --- a/scenedetect/scene_detector.py +++ b/scenedetect/scene_detector.py @@ -131,6 +131,11 @@ def event_buffer_length(self) -> int: """ return 0 + @property + def downscale_performance_hint(self) -> bool: + """Indicates if the detector's performance is improved by downscaling.""" + return True + # TODO(v0.7): Remove this early, no point in keeping it around. class SparseSceneDetector(SceneDetector): diff --git a/scenedetect/scene_manager.py b/scenedetect/scene_manager.py index 9af8a661..eadeb0f8 100644 --- a/scenedetect/scene_manager.py +++ b/scenedetect/scene_manager.py @@ -1283,7 +1283,9 @@ def detect_scenes( 1 + min(max_y, frame_height) - min_y, ) # Calculate downscale factor and log effective resolution. - if self.auto_downscale: + if self.auto_downscale and all( + detector.downscale_performance_hint for detector in self._detector_list + ): downscale_factor = compute_downscale_factor(max(effective_frame_size)) else: downscale_factor = self.downscale