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 0244913..072c5b3 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 8c44c45..7e6f8e7 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 6f0d487..ae35562 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 4afc91d..b7d5d19 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']