Start with reference component

This commit is contained in:
henryruhs 2023-07-31 23:41:56 +02:00
parent aaf50a74eb
commit b0b3608b94
6 changed files with 57 additions and 8 deletions

View File

@ -29,12 +29,12 @@ def render() -> None:
if is_image(roop.globals.target_path):
temp_frame = cv2.imread(roop.globals.target_path)
preview_frame = get_preview_frame(temp_frame)
preview_image_args['value'] = normalize_preview_frame(preview_frame)
preview_image_args['value'] = ui.normalize_frame(preview_frame)
preview_image_args['visible'] = True
if is_video(roop.globals.target_path):
temp_frame = get_video_frame(roop.globals.target_path, roop.globals.reference_frame_number)
preview_frame = get_preview_frame(temp_frame)
preview_image_args['value'] = normalize_preview_frame(preview_frame)
preview_image_args['value'] = ui.normalize_frame(preview_frame)
preview_image_args['visible'] = True
preview_slider_args['value'] = roop.globals.reference_frame_number
preview_slider_args['maximum'] = get_video_frame_total(roop.globals.target_path)
@ -54,12 +54,12 @@ def update(frame_number: int = 0) -> Tuple[Dict[Any, Any], Dict[Any, Any]]:
if is_image(roop.globals.target_path):
temp_frame = cv2.imread(roop.globals.target_path)
preview_frame = get_preview_frame(temp_frame)
return gradio.update(value=normalize_preview_frame(preview_frame), visible=True), gradio.update(value=0, maximum=1, visible=False)
return gradio.update(value=ui.normalize_frame(preview_frame), visible=True), gradio.update(value=0, maximum=1, visible=False)
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)
preview_frame = get_preview_frame(temp_frame)
return gradio.update(value=normalize_preview_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(value=frame_number, maximum=video_frame_total, visible=True)
return gradio.update(value=None, visible=False), gradio.update(value=0, maximum=1, visible=False)
@ -83,5 +83,3 @@ def get_preview_frame(temp_frame: Frame) -> Frame:
return temp_frame
def normalize_preview_frame(preview_frame: Frame) -> Frame:
return cv2.cvtColor(preview_frame, cv2.COLOR_BGR2RGB)

View File

@ -0,0 +1,42 @@
from time import sleep
from typing import Dict, Any
import gradio
import roop.globals
from roop.capturer import get_video_frame
from roop.face_analyser import get_many_faces
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)
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)

View File

@ -1,4 +1,4 @@
from typing import Any, Dict, List, Literal
from typing import Any, Dict, List
import gradio
import onnxruntime

View File

@ -1,6 +1,6 @@
import gradio
from roop.uis.__components__ import settings, source, target, preview, output
from roop.uis.__components__ import settings, source, target, preview, reference, output
def render() -> gradio.Blocks:
@ -13,6 +13,7 @@ def render() -> gradio.Blocks:
target.render()
with gradio.Column(scale=2):
preview.render()
reference.render()
with gradio.Row():
output.render()
return layout

View File

@ -1,8 +1,11 @@
import importlib
from typing import Dict, Optional, List
import cv2
import gradio
import roop.globals
from roop.typing import Frame
from roop.uis.typing import Component, ComponentName
from roop.utilities import list_module_names
@ -34,3 +37,7 @@ def register_component(name: ComponentName, component: Component) -> None:
def list_ui_layouts_names() -> Optional[List[str]]:
return list_module_names('roop/uis/__layouts__')
def normalize_frame(frame: Frame) -> Frame:
return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

View File

@ -5,6 +5,7 @@ Component = gradio.File or gradio.Image or gradio.Video
ComponentName = Literal[
'source_file',
'target_file',
'reference_face_gallery',
'frame_processors_checkbox_group',
'many_faces_checkbox'
]