Spaces:
Build error
Build error
| import hashlib | |
| import os | |
| import statistics | |
| import tempfile | |
| from time import perf_counter | |
| from typing import Any, Dict, Generator, List, Optional | |
| import gradio | |
| from facefusion import state_manager, wording | |
| from facefusion.core import conditional_process | |
| from facefusion.filesystem import is_video | |
| from facefusion.memory import limit_system_memory | |
| from facefusion.uis.core import get_ui_component | |
| from facefusion.vision import count_video_frame_total, detect_video_fps, detect_video_resolution, pack_resolution | |
| BENCHMARK_BENCHMARKS_DATAFRAME : Optional[gradio.Dataframe] = None | |
| BENCHMARK_START_BUTTON : Optional[gradio.Button] = None | |
| BENCHMARK_CLEAR_BUTTON : Optional[gradio.Button] = None | |
| 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 render() -> None: | |
| global BENCHMARK_BENCHMARKS_DATAFRAME | |
| global BENCHMARK_START_BUTTON | |
| global BENCHMARK_CLEAR_BUTTON | |
| BENCHMARK_BENCHMARKS_DATAFRAME = gradio.Dataframe( | |
| headers = | |
| [ | |
| 'target_path', | |
| 'benchmark_cycles', | |
| 'average_run', | |
| 'fastest_run', | |
| 'slowest_run', | |
| 'relative_fps' | |
| ], | |
| datatype = | |
| [ | |
| 'str', | |
| 'number', | |
| 'number', | |
| 'number', | |
| 'number', | |
| 'number' | |
| ], | |
| show_label = False | |
| ) | |
| BENCHMARK_START_BUTTON = gradio.Button( | |
| value = wording.get('uis.start_button'), | |
| variant = 'primary', | |
| size = 'sm' | |
| ) | |
| def listen() -> None: | |
| benchmark_runs_checkbox_group = get_ui_component('benchmark_runs_checkbox_group') | |
| benchmark_cycles_slider = get_ui_component('benchmark_cycles_slider') | |
| if benchmark_runs_checkbox_group and benchmark_cycles_slider: | |
| BENCHMARK_START_BUTTON.click(start, inputs = [ benchmark_runs_checkbox_group, benchmark_cycles_slider ], outputs = BENCHMARK_BENCHMARKS_DATAFRAME) | |
| def suggest_output_path(target_path : str) -> Optional[str]: | |
| if is_video(target_path): | |
| _, target_extension = os.path.splitext(target_path) | |
| return os.path.join(tempfile.gettempdir(), hashlib.sha1().hexdigest()[:8] + target_extension) | |
| return None | |
| def start(benchmark_runs : List[str], benchmark_cycles : int) -> Generator[List[Any], None, None]: | |
| state_manager.init_item('source_paths', [ '.assets/examples/source.jpg', '.assets/examples/source.mp3' ]) | |
| state_manager.init_item('face_landmarker_score', 0) | |
| state_manager.init_item('temp_frame_format', 'bmp') | |
| state_manager.init_item('output_video_preset', 'ultrafast') | |
| state_manager.sync_item('execution_providers') | |
| state_manager.sync_item('execution_thread_count') | |
| state_manager.sync_item('execution_queue_count') | |
| state_manager.sync_item('system_memory_limit') | |
| benchmark_results = [] | |
| target_paths = [ BENCHMARKS[benchmark_run] for benchmark_run in benchmark_runs if benchmark_run in BENCHMARKS ] | |
| if target_paths: | |
| pre_process() | |
| for target_path in target_paths: | |
| state_manager.init_item('target_path', target_path) | |
| state_manager.init_item('output_path', suggest_output_path(state_manager.get_item('target_path'))) | |
| benchmark_results.append(benchmark(benchmark_cycles)) | |
| yield benchmark_results | |
| def pre_process() -> None: | |
| system_memory_limit = state_manager.get_item('system_memory_limit') | |
| if system_memory_limit and system_memory_limit > 0: | |
| limit_system_memory(system_memory_limit) | |
| def benchmark(benchmark_cycles : int) -> List[Any]: | |
| 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')) | |
| state_manager.init_item('output_video_resolution', pack_resolution(output_video_resolution)) | |
| state_manager.init_item('output_video_fps', detect_video_fps(state_manager.get_item('target_path'))) | |
| conditional_process() | |
| for index in range(benchmark_cycles): | |
| start_time = perf_counter() | |
| conditional_process() | |
| end_time = perf_counter() | |
| process_times.append(end_time - start_time) | |
| average_run = round(statistics.mean(process_times), 2) | |
| fastest_run = round(min(process_times), 2) | |
| slowest_run = round(max(process_times), 2) | |
| relative_fps = round(video_frame_total * benchmark_cycles / sum(process_times), 2) | |
| return\ | |
| [ | |
| state_manager.get_item('target_path'), | |
| benchmark_cycles, | |
| average_run, | |
| fastest_run, | |
| slowest_run, | |
| relative_fps | |
| ] | |