fix Face Swapper module UI

This commit is contained in:
iperov 2022-05-13 14:15:37 +04:00
parent f8047dd256
commit 15c2ad5593
2 changed files with 30 additions and 27 deletions

View file

@ -1,5 +1,6 @@
import time
from pathlib import Path
from typing import Dict
import numpy as np
from modelhub import DFLive
@ -24,7 +25,7 @@ class FaceSwapper(BackendHost):
worker_start_args=[weak_heap, reemit_frame_signal, bc_in, bc_out, dfm_models_path])
def get_control_sheet(self) -> 'Sheet.Host': return super().get_control_sheet()
def _get_name(self):
return super()._get_name()# + f'{self._id}'
@ -48,7 +49,7 @@ class FaceSwapperWorker(BackendWorker):
state, cs = self.get_state(), self.get_control_sheet()
cs.model.call_on_selected(self.on_cs_model_info)
cs.model.call_on_selected(self.on_cs_model)
cs.device.call_on_selected(self.on_cs_device)
cs.swap_all_faces.call_on_flag(self.on_cs_swap_all_faces)
cs.face_id.call_on_number(self.on_cs_face_id)
@ -59,32 +60,31 @@ class FaceSwapperWorker(BackendWorker):
cs.pre_gamma_blue.call_on_number(self.on_cs_pre_gamma_blue)
cs.two_pass.call_on_flag(self.on_cs_two_pass)
cs.model.enable()
cs.model.set_choices( DFLive.get_available_models_info(dfm_models_path), none_choice_name='@misc.menu_select')
cs.model.select(state.model)
cs.device.enable()
cs.device.set_choices( DFLive.get_available_devices(), none_choice_name='@misc.menu_select')
cs.device.select(state.device)
def on_cs_model_info(self, idx, model):
def on_cs_device(self, idx, device):
state, cs = self.get_state(), self.get_control_sheet()
if state.model == model:
cs.device.enable()
cs.device.set_choices( DFLive.get_available_devices(), none_choice_name='@misc.menu_select')
cs.device.select(state.model_state.device)
if device is not None and state.device == device:
cs.model.enable()
cs.model.set_choices( DFLive.get_available_models_info(self.dfm_models_path), none_choice_name='@misc.menu_select')
cs.model.select(state.model)
else:
state.model = model
state.model_state = ModelState()
state.device = device
self.save_state()
self.restart()
def on_cs_device(self, idxs, device):
def on_cs_model(self, idx, model):
state, cs = self.get_state(), self.get_control_sheet()
if device is not None and state.model_state.device == device:
self.dfm_model_initializer = DFLive.DFMModel_from_info(state.model, device)
if state.model == model:
state.model_state = state.models_state[model.get_name()] = state.models_state.get(model.get_name(), ModelState())
self.dfm_model_initializer = DFLive.DFMModel_from_info(state.model, state.device)
self.set_busy(True)
else:
state.model_state = ModelState()
state.model_state.device = device
state.model = model
self.save_state()
self.restart()
@ -338,7 +338,6 @@ class Sheet:
self.two_pass = lib_csw.Flag.Host()
class ModelState(BackendWorkerState):
device = None
swap_all_faces : bool = None
face_id : int = None
morph_factor : float = None
@ -349,5 +348,9 @@ class ModelState(BackendWorkerState):
two_pass : bool = None
class WorkerState(BackendWorkerState):
model : DFLive.DFMModelInfo = None
model_state : ModelState = None
def __init__(self):
super().__init__()
self.device = None
self.model : DFLive.DFMModelInfo = None
self.models_state : Dict[str, ModelState] = {}
self.model_state : ModelState = None

View file

@ -25,6 +25,9 @@ class QFaceSwapper(QBackendPanel):
btn_open_folder = self.btn_open_folder = qtx.QXPushButton(image = QXImageDB.eye_outline('light gray'), tooltip_text='Reveal in Explorer', released=self._btn_open_folder_released, fixed_size=(24,22) )
q_device_label = QLabelPopupInfo(label=L('@common.device'), popup_info_text=L('@common.help.device') )
q_device = QComboBoxCSWDynamicSingleSwitch(cs.device, reflect_state_widgets=[q_device_label])
q_model_label = QLabelPopupInfo(label=L('@QFaceSwapper.model'), popup_info_text=L('@QFaceSwapper.help.model') )
q_model = QComboBoxCSWDynamicSingleSwitch(cs.model, reflect_state_widgets=[q_model_label, btn_open_folder])
@ -33,9 +36,6 @@ class QFaceSwapper(QBackendPanel):
q_model_info_label = self._q_model_info_label = QLabelPopupInfoCSWInfoLabel(cs.model_info_label)
q_device_label = QLabelPopupInfo(label=L('@common.device'), popup_info_text=L('@common.help.device') )
q_device = QComboBoxCSWDynamicSingleSwitch(cs.device, reflect_state_widgets=[q_device_label])
q_swap_all_faces_label = QLabelPopupInfo(label=L('@QFaceSwapper.swap_all_faces') )
q_swap_all_faces = QCheckBoxCSWFlag(cs.swap_all_faces, reflect_state_widgets=[q_swap_all_faces_label])
@ -59,6 +59,9 @@ class QFaceSwapper(QBackendPanel):
grid_l = qtx.QXGridLayout( spacing=5)
row = 0
grid_l.addWidget(q_device_label, row, 0, alignment=qtx.AlignRight | qtx.AlignVCenter )
grid_l.addWidget(q_device, row, 1, alignment=qtx.AlignLeft )
row += 1
grid_l.addWidget(q_model_label, row, 0, alignment=qtx.AlignRight | qtx.AlignVCenter )
grid_l.addLayout(qtx.QXHBoxLayout([q_model, 2, btn_open_folder, 2, q_model_info_label]), row, 1 )
row += 1
@ -66,9 +69,6 @@ class QFaceSwapper(QBackendPanel):
row += 1
grid_l.addWidget(q_model_dl_error, row, 0, 1, 2 )
row += 1
grid_l.addWidget(q_device_label, row, 0, alignment=qtx.AlignRight | qtx.AlignVCenter )
grid_l.addWidget(q_device, row, 1, alignment=qtx.AlignLeft )
row += 1
grid_l.addWidget( q_swap_all_faces_label, row, 0, alignment=qtx.AlignRight | qtx.AlignVCenter )
grid_l.addLayout( qtx.QXHBoxLayout([q_swap_all_faces, 4, q_face_id_label, 4, q_face_id ]), row, 1, alignment=qtx.AlignLeft )
row += 1