fixes and optimizations,

converters: added new option sharpen_mode and sharpen_amount
This commit is contained in:
iperov 2019-08-25 19:18:51 +04:00
parent c39ed9d9c9
commit 63d30c49ae
12 changed files with 120 additions and 78 deletions

View file

@ -84,6 +84,23 @@ class ConvertSubprocessor(Subprocessor):
#therefore forcing active_DeviceConfig to CPU only
nnlib.active_DeviceConfig = nnlib.DeviceConfig (cpu_only=True)
def sharpen_func (img, sharpen_mode=0, radius=0.003, amount=150):
h,w,c = img.shape
radius = max(1, round(w * radius))
kernel_size = int((radius * 2) + 1)
if sharpen_mode == 1: #box
kernel = np.zeros( (kernel_size, kernel_size), dtype=np.float32)
kernel[ kernel_size//2, kernel_size//2] = 1.0
box_filter = np.ones( (kernel_size, kernel_size), dtype=np.float32) / (kernel_size**2)
kernel = kernel + (kernel - box_filter) * amount
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)
return img
return img
self.sharpen_func = sharpen_func
self.fanseg_by_face_type = {}
self.fanseg_input_size = 256
@ -103,6 +120,7 @@ class ConvertSubprocessor(Subprocessor):
def process_data(self, pf): #pf=ProcessingFrame
cfg = pf.cfg.copy()
cfg.predictor_func = self.predictor_func
cfg.sharpen_func = self.sharpen_func
cfg.superres_func = self.superres_func
frame_info = pf.frame_info
@ -239,8 +257,8 @@ class ConvertSubprocessor(Subprocessor):
io.progress_bar_close()
cfg_change_keys = ['`','1', '2', '3', '4', '5', '6', '7', '8', '9',
'q', 'a', 'w', 's', 'e', 'd', 'r', 'f', 't', 'g','y','h',
'z', 'x', 'c', 'v', 'b' ]
'q', 'a', 'w', 's', 'e', 'd', 'r', 'f', 't', 'g','y','h','u','j',
'z', 'x', 'c', 'v', 'b','n' ]
#override
def on_tick(self):
self.predictor_func_host.process_messages()
@ -324,8 +342,12 @@ class ConvertSubprocessor(Subprocessor):
elif chr_key == 'g':
cfg.add_color_degrade_power(-1 if not shift_pressed else -5)
elif chr_key == 'y':
cfg.add_output_face_scale(1 if not shift_pressed else 5)
cfg.add_sharpen_amount(1 if not shift_pressed else 5)
elif chr_key == 'h':
cfg.add_sharpen_amount(-1 if not shift_pressed else -5)
elif chr_key == 'u':
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 == 'z':
@ -338,11 +360,20 @@ class ConvertSubprocessor(Subprocessor):
cfg.toggle_super_resolution_mode()
elif chr_key == 'b':
cfg.toggle_export_mask_alpha()
elif chr_key == 'n':
cfg.toggle_sharpen_mode()
else:
if chr_key == 's':
if chr_key == 'y':
cfg.add_sharpen_amount(1 if not shift_pressed else 5)
elif chr_key == 'h':
cfg.add_sharpen_amount(-1 if not shift_pressed else -5)
elif chr_key == 's':
cfg.toggle_add_source_image()
elif chr_key == 'v':
cfg.toggle_super_resolution_mode()
elif chr_key == 'n':
cfg.toggle_sharpen_mode()
if prev_cfg != cfg:
io.log_info (cfg)
@ -368,16 +399,13 @@ class ConvertSubprocessor(Subprocessor):
if go_prev_frame:
if cur_frame is not None and cur_frame.is_done:
cur_frame.image = None
if len(self.frames_done_idxs) > 0:
prev_frame = self.frames[self.frames_done_idxs.pop()]
self.frames_idxs.insert(0, prev_frame.idx)
prev_frame.is_shown = False
io.progress_bar_inc(-1)
if go_prev_frame_overriding_cfg:
if cur_frame is not None:
if len(self.frames_done_idxs) > 0:
prev_frame = self.frames[self.frames_done_idxs.pop()]
self.frames_idxs.insert(0, prev_frame.idx)
prev_frame.is_shown = False
io.progress_bar_inc(-1)
if go_prev_frame_overriding_cfg:
if prev_frame.cfg != cur_frame.cfg:
prev_frame.cfg = cur_frame.cfg
prev_frame.is_done = False