from typing import List, Optional import gradio import onnxruntime import DeepFakeAI.globals from DeepFakeAI import wording from DeepFakeAI.face_analyser import clear_face_analyser from DeepFakeAI.processors.frame.core import clear_frame_processors_modules from DeepFakeAI.uis.typing import Update from DeepFakeAI.utilities import encode_execution_providers, decode_execution_providers EXECUTION_PROVIDERS_CHECKBOX_GROUP : Optional[gradio.CheckboxGroup] = None EXECUTION_THREAD_COUNT_SLIDER : Optional[gradio.Slider] = None EXECUTION_QUEUE_COUNT_SLIDER : Optional[gradio.Slider] = None def render() -> None: global EXECUTION_PROVIDERS_CHECKBOX_GROUP global EXECUTION_THREAD_COUNT_SLIDER global EXECUTION_QUEUE_COUNT_SLIDER with gradio.Box(): EXECUTION_PROVIDERS_CHECKBOX_GROUP = gradio.CheckboxGroup( label = wording.get('execution_providers_checkbox_group_label'), choices = encode_execution_providers(onnxruntime.get_available_providers()), value = encode_execution_providers(DeepFakeAI.globals.execution_providers) ) EXECUTION_THREAD_COUNT_SLIDER = gradio.Slider( label = wording.get('execution_thread_count_slider_label'), value = DeepFakeAI.globals.execution_thread_count, step = 1, minimum = 1, maximum = 128 ) EXECUTION_QUEUE_COUNT_SLIDER = gradio.Slider( label = wording.get('execution_queue_count_slider_label'), value = DeepFakeAI.globals.execution_queue_count, step = 1, minimum = 1, maximum = 16 ) def listen() -> None: EXECUTION_PROVIDERS_CHECKBOX_GROUP.change(update_execution_providers, inputs = EXECUTION_PROVIDERS_CHECKBOX_GROUP, outputs = EXECUTION_PROVIDERS_CHECKBOX_GROUP) EXECUTION_THREAD_COUNT_SLIDER.change(update_execution_thread_count, inputs = EXECUTION_THREAD_COUNT_SLIDER, outputs = EXECUTION_THREAD_COUNT_SLIDER) EXECUTION_QUEUE_COUNT_SLIDER.change(update_execution_queue_count, inputs = EXECUTION_QUEUE_COUNT_SLIDER, outputs = EXECUTION_QUEUE_COUNT_SLIDER) def update_execution_providers(execution_providers : List[str]) -> Update: clear_face_analyser() clear_frame_processors_modules() DeepFakeAI.globals.execution_providers = decode_execution_providers(execution_providers) return gradio.update(value = execution_providers) def update_execution_thread_count(execution_thread_count : int = 1) -> Update: DeepFakeAI.globals.execution_thread_count = execution_thread_count return gradio.update(value = execution_thread_count) def update_execution_queue_count(execution_queue_count : int = 1) -> Update: DeepFakeAI.globals.execution_queue_count = execution_queue_count return gradio.update(value = execution_queue_count)