From c9fe66e8ef31847121f666adb82e1b0fa73e6c0a Mon Sep 17 00:00:00 2001 From: henryruhs Date: Mon, 7 Aug 2023 10:43:36 +0200 Subject: [PATCH] Split render() and listen() part2 --- roop/face_analyser.py | 2 +- roop/predictor.py | 2 +- roop/uis/__components__/output.py | 28 +++++++++++---- roop/uis/__components__/preview.py | 6 ++-- roop/uis/__components__/reference.py | 22 ++++++------ roop/uis/__components__/settings.py | 52 +++++++++++++++++++--------- roop/uis/__components__/source.py | 21 +++++++---- roop/uis/__components__/target.py | 27 ++++++++++----- roop/uis/__layouts__/default.py | 4 +++ 9 files changed, 110 insertions(+), 54 deletions(-) diff --git a/roop/face_analyser.py b/roop/face_analyser.py index d37bf97..9a1b6f4 100644 --- a/roop/face_analyser.py +++ b/roop/face_analyser.py @@ -54,5 +54,5 @@ def find_similar_face(frame: Frame, reference_face: Face) -> Optional[Face]: return None -def count_faces(frame: Frame) -> int: +def get_faces_total(frame: Frame) -> int: return len(get_many_faces(frame)) diff --git a/roop/predictor.py b/roop/predictor.py index 7647ded..b59fee9 100644 --- a/roop/predictor.py +++ b/roop/predictor.py @@ -8,7 +8,7 @@ from roop.typing import Frame PREDICTOR = None THREAD_LOCK = threading.Lock() -MAX_PROBABILITY = 2 +MAX_PROBABILITY = 0.85 def get_predictor() -> Model: diff --git a/roop/uis/__components__/output.py b/roop/uis/__components__/output.py index 17e5fca..14d7286 100644 --- a/roop/uis/__components__/output.py +++ b/roop/uis/__components__/output.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, Tuple +from typing import Any, Dict, Tuple, Optional import gradio import roop.globals @@ -6,15 +6,29 @@ from roop.core import start from roop.utilities import has_image_extension, has_video_extension, normalize_output_path +START_BUTTON: Optional[gradio.Button] = None +CLEAR_BUTTON: Optional[gradio.Button] = None +OUTPUT_IMAGE: Optional[gradio.Image] = None +OUTPUT_VIDEO: Optional[gradio.Video] = None + + def render() -> None: + global START_BUTTON + global CLEAR_BUTTON + global OUTPUT_IMAGE + global OUTPUT_VIDEO + with gradio.Column(): with gradio.Row(): - start_button = gradio.Button('Start') - clear_button = gradio.Button('Clear') - output_image = gradio.Image(label='output_image', visible=False) - output_video = gradio.Video(label='output_video', visible=False) - start_button.click(update, outputs=[output_image, output_video]) - clear_button.click(clear, outputs=[output_image, output_video]) + START_BUTTON = gradio.Button('Start') + CLEAR_BUTTON = gradio.Button('Clear') + OUTPUT_IMAGE = gradio.Image(label='output_image', visible=False) + OUTPUT_VIDEO = gradio.Video(label='output_video', visible=False) + + +def listen() -> None: + START_BUTTON.click(update, outputs=[OUTPUT_IMAGE, OUTPUT_VIDEO]) + CLEAR_BUTTON.click(clear, outputs=[OUTPUT_IMAGE, OUTPUT_VIDEO]) def update() -> Tuple[Dict[str, Any], Dict[str, Any]]: diff --git a/roop/uis/__components__/preview.py b/roop/uis/__components__/preview.py index a9e3818..1baf52b 100644 --- a/roop/uis/__components__/preview.py +++ b/roop/uis/__components__/preview.py @@ -1,5 +1,5 @@ from time import sleep -from typing import Any, Dict, Tuple, List +from typing import Any, Dict, Tuple, List, Optional import cv2 import gradio @@ -15,8 +15,8 @@ from roop.uis import core as ui from roop.uis.typing import ComponentName from roop.utilities import is_video, is_image -PREVIEW_IMAGE = None -PREVIEW_SLIDER = None +PREVIEW_IMAGE: Optional[gradio.Image] = None +PREVIEW_SLIDER: Optional[gradio.Slider] = None def render() -> None: diff --git a/roop/uis/__components__/reference.py b/roop/uis/__components__/reference.py index f667c7b..d880d8c 100644 --- a/roop/uis/__components__/reference.py +++ b/roop/uis/__components__/reference.py @@ -1,4 +1,4 @@ -from typing import Dict, Any, List +from typing import Dict, Any, List, Optional from time import sleep import cv2 @@ -6,14 +6,14 @@ import gradio import roop.globals from roop.capturer import get_video_frame -from roop.face_analyser import count_faces +from roop.face_analyser import get_faces_total from roop.face_reference import clear_face_reference from roop.uis import core as ui from roop.uis.typing import ComponentName from roop.utilities import is_image, is_video -REFERENCE_FACE_POSITION_SLIDER = None -SIMILAR_FACE_DISTANCE_SLIDER = None +REFERENCE_FACE_POSITION_SLIDER: Optional[gradio.Slider] = None +SIMILAR_FACE_DISTANCE_SLIDER: Optional[gradio.Slider] = None def render() -> None: @@ -29,10 +29,10 @@ def render() -> None: } if is_image(roop.globals.target_path): target_frame = cv2.imread(roop.globals.target_path) - reference_face_position_slider_args['maximum'] = count_faces(target_frame) + reference_face_position_slider_args['maximum'] = get_faces_total(target_frame) if is_video(roop.globals.target_path): target_frame = get_video_frame(roop.globals.target_path, roop.globals.reference_frame_number) - reference_face_position_slider_args['maximum'] = count_faces(target_frame) + reference_face_position_slider_args['maximum'] = get_faces_total(target_frame) REFERENCE_FACE_POSITION_SLIDER = gradio.Slider(**reference_face_position_slider_args) SIMILAR_FACE_DISTANCE_SLIDER = gradio.Slider( label='similar_face_distance', @@ -54,12 +54,12 @@ def listen() -> None: component = ui.get_component(component_name) if component: component.change(update_face_reference_position, inputs=REFERENCE_FACE_POSITION_SLIDER, outputs=REFERENCE_FACE_POSITION_SLIDER) - REFERENCE_FACE_POSITION_SLIDER.change(self_update_face_reference_position, inputs=REFERENCE_FACE_POSITION_SLIDER) + REFERENCE_FACE_POSITION_SLIDER.change(clear_and_update_face_reference_position, inputs=REFERENCE_FACE_POSITION_SLIDER) -def self_update_face_reference_position(reference_face_position: int) -> Dict[Any, Any]: +def clear_and_update_face_reference_position(reference_face_position: int) -> Dict[Any, Any]: clear_face_reference() - update_face_reference_position(reference_face_position) + return update_face_reference_position(reference_face_position) def update_face_reference_position(reference_face_position: int) -> Dict[Any, Any]: @@ -68,10 +68,10 @@ def update_face_reference_position(reference_face_position: int) -> Dict[Any, An roop.globals.reference_face_position = reference_face_position if is_image(roop.globals.target_path): target_frame = cv2.imread(roop.globals.target_path) - maximum = count_faces(target_frame) + maximum = get_faces_total(target_frame) if is_video(roop.globals.target_path): target_frame = get_video_frame(roop.globals.target_path, roop.globals.reference_frame_number) - maximum = count_faces(target_frame) + maximum = get_faces_total(target_frame) return gradio.update(value=reference_face_position, maximum=maximum) diff --git a/roop/uis/__components__/settings.py b/roop/uis/__components__/settings.py index e62d5bd..01dc470 100644 --- a/roop/uis/__components__/settings.py +++ b/roop/uis/__components__/settings.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List +from typing import Any, Dict, List, Optional import gradio import onnxruntime @@ -6,23 +6,39 @@ import roop.globals from roop.processors.frame.core import list_frame_processors_names, load_frame_processor_module, clear_frame_processors_modules from roop.uis import core as ui +FRAME_PROCESSORS_CHECKBOX_GROUP: Optional[gradio.CheckboxGroup] = None +EXECUTION_PROVIDERS_CHECKBOX_GROUP: Optional[gradio.CheckboxGroup] = None +EXECUTION_THREADS_SLIDER: Optional[gradio.Slider] = None +KEEP_FPS_CHECKBOX: Optional[gradio.Checkbox] = None +KEEP_TEMP_CHECKBOX: Optional[gradio.Checkbox] = None +SKIP_AUDIO_CHECKBOX: Optional[gradio.Checkbox] = None +MANY_FACES_CHECKBOX: Optional[gradio.Checkbox] = None + def render() -> None: + global FRAME_PROCESSORS_CHECKBOX_GROUP + global EXECUTION_PROVIDERS_CHECKBOX_GROUP + global EXECUTION_THREADS_SLIDER + global KEEP_FPS_CHECKBOX + global KEEP_TEMP_CHECKBOX + global SKIP_AUDIO_CHECKBOX + global MANY_FACES_CHECKBOX + with gradio.Column(): with gradio.Box(): - frame_processors_checkbox_group = gradio.CheckboxGroup( + FRAME_PROCESSORS_CHECKBOX_GROUP = gradio.CheckboxGroup( label='frame_processors', choices=sort_frame_processors(roop.globals.frame_processors), value=roop.globals.frame_processors ) - ui.register_component('frame_processors_checkbox_group', frame_processors_checkbox_group) + ui.register_component('frame_processors_checkbox_group', FRAME_PROCESSORS_CHECKBOX_GROUP) with gradio.Box(): - execution_providers_checkbox_group = gradio.CheckboxGroup( + EXECUTION_PROVIDERS_CHECKBOX_GROUP = gradio.CheckboxGroup( label='execution_providers', choices=onnxruntime.get_available_providers(), value=roop.globals.execution_providers ) - execution_threads_slider = gradio.Slider( + EXECUTION_THREADS_SLIDER = gradio.Slider( label='execution_threads', value=roop.globals.execution_threads, step=1, @@ -30,31 +46,33 @@ def render() -> None: maximum=64 ) with gradio.Box(): - keep_fps_checkbox = gradio.Checkbox( + KEEP_FPS_CHECKBOX = gradio.Checkbox( label='keep_fps', value=roop.globals.keep_fps ) - keep_temp_checkbox = gradio.Checkbox( + KEEP_TEMP_CHECKBOX = gradio.Checkbox( label='keep_temp', value=roop.globals.keep_fps ) - skip_audio_checkbox = gradio.Checkbox( + SKIP_AUDIO_CHECKBOX = gradio.Checkbox( label='skip_audio', value=roop.globals.skip_audio ) - many_faces_checkbox = gradio.Checkbox( + MANY_FACES_CHECKBOX = gradio.Checkbox( label='many_faces', value=roop.globals.many_faces ) - ui.register_component('many_faces_checkbox', many_faces_checkbox) + ui.register_component('many_faces_checkbox', MANY_FACES_CHECKBOX) - frame_processors_checkbox_group.change(update_frame_processors, inputs=frame_processors_checkbox_group, outputs=frame_processors_checkbox_group) - execution_providers_checkbox_group.change(update_execution_providers, inputs=execution_providers_checkbox_group, outputs=execution_providers_checkbox_group) - execution_threads_slider.change(update_execution_threads, inputs=execution_threads_slider, outputs=execution_threads_slider) - keep_fps_checkbox.change(lambda value: update_checkbox('keep_fps', value), inputs=keep_fps_checkbox, outputs=keep_fps_checkbox) - keep_temp_checkbox.change(lambda value: update_checkbox('keep_temp', value), inputs=keep_temp_checkbox, outputs=keep_temp_checkbox) - skip_audio_checkbox.change(lambda value: update_checkbox('skip_audio', value), inputs=skip_audio_checkbox, outputs=skip_audio_checkbox) - many_faces_checkbox.change(lambda value: update_checkbox('many_faces', value), inputs=many_faces_checkbox, outputs=many_faces_checkbox) + +def listen() -> None: + FRAME_PROCESSORS_CHECKBOX_GROUP.change(update_frame_processors, inputs=FRAME_PROCESSORS_CHECKBOX_GROUP, outputs=FRAME_PROCESSORS_CHECKBOX_GROUP) + EXECUTION_PROVIDERS_CHECKBOX_GROUP.change(update_execution_providers, inputs=EXECUTION_PROVIDERS_CHECKBOX_GROUP, outputs=EXECUTION_PROVIDERS_CHECKBOX_GROUP) + EXECUTION_THREADS_SLIDER.change(update_execution_threads, inputs=EXECUTION_THREADS_SLIDER, outputs=EXECUTION_THREADS_SLIDER) + KEEP_FPS_CHECKBOX.change(lambda value: update_checkbox('keep_fps', value), inputs=KEEP_FPS_CHECKBOX, outputs=KEEP_FPS_CHECKBOX) + KEEP_TEMP_CHECKBOX.change(lambda value: update_checkbox('keep_temp', value), inputs=KEEP_TEMP_CHECKBOX, outputs=KEEP_TEMP_CHECKBOX) + SKIP_AUDIO_CHECKBOX.change(lambda value: update_checkbox('skip_audio', value), inputs=SKIP_AUDIO_CHECKBOX, outputs=SKIP_AUDIO_CHECKBOX) + MANY_FACES_CHECKBOX.change(lambda value: update_checkbox('many_faces', value), inputs=MANY_FACES_CHECKBOX, outputs=MANY_FACES_CHECKBOX) def update_frame_processors(frame_processors: List[str]) -> Dict[Any, Any]: diff --git a/roop/uis/__components__/source.py b/roop/uis/__components__/source.py index d2f9ca3..ba6a768 100644 --- a/roop/uis/__components__/source.py +++ b/roop/uis/__components__/source.py @@ -1,27 +1,36 @@ -from typing import Any, Dict, IO +from typing import Any, Dict, IO, Optional import gradio import roop.globals from roop.uis import core as ui from roop.utilities import is_image +SOURCE_FILE: Optional[gradio.File] = None +SOURCE_IMAGE: Optional[gradio.Image] = None + def render() -> None: + global SOURCE_FILE + global SOURCE_IMAGE + with gradio.Box(): is_source_image = is_image(roop.globals.source_path) - source_file = gradio.File( + SOURCE_FILE = gradio.File( file_count='single', file_types=['.png', '.jpg', '.jpeg', '.webp'], label='source_path', value=roop.globals.source_path if is_source_image else None ) - ui.register_component('source_file', source_file) - source_image = gradio.Image( + ui.register_component('source_file', SOURCE_FILE) + SOURCE_IMAGE = gradio.Image( label='source_image', - value=source_file.value['name'] if is_source_image else None, + value=SOURCE_FILE.value['name'] if is_source_image else None, visible=is_source_image ) - source_file.change(update, inputs=source_file, outputs=source_image) + + +def listen() -> None: + SOURCE_FILE.change(update, inputs=SOURCE_FILE, outputs=SOURCE_IMAGE) def update(file: IO[Any]) -> Dict[str, Any]: diff --git a/roop/uis/__components__/target.py b/roop/uis/__components__/target.py index 0ae3524..72d8ed6 100644 --- a/roop/uis/__components__/target.py +++ b/roop/uis/__components__/target.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, IO, Tuple +from typing import Any, Dict, IO, Tuple, Optional import gradio import roop.globals @@ -6,29 +6,40 @@ from roop.face_reference import clear_face_reference from roop.uis import core as ui from roop.utilities import is_image, is_video +TARGET_FILE: Optional[gradio.File] = None +TARGET_IMAGE: Optional[gradio.Image] = None +TARGET_VIDEO: Optional[gradio.Video] = None + def render() -> None: + global TARGET_FILE + global TARGET_IMAGE + global TARGET_VIDEO + with gradio.Box(): is_target_image = is_image(roop.globals.target_path) is_target_video = is_video(roop.globals.target_path) - target_file = gradio.File( + TARGET_FILE = gradio.File( file_count='single', file_types=['.png', '.jpg', '.jpeg', '.webp', '.mp4'], label='target_path', value=roop.globals.target_path if is_target_image or is_target_video else None ) - ui.register_component('target_file', target_file) - target_image = gradio.Image( + ui.register_component('target_file', TARGET_FILE) + TARGET_IMAGE = gradio.Image( label='target_image', - value=target_file.value['name'] if is_target_image else None, + value=TARGET_FILE.value['name'] if is_target_image else None, visible=is_target_image ) - target_video = gradio.Video( + TARGET_VIDEO = gradio.Video( label='target_video', - value=target_file.value['name'] if is_target_video else None, + value=TARGET_FILE.value['name'] if is_target_video else None, visible=is_target_video ) - target_file.change(update, inputs=target_file, outputs=[target_image, target_video]) + + +def listen() -> None: + TARGET_FILE.change(update, inputs=TARGET_FILE, outputs=[TARGET_IMAGE, TARGET_VIDEO]) def update(file: IO[Any]) -> Tuple[Dict[str, Any], Dict[str, Any]]: diff --git a/roop/uis/__layouts__/default.py b/roop/uis/__layouts__/default.py index 37d67d3..660c472 100644 --- a/roop/uis/__layouts__/default.py +++ b/roop/uis/__layouts__/default.py @@ -20,5 +20,9 @@ def render() -> gradio.Blocks: def listen() -> None: + settings.listen() + source.listen() + target.listen() preview.listen() reference.listen() + output.listen()