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): if is_image(roop.globals.target_path):
temp_frame = cv2.imread(roop.globals.target_path) temp_frame = cv2.imread(roop.globals.target_path)
preview_frame = get_preview_frame(temp_frame) 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_image_args['visible'] = True
if is_video(roop.globals.target_path): if is_video(roop.globals.target_path):
temp_frame = get_video_frame(roop.globals.target_path, roop.globals.reference_frame_number) temp_frame = get_video_frame(roop.globals.target_path, roop.globals.reference_frame_number)
preview_frame = get_preview_frame(temp_frame) 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_image_args['visible'] = True
preview_slider_args['value'] = roop.globals.reference_frame_number preview_slider_args['value'] = roop.globals.reference_frame_number
preview_slider_args['maximum'] = get_video_frame_total(roop.globals.target_path) 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): if is_image(roop.globals.target_path):
temp_frame = cv2.imread(roop.globals.target_path) temp_frame = cv2.imread(roop.globals.target_path)
preview_frame = get_preview_frame(temp_frame) 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): if is_video(roop.globals.target_path):
video_frame_total = get_video_frame_total(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) temp_frame = get_video_frame(roop.globals.target_path, frame_number)
preview_frame = get_preview_frame(temp_frame) 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) 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 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 gradio
import onnxruntime import onnxruntime

View File

@ -1,6 +1,6 @@
import gradio 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: def render() -> gradio.Blocks:
@ -13,6 +13,7 @@ def render() -> gradio.Blocks:
target.render() target.render()
with gradio.Column(scale=2): with gradio.Column(scale=2):
preview.render() preview.render()
reference.render()
with gradio.Row(): with gradio.Row():
output.render() output.render()
return layout return layout

View File

@ -1,8 +1,11 @@
import importlib import importlib
from typing import Dict, Optional, List from typing import Dict, Optional, List
import cv2
import gradio import gradio
import roop.globals import roop.globals
from roop.typing import Frame
from roop.uis.typing import Component, ComponentName from roop.uis.typing import Component, ComponentName
from roop.utilities import list_module_names 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]]: def list_ui_layouts_names() -> Optional[List[str]]:
return list_module_names('roop/uis/__layouts__') 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[ ComponentName = Literal[
'source_file', 'source_file',
'target_file', 'target_file',
'reference_face_gallery',
'frame_processors_checkbox_group', 'frame_processors_checkbox_group',
'many_faces_checkbox' 'many_faces_checkbox'
] ]