From 0feecfd9d77f99da07f7ea63609be6cfd7c05ee6 Mon Sep 17 00:00:00 2001 From: henryruhs Date: Mon, 16 Jun 2025 11:21:48 +0200 Subject: [PATCH] Finalize choices and types --- facefusion/benchmarker.py | 25 ++++++++----------------- facefusion/choices.py | 15 ++++++++++++++- facefusion/program.py | 5 ++--- facefusion/types.py | 22 ++++++++++++---------- 4 files changed, 36 insertions(+), 31 deletions(-) diff --git a/facefusion/benchmarker.py b/facefusion/benchmarker.py index 02449135..072c5b3e 100644 --- a/facefusion/benchmarker.py +++ b/facefusion/benchmarker.py @@ -3,26 +3,16 @@ import os import statistics import tempfile from time import perf_counter -from typing import Dict, Generator, List +from typing import Generator, List +import facefusion.choices from facefusion import core, state_manager from facefusion.cli_helper import render_table from facefusion.download import conditional_download, resolve_download_url from facefusion.filesystem import get_file_extension -from facefusion.types import BenchmarkSet +from facefusion.types import BenchmarkCycleSet from facefusion.vision import count_video_frame_total, detect_video_fps, detect_video_resolution, pack_resolution -BENCHMARKS : Dict[str, str] =\ -{ - '240p': '.assets/examples/target-240p.mp4', - '360p': '.assets/examples/target-360p.mp4', - '540p': '.assets/examples/target-540p.mp4', - '720p': '.assets/examples/target-720p.mp4', - '1080p': '.assets/examples/target-1080p.mp4', - '1440p': '.assets/examples/target-1440p.mp4', - '2160p': '.assets/examples/target-2160p.mp4' -} - def pre_check() -> bool: conditional_download('.assets/examples', @@ -40,7 +30,7 @@ def pre_check() -> bool: return True -def run() -> Generator[List[BenchmarkSet], None, None]: +def run() -> Generator[List[BenchmarkCycleSet], None, None]: benchmark_resolutions = state_manager.get_item('benchmark_resolutions') benchmark_cycles = state_manager.get_item('benchmark_cycles') @@ -52,7 +42,7 @@ def run() -> Generator[List[BenchmarkSet], None, None]: state_manager.set_item('video_memory_strategy', 'tolerant') benchmarks = [] - target_paths = [ BENCHMARKS.get(benchmark_resolution) for benchmark_resolution in benchmark_resolutions if benchmark_resolution in BENCHMARKS ] + target_paths = [facefusion.choices.benchmark_set.get(benchmark_resolution) for benchmark_resolution in benchmark_resolutions if benchmark_resolution in facefusion.choices.benchmark_set] for target_path in target_paths: state_manager.set_item('target_path', target_path) @@ -61,7 +51,7 @@ def run() -> Generator[List[BenchmarkSet], None, None]: yield benchmarks -def cycle(benchmark_cycles : int) -> BenchmarkSet: +def cycle(benchmark_cycles : int) -> BenchmarkCycleSet: process_times = [] video_frame_total = count_video_frame_total(state_manager.get_item('target_path')) output_video_resolution = detect_video_resolution(state_manager.get_item('target_path')) @@ -112,4 +102,5 @@ def render() -> None: for benchmark in run(): benchmarks = benchmark - render_table(headers, benchmarks) + contents = [ list(benchmark_set.values()) for benchmark_set in benchmarks ] + render_table(headers, contents) diff --git a/facefusion/choices.py b/facefusion/choices.py index 8c44c45d..7e6f8e74 100755 --- a/facefusion/choices.py +++ b/facefusion/choices.py @@ -2,7 +2,7 @@ import logging from typing import List, Sequence from facefusion.common_helper import create_float_range, create_int_range -from facefusion.types import Angle, AudioEncoder, AudioFormat, AudioTypeSet, DownloadProvider, DownloadProviderSet, DownloadScope, EncoderSet, ExecutionProvider, ExecutionProviderSet, FaceDetectorModel, FaceDetectorSet, FaceLandmarkerModel, FaceMaskArea, FaceMaskAreaSet, FaceMaskRegion, FaceMaskRegionSet, FaceMaskType, FaceOccluderModel, FaceParserModel, FaceSelectorMode, FaceSelectorOrder, Gender, ImageFormat, ImageTypeSet, JobStatus, LogLevel, LogLevelSet, Race, Score, TempFrameFormat, UiWorkflow, VideoEncoder, VideoFormat, VideoMemoryStrategy, VideoPreset, VideoTypeSet, WebcamMode +from facefusion.types import Angle, AudioEncoder, AudioFormat, AudioTypeSet, BenchmarkResolution, BenchmarkSet, DownloadProvider, DownloadProviderSet, DownloadScope, EncoderSet, ExecutionProvider, ExecutionProviderSet, FaceDetectorModel, FaceDetectorSet, FaceLandmarkerModel, FaceMaskArea, FaceMaskAreaSet, FaceMaskRegion, FaceMaskRegionSet, FaceMaskType, FaceOccluderModel, FaceParserModel, FaceSelectorMode, FaceSelectorOrder, Gender, ImageFormat, ImageTypeSet, JobStatus, LogLevel, LogLevelSet, Race, Score, TempFrameFormat, UiWorkflow, VideoEncoder, VideoFormat, VideoMemoryStrategy, VideoPreset, VideoTypeSet, WebcamMode face_detector_set : FaceDetectorSet =\ { @@ -85,6 +85,18 @@ output_video_presets : List[VideoPreset] = [ 'ultrafast', 'superfast', 'veryfast image_template_sizes : List[float] = [ 0.25, 0.5, 0.75, 1, 1.5, 2, 2.5, 3, 3.5, 4 ] video_template_sizes : List[int] = [ 240, 360, 480, 540, 720, 1080, 1440, 2160, 4320 ] +benchmark_set : BenchmarkSet =\ +{ + '240p': '.assets/examples/target-240p.mp4', + '360p': '.assets/examples/target-360p.mp4', + '540p': '.assets/examples/target-540p.mp4', + '720p': '.assets/examples/target-720p.mp4', + '1080p': '.assets/examples/target-1080p.mp4', + '1440p': '.assets/examples/target-1440p.mp4', + '2160p': '.assets/examples/target-2160p.mp4' +} +benchmark_resolutions : List[BenchmarkResolution] = list(benchmark_set.keys()) + webcam_modes : List[WebcamMode] = [ 'inline', 'udp', 'v4l2' ] webcam_resolutions : List[str] = [ '320x240', '640x480', '800x600', '1024x768', '1280x720', '1280x960', '1920x1080', '2560x1440', '3840x2160' ] @@ -136,6 +148,7 @@ log_levels : List[LogLevel] = list(log_level_set.keys()) ui_workflows : List[UiWorkflow] = [ 'instant_runner', 'job_runner', 'job_manager' ] job_statuses : List[JobStatus] = [ 'drafted', 'queued', 'completed', 'failed' ] +benchmark_cycles_range : Sequence[int] = create_int_range(1, 10, 1) execution_thread_count_range : Sequence[int] = create_int_range(1, 32, 1) execution_queue_count_range : Sequence[int] = create_int_range(1, 4, 1) system_memory_limit_range : Sequence[int] = create_int_range(0, 128, 4) diff --git a/facefusion/program.py b/facefusion/program.py index 6f0d487a..ae35562c 100755 --- a/facefusion/program.py +++ b/facefusion/program.py @@ -215,11 +215,10 @@ def create_download_providers_program() -> ArgumentParser: def create_benchmark_program() -> ArgumentParser: - from facefusion.benchmarker import BENCHMARKS program = ArgumentParser(add_help = False) group_benchmark = program.add_argument_group('benchmark') - group_benchmark.add_argument('--benchmark-resolutions', help = wording.get('help.benchmark_resolutions'), default = config.get_str_list('benchmark', 'benchmark_resolutions', '240p'), choices = list(BENCHMARKS.keys()), nargs = '+') - group_benchmark.add_argument('--benchmark-cycles', help = wording.get('help.benchmark_cycles'), type = int, default = config.get_int_value('benchmark', 'benchmark_cycles', '5'), choices = range(1, 11)) + group_benchmark.add_argument('--benchmark-resolutions', help = wording.get('help.benchmark_resolutions'), default = config.get_str_list('benchmark', 'benchmark_resolutions', get_first(facefusion.choices.benchmark_resolutions)), choices = facefusion.choices.benchmark_resolutions, nargs = '+') + group_benchmark.add_argument('--benchmark-cycles', help = wording.get('help.benchmark_cycles'), type = int, default = config.get_int_value('benchmark', 'benchmark_cycles', '5'), choices = facefusion.choices.benchmark_cycles_range) return program diff --git a/facefusion/types.py b/facefusion/types.py index 4afc91d7..b7d5d19a 100755 --- a/facefusion/types.py +++ b/facefusion/types.py @@ -100,16 +100,6 @@ LogLevelSet : TypeAlias = Dict[LogLevel, int] TableHeaders = List[str] TableContents = List[List[Any]] -BenchmarkSet = TypedDict('BenchmarkSet', -{ - 'target_path' : str, - 'benchmark_cycles' : int, - 'average_run' : float, - 'fastest_run' : float, - 'slowest_run' : float, - 'relative_fps' : float -}) - FaceDetectorModel = Literal['many', 'retinaface', 'scrfd', 'yolo_face'] FaceLandmarkerModel = Literal['many', '2dfan4', 'peppa_wutz'] FaceDetectorSet : TypeAlias = Dict[FaceDetectorModel, List[str]] @@ -140,6 +130,18 @@ EncoderSet = TypedDict('EncoderSet', }) VideoPreset = Literal['ultrafast', 'superfast', 'veryfast', 'faster', 'fast', 'medium', 'slow', 'slower', 'veryslow'] +BenchmarkResolution = Literal['240p', '360p', '540p', '720p', '1080p', '1440p', '2160p'] +BenchmarkSet : TypeAlias = Dict[BenchmarkResolution, str] +BenchmarkCycleSet = TypedDict('BenchmarkCycleSet', +{ + 'target_path' : str, + 'benchmark_cycles' : int, + 'average_run' : float, + 'fastest_run' : float, + 'slowest_run' : float, + 'relative_fps' : float +}) + WebcamMode = Literal['inline', 'udp', 'v4l2'] StreamMode = Literal['udp', 'v4l2']