mirror of
https://github.com/s0md3v/roop.git
synced 2025-12-06 18:08:29 +00:00
Use face position slider
This commit is contained in:
parent
b0b3608b94
commit
b4e5ee8140
@ -1,5 +1,5 @@
|
||||
from time import sleep
|
||||
from typing import Any, Dict, Tuple
|
||||
from typing import Any, Dict, Tuple, List
|
||||
import cv2
|
||||
import gradio
|
||||
|
||||
@ -12,6 +12,7 @@ from roop.predictor import predict_frame
|
||||
from roop.processors.frame.core import load_frame_processor_module
|
||||
from roop.typing import Frame
|
||||
from roop.uis import core as ui
|
||||
from roop.uis.typing import ComponentName
|
||||
from roop.utilities import is_video, is_image
|
||||
|
||||
|
||||
@ -42,7 +43,14 @@ def render() -> None:
|
||||
preview_image = gradio.Image(**preview_image_args)
|
||||
preview_slider = gradio.Slider(**preview_slider_args)
|
||||
preview_slider.change(update, inputs=preview_slider, outputs=[preview_image, preview_slider], show_progress=False)
|
||||
component_names = ['source_file', 'target_file', 'frame_processors_checkbox_group', 'many_faces_checkbox']
|
||||
component_names: List[ComponentName] = [
|
||||
'source_file',
|
||||
'target_file',
|
||||
'reference_face_position_slider',
|
||||
'similar_face_distance_slider',
|
||||
'frame_processors_checkbox_group',
|
||||
'many_faces_checkbox'
|
||||
]
|
||||
for component_name in component_names:
|
||||
component = ui.get_component(component_name)
|
||||
if component:
|
||||
@ -58,8 +66,9 @@ def update(frame_number: int = 0) -> Tuple[Dict[Any, Any], Dict[Any, Any]]:
|
||||
if is_video(roop.globals.target_path):
|
||||
video_frame_total = get_video_frame_total(roop.globals.target_path)
|
||||
temp_frame = get_video_frame(roop.globals.target_path, frame_number)
|
||||
roop.globals.reference_frame_number = frame_number
|
||||
preview_frame = get_preview_frame(temp_frame)
|
||||
return gradio.update(value=ui.normalize_frame(preview_frame), visible=True), gradio.update(value=frame_number, maximum=video_frame_total, visible=True)
|
||||
return gradio.update(value=ui.normalize_frame(preview_frame), visible=True), gradio.update(maximum=video_frame_total, visible=True)
|
||||
return gradio.update(value=None, visible=False), gradio.update(value=0, maximum=1, visible=False)
|
||||
|
||||
|
||||
|
||||
@ -2,41 +2,45 @@ from time import sleep
|
||||
from typing import Dict, Any
|
||||
|
||||
import gradio
|
||||
import numpy
|
||||
|
||||
import roop.globals
|
||||
from roop.capturer import get_video_frame
|
||||
from roop.face_analyser import get_many_faces
|
||||
from roop.face_reference import clear_face_reference
|
||||
from roop.uis import core as ui
|
||||
from roop.utilities import is_video
|
||||
|
||||
|
||||
def render() -> None:
|
||||
with gradio.Box():
|
||||
reference_face_gallery_args: Dict[str, Any] = {
|
||||
'label': 'reference_faces',
|
||||
'columns': 6,
|
||||
'height': 200,
|
||||
'allow_preview': False,
|
||||
'visible': True
|
||||
}
|
||||
if is_video(roop.globals.target_path):
|
||||
target_frame = get_video_frame(roop.globals.target_path, roop.globals.reference_frame_number)
|
||||
faces = get_many_faces(target_frame)
|
||||
if faces:
|
||||
value = []
|
||||
for face in faces:
|
||||
start_x, start_y, end_x, end_y = map(int, face['bbox'])
|
||||
crop_frame = target_frame[start_y:end_y, start_x:end_x]
|
||||
value.append(ui.normalize_frame(crop_frame))
|
||||
reference_face_gallery_args['value'] = value
|
||||
else:
|
||||
reference_face_gallery_args['value'] = []
|
||||
reference_face_gallery = gradio.Gallery(**reference_face_gallery_args)
|
||||
reference_face_position_slider = gradio.Slider(
|
||||
label='reference_face_position',
|
||||
value=roop.globals.reference_face_position,
|
||||
maximum=len(faces),
|
||||
step=1
|
||||
)
|
||||
ui.register_component('reference_face_position_slider', reference_face_position_slider)
|
||||
similar_face_distance_slider = gradio.Slider(
|
||||
label='similar_face_distance',
|
||||
value=roop.globals.similar_face_distance,
|
||||
minimum=0,
|
||||
maximum=2,
|
||||
step=0.05
|
||||
)
|
||||
ui.register_component('reference_face_gallery', reference_face_gallery)
|
||||
ui.register_component('similar_face_distance_slider', reference_face_position_slider)
|
||||
reference_face_position_slider.change(update_face_reference_position, inputs=reference_face_position_slider)
|
||||
similar_face_distance_slider.change(update_similar_face_distance, inputs=similar_face_distance_slider)
|
||||
|
||||
|
||||
def update_face_reference_position(reference_face_position: int) -> Dict[Any, Any]:
|
||||
clear_face_reference()
|
||||
roop.globals.reference_face_position = reference_face_position
|
||||
return gradio.update(value=reference_face_position)
|
||||
|
||||
|
||||
def update_similar_face_distance(similar_face_distance: float) -> Dict[Any, Any]:
|
||||
roop.globals.similar_face_distance = similar_face_distance
|
||||
return gradio.update(value=similar_face_distance)
|
||||
|
||||
@ -12,8 +12,8 @@ def render() -> gradio.Blocks:
|
||||
source.render()
|
||||
target.render()
|
||||
with gradio.Column(scale=2):
|
||||
preview.render()
|
||||
reference.render()
|
||||
preview.render()
|
||||
with gradio.Row():
|
||||
output.render()
|
||||
return layout
|
||||
|
||||
@ -5,7 +5,8 @@ Component = gradio.File or gradio.Image or gradio.Video
|
||||
ComponentName = Literal[
|
||||
'source_file',
|
||||
'target_file',
|
||||
'reference_face_gallery',
|
||||
'reference_face_position_slider',
|
||||
'similar_face_distance_slider',
|
||||
'frame_processors_checkbox_group',
|
||||
'many_faces_checkbox'
|
||||
]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user