mirror of
https://github.com/iperov/DeepFaceLab.git
synced 2025-07-14 00:53:48 -07:00
converter:
fixed crashes removed useless 'ebs' color transfer changed keys for color degrade added image degrade via denoise - same as denoise extracted data_dst.bat , but you can control this option directly in the interactive converter added image degrade via bicubic downscale and upscale SAEHD: default ae_dims for df now 256.
This commit is contained in:
parent
374d8c2388
commit
770c70d778
8 changed files with 274 additions and 57 deletions
|
@ -101,12 +101,21 @@ class ConvertSubprocessor(Subprocessor):
|
|||
return cv2.filter2D(img, -1, kernel)
|
||||
elif sharpen_mode == 2: #gaussian
|
||||
blur = cv2.GaussianBlur(img, (kernel_size, kernel_size) , 0)
|
||||
img = cv2.addWeighted(img, 1.0 + (0.5 * amount), blur, -(0.5 * amount), 0)
|
||||
img = cv2.addWeighted(img, 1.0 + (0.5 * amount), blur, -(0.5 * amount), 0)
|
||||
return img
|
||||
elif amount < 0:
|
||||
blur = cv2.GaussianBlur(img, (kernel_size, kernel_size) , 0)
|
||||
img = cv2.addWeighted(img, 1.0 - a / 50.0, blur, a /50.0, 0)
|
||||
return img
|
||||
n = -amount
|
||||
while n > 0:
|
||||
|
||||
img_blur = cv2.medianBlur(img, 5)
|
||||
if int(n / 10) != 0:
|
||||
img = img_blur
|
||||
else:
|
||||
pass_power = (n % 10) / 10.0
|
||||
img = img*(1.0-pass_power)+img_blur*pass_power
|
||||
n = max(n-10,0)
|
||||
|
||||
return img
|
||||
return img
|
||||
self.blursharpen_func = blursharpen_func
|
||||
|
||||
|
@ -122,7 +131,7 @@ class ConvertSubprocessor(Subprocessor):
|
|||
return fanseg.extract(*args, **kwargs)
|
||||
|
||||
self.fanseg_extract_func = fanseg_extract
|
||||
|
||||
|
||||
self.fanchq_by_face_type = {}
|
||||
self.fanchq_input_size = 256
|
||||
def fanchq_extract(face_type, *args, **kwargs):
|
||||
|
@ -134,13 +143,13 @@ class ConvertSubprocessor(Subprocessor):
|
|||
return fanchq.extract(*args, **kwargs)
|
||||
|
||||
self.fanchq_extract_func = fanchq_extract
|
||||
|
||||
|
||||
import ebsynth
|
||||
def ebs_ct(*args, **kwargs):
|
||||
def ebs_ct(*args, **kwargs):
|
||||
return ebsynth.color_transfer(*args, **kwargs)
|
||||
|
||||
|
||||
self.ebs_ct_func = ebs_ct
|
||||
|
||||
|
||||
return None
|
||||
|
||||
#override
|
||||
|
@ -188,7 +197,7 @@ class ConvertSubprocessor(Subprocessor):
|
|||
raise Exception( 'Error while converting file [%s]: %s' % (filename, e_str) )
|
||||
|
||||
elif cfg.type == ConverterConfig.TYPE_FACE_AVATAR:
|
||||
final_img = ConvertFaceAvatar (self.predictor_func, self.predictor_input_shape,
|
||||
final_img = ConvertFaceAvatar (self.predictor_func, self.predictor_input_shape,
|
||||
cfg, pf.prev_temporal_frame_infos,
|
||||
pf.frame_info,
|
||||
pf.next_temporal_frame_infos )
|
||||
|
@ -241,7 +250,7 @@ class ConvertSubprocessor(Subprocessor):
|
|||
|
||||
session_data = None
|
||||
if self.is_interactive and self.converter_session_filepath.exists():
|
||||
|
||||
|
||||
if io.input_bool ("Use saved session? (y/n skip:y) : ", True):
|
||||
try:
|
||||
with open( str(self.converter_session_filepath), "rb") as f:
|
||||
|
@ -276,10 +285,19 @@ class ConvertSubprocessor(Subprocessor):
|
|||
|
||||
if frames_equal:
|
||||
io.log_info ('Using saved session from ' + '/'.join (self.converter_session_filepath.parts[-2:]) )
|
||||
|
||||
for frame in s_frames:
|
||||
if frame.cfg is not None:
|
||||
#recreate ConverterConfig class using constructor with get_config() as dict params
|
||||
#so if any new param will be added, old converter session will work properly
|
||||
frame.cfg = frame.cfg.__class__( **frame.cfg.get_config() )
|
||||
|
||||
self.frames = s_frames
|
||||
self.frames_idxs = s_frames_idxs
|
||||
self.frames_done_idxs = s_frames_done_idxs
|
||||
|
||||
|
||||
|
||||
if self.model_iter != s_model_iter:
|
||||
#model is more trained, recompute all frames
|
||||
for frame in self.frames:
|
||||
|
@ -288,7 +306,7 @@ class ConvertSubprocessor(Subprocessor):
|
|||
if self.model_iter != s_model_iter or \
|
||||
len(self.frames_idxs) == 0:
|
||||
#rewind to begin if model is more trained or all frames are done
|
||||
|
||||
|
||||
while len(self.frames_done_idxs) > 0:
|
||||
prev_frame = self.frames[self.frames_done_idxs.pop()]
|
||||
self.frames_idxs.insert(0, prev_frame.idx)
|
||||
|
@ -367,7 +385,7 @@ class ConvertSubprocessor(Subprocessor):
|
|||
io.log_info ("Session is saved to " + '/'.join (self.converter_session_filepath.parts[-2:]) )
|
||||
|
||||
cfg_change_keys = ['`','1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
'q', 'a', 'w', 's', 'e', 'd', 'r', 'f', 't', 'g','y','h','u','j',
|
||||
'q', 'a', 'w', 's', 'e', 'd', 'r', 'f', 'y','h','u','j','i','k','o','l','p', ';',':',#'t', 'g',
|
||||
'z', 'x', 'c', 'v', 'b','n' ]
|
||||
#override
|
||||
def on_tick(self):
|
||||
|
@ -447,10 +465,6 @@ class ConvertSubprocessor(Subprocessor):
|
|||
cfg.add_motion_blur_power(1 if not shift_pressed else 5)
|
||||
elif chr_key == 'f':
|
||||
cfg.add_motion_blur_power(-1 if not shift_pressed else -5)
|
||||
elif chr_key == 't':
|
||||
cfg.add_color_degrade_power(1 if not shift_pressed else 5)
|
||||
elif chr_key == 'g':
|
||||
cfg.add_color_degrade_power(-1 if not shift_pressed else -5)
|
||||
elif chr_key == 'y':
|
||||
cfg.add_blursharpen_amount(1 if not shift_pressed else 5)
|
||||
elif chr_key == 'h':
|
||||
|
@ -459,6 +473,21 @@ class ConvertSubprocessor(Subprocessor):
|
|||
cfg.add_output_face_scale(1 if not shift_pressed else 5)
|
||||
elif chr_key == 'j':
|
||||
cfg.add_output_face_scale(-1 if not shift_pressed else -5)
|
||||
elif chr_key == 'i':
|
||||
cfg.add_image_denoise_power(1 if not shift_pressed else 5)
|
||||
elif chr_key == 'k':
|
||||
cfg.add_image_denoise_power(-1 if not shift_pressed else -5)
|
||||
elif chr_key == 'o':
|
||||
cfg.add_bicubic_degrade_power(1 if not shift_pressed else 5)
|
||||
elif chr_key == 'l':
|
||||
cfg.add_bicubic_degrade_power(-1 if not shift_pressed else -5)
|
||||
|
||||
elif chr_key == 'p':
|
||||
cfg.add_color_degrade_power(1 if not shift_pressed else 5)
|
||||
elif chr_key == ';':
|
||||
cfg.add_color_degrade_power(-1)
|
||||
elif chr_key == ':':
|
||||
cfg.add_color_degrade_power(-5)
|
||||
|
||||
elif chr_key == 'z':
|
||||
cfg.toggle_masked_hist_match()
|
||||
|
@ -579,7 +608,7 @@ class ConvertSubprocessor(Subprocessor):
|
|||
for i in range ( min(len(self.frames_idxs), self.prefetch_frame_count) ):
|
||||
frame = self.frames[ self.frames_idxs[i] ]
|
||||
|
||||
if not frame.is_done and not frame.is_processing and frame.cfg is not None:
|
||||
if not frame.is_done and not frame.is_processing and frame.cfg is not None:
|
||||
frame.is_processing = True
|
||||
return ConvertSubprocessor.ProcessingFrame(idx=frame.idx,
|
||||
cfg=frame.cfg.copy(),
|
||||
|
@ -623,7 +652,7 @@ def main (args, device_args):
|
|||
|
||||
import models
|
||||
model = models.import_model( args['model_name'])(model_path, device_args=device_args, training_data_src_path=training_data_src_path)
|
||||
converter_session_filepath = model.get_strpath_storage_for_file('converter_session.dat')
|
||||
converter_session_filepath = model.get_strpath_storage_for_file('converter_session.dat')
|
||||
predictor_func, predictor_input_shape, cfg = model.get_ConverterConfig()
|
||||
|
||||
if not is_interactive:
|
||||
|
@ -750,8 +779,8 @@ def main (args, device_args):
|
|||
is_interactive = is_interactive,
|
||||
converter_session_filepath = converter_session_filepath,
|
||||
predictor_func = predictor_func,
|
||||
predictor_input_shape = predictor_input_shape,
|
||||
converter_config = cfg,
|
||||
predictor_input_shape = predictor_input_shape,
|
||||
converter_config = cfg,
|
||||
frames = frames,
|
||||
output_path = output_path,
|
||||
model_iter = model.get_iter()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue