Finalize choices and types

This commit is contained in:
henryruhs
2025-06-16 11:21:48 +02:00
parent 26d0a5b9bb
commit 0feecfd9d7
4 changed files with 36 additions and 31 deletions

View File

@@ -3,26 +3,16 @@ import os
import statistics import statistics
import tempfile import tempfile
from time import perf_counter 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 import core, state_manager
from facefusion.cli_helper import render_table from facefusion.cli_helper import render_table
from facefusion.download import conditional_download, resolve_download_url from facefusion.download import conditional_download, resolve_download_url
from facefusion.filesystem import get_file_extension 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 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: def pre_check() -> bool:
conditional_download('.assets/examples', conditional_download('.assets/examples',
@@ -40,7 +30,7 @@ def pre_check() -> bool:
return True 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_resolutions = state_manager.get_item('benchmark_resolutions')
benchmark_cycles = state_manager.get_item('benchmark_cycles') 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') state_manager.set_item('video_memory_strategy', 'tolerant')
benchmarks = [] 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: for target_path in target_paths:
state_manager.set_item('target_path', target_path) state_manager.set_item('target_path', target_path)
@@ -61,7 +51,7 @@ def run() -> Generator[List[BenchmarkSet], None, None]:
yield benchmarks yield benchmarks
def cycle(benchmark_cycles : int) -> BenchmarkSet: def cycle(benchmark_cycles : int) -> BenchmarkCycleSet:
process_times = [] process_times = []
video_frame_total = count_video_frame_total(state_manager.get_item('target_path')) 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')) output_video_resolution = detect_video_resolution(state_manager.get_item('target_path'))
@@ -112,4 +102,5 @@ def render() -> None:
for benchmark in run(): for benchmark in run():
benchmarks = benchmark benchmarks = benchmark
render_table(headers, benchmarks) contents = [ list(benchmark_set.values()) for benchmark_set in benchmarks ]
render_table(headers, contents)

View File

@@ -2,7 +2,7 @@ import logging
from typing import List, Sequence from typing import List, Sequence
from facefusion.common_helper import create_float_range, create_int_range 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 =\ 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 ] 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 ] 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_modes : List[WebcamMode] = [ 'inline', 'udp', 'v4l2' ]
webcam_resolutions : List[str] = [ '320x240', '640x480', '800x600', '1024x768', '1280x720', '1280x960', '1920x1080', '2560x1440', '3840x2160' ] 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' ] ui_workflows : List[UiWorkflow] = [ 'instant_runner', 'job_runner', 'job_manager' ]
job_statuses : List[JobStatus] = [ 'drafted', 'queued', 'completed', 'failed' ] 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_thread_count_range : Sequence[int] = create_int_range(1, 32, 1)
execution_queue_count_range : Sequence[int] = create_int_range(1, 4, 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) system_memory_limit_range : Sequence[int] = create_int_range(0, 128, 4)

View File

@@ -215,11 +215,10 @@ def create_download_providers_program() -> ArgumentParser:
def create_benchmark_program() -> ArgumentParser: def create_benchmark_program() -> ArgumentParser:
from facefusion.benchmarker import BENCHMARKS
program = ArgumentParser(add_help = False) program = ArgumentParser(add_help = False)
group_benchmark = program.add_argument_group('benchmark') 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-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 = range(1, 11)) 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 return program

View File

@@ -100,16 +100,6 @@ LogLevelSet : TypeAlias = Dict[LogLevel, int]
TableHeaders = List[str] TableHeaders = List[str]
TableContents = List[List[Any]] 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'] FaceDetectorModel = Literal['many', 'retinaface', 'scrfd', 'yolo_face']
FaceLandmarkerModel = Literal['many', '2dfan4', 'peppa_wutz'] FaceLandmarkerModel = Literal['many', '2dfan4', 'peppa_wutz']
FaceDetectorSet : TypeAlias = Dict[FaceDetectorModel, List[str]] FaceDetectorSet : TypeAlias = Dict[FaceDetectorModel, List[str]]
@@ -140,6 +130,18 @@ EncoderSet = TypedDict('EncoderSet',
}) })
VideoPreset = Literal['ultrafast', 'superfast', 'veryfast', 'faster', 'fast', 'medium', 'slow', 'slower', 'veryslow'] 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'] WebcamMode = Literal['inline', 'udp', 'v4l2']
StreamMode = Literal['udp', 'v4l2'] StreamMode = Literal['udp', 'v4l2']