Spaces:
Running
Running
from typing import Any, Optional, List | |
import time | |
import tempfile | |
import statistics | |
import gradio | |
import DeepFakeAI.globals | |
from DeepFakeAI import wording | |
from DeepFakeAI.capturer import get_video_frame_total | |
from DeepFakeAI.core import conditional_process | |
from DeepFakeAI.uis.typing import Update | |
from DeepFakeAI.utilities import normalize_output_path, clear_temp | |
BENCHMARK_RESULT_DATAFRAME : Optional[gradio.Dataframe] = None | |
BENCHMARK_CYCLES_SLIDER : Optional[gradio.Button] = None | |
BENCHMARK_START_BUTTON : Optional[gradio.Button] = None | |
BENCHMARK_CLEAR_BUTTON : Optional[gradio.Button] = None | |
def render() -> None: | |
global BENCHMARK_RESULT_DATAFRAME | |
global BENCHMARK_CYCLES_SLIDER | |
global BENCHMARK_START_BUTTON | |
global BENCHMARK_CLEAR_BUTTON | |
with gradio.Box(): | |
BENCHMARK_RESULT_DATAFRAME = gradio.Dataframe( | |
label = wording.get('benchmark_result_dataframe_label'), | |
headers = | |
[ | |
'target_path', | |
'benchmark_cycles', | |
'average_run', | |
'fastest_run', | |
'slowest_run', | |
'relative_fps' | |
], | |
col_count = (6, 'fixed'), | |
row_count = (7, 'fixed'), | |
datatype = | |
[ | |
'str', | |
'number', | |
'number', | |
'number', | |
'number', | |
'number' | |
] | |
) | |
BENCHMARK_CYCLES_SLIDER = gradio.Slider( | |
label = wording.get('benchmark_cycles_slider_label'), | |
minimum = 1, | |
step = 1, | |
value = 3, | |
maximum = 10 | |
) | |
with gradio.Row(): | |
BENCHMARK_START_BUTTON = gradio.Button(wording.get('start_button_label')) | |
BENCHMARK_CLEAR_BUTTON = gradio.Button(wording.get('clear_button_label')) | |
def listen() -> None: | |
BENCHMARK_START_BUTTON.click(update, inputs = BENCHMARK_CYCLES_SLIDER, outputs = BENCHMARK_RESULT_DATAFRAME) | |
BENCHMARK_CLEAR_BUTTON.click(clear, outputs = BENCHMARK_RESULT_DATAFRAME) | |
def update(benchmark_cycles : int) -> Update: | |
DeepFakeAI.globals.source_path = '.assets/examples/source.jpg' | |
target_paths =\ | |
[ | |
'.assets/examples/target-240p.mp4', | |
'.assets/examples/target-360p.mp4', | |
'.assets/examples/target-540p.mp4', | |
'.assets/examples/target-720p.mp4', | |
'.assets/examples/target-1080p.mp4', | |
'.assets/examples/target-1440p.mp4', | |
'.assets/examples/target-2160p.mp4' | |
] | |
value = [ benchmark(target_path, benchmark_cycles) for target_path in target_paths ] | |
return gradio.update(value = value) | |
def benchmark(target_path : str, benchmark_cycles : int) -> List[Any]: | |
process_times = [] | |
total_fps = 0.0 | |
for i in range(benchmark_cycles + 1): | |
DeepFakeAI.globals.target_path = target_path | |
DeepFakeAI.globals.output_path = normalize_output_path(DeepFakeAI.globals.source_path, DeepFakeAI.globals.target_path, tempfile.gettempdir()) | |
video_frame_total = get_video_frame_total(DeepFakeAI.globals.target_path) | |
start_time = time.perf_counter() | |
conditional_process() | |
end_time = time.perf_counter() | |
process_time = end_time - start_time | |
fps = video_frame_total / process_time | |
if i > 0: | |
process_times.append(process_time) | |
total_fps += fps | |
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(total_fps / benchmark_cycles, 2) | |
return\ | |
[ | |
DeepFakeAI.globals.target_path, | |
benchmark_cycles, | |
average_run, | |
fastest_run, | |
slowest_run, | |
relative_fps | |
] | |
def clear() -> Update: | |
if DeepFakeAI.globals.target_path: | |
clear_temp(DeepFakeAI.globals.target_path) | |
return gradio.update(value = None) | |