mirror of
https://github.com/iperov/DeepFaceLab.git
synced 2024-12-25 07:21:13 -08:00
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
import numpy as np
|
|
|
|
def random_crop(img, w, h):
|
|
height, width = img.shape[:2]
|
|
|
|
h_rnd = height - h
|
|
w_rnd = width - w
|
|
|
|
y = np.random.randint(0, h_rnd) if h_rnd > 0 else 0
|
|
x = np.random.randint(0, w_rnd) if w_rnd > 0 else 0
|
|
|
|
return img[y:y+height, x:x+width]
|
|
|
|
def normalize_channels(img, target_channels):
|
|
img_shape_len = len(img.shape)
|
|
if img_shape_len == 2:
|
|
h, w = img.shape
|
|
c = 0
|
|
elif img_shape_len == 3:
|
|
h, w, c = img.shape
|
|
else:
|
|
raise ValueError("normalize: incorrect image dimensions.")
|
|
|
|
if c == 0 and target_channels > 0:
|
|
img = img[...,np.newaxis]
|
|
c = 1
|
|
|
|
if c == 1 and target_channels > 1:
|
|
img = np.repeat (img, target_channels, -1)
|
|
c = target_channels
|
|
|
|
if c > target_channels:
|
|
img = img[...,0:target_channels]
|
|
c = target_channels
|
|
|
|
return img
|
|
|
|
def cut_odd_image(img):
|
|
h, w, c = img.shape
|
|
wm, hm = w % 2, h % 2
|
|
if wm + hm != 0:
|
|
img = img[0:h-hm,0:w-wm,:]
|
|
return img
|
|
|
|
def overlay_alpha_image(img_target, img_source, xy_offset=(0,0) ):
|
|
(h,w,c) = img_source.shape
|
|
if c != 4:
|
|
raise ValueError("overlay_alpha_image, img_source must have 4 channels")
|
|
|
|
x1, x2 = xy_offset[0], xy_offset[0] + w
|
|
y1, y2 = xy_offset[1], xy_offset[1] + h
|
|
|
|
alpha_s = img_source[:, :, 3] / 255.0
|
|
alpha_l = 1.0 - alpha_s
|
|
|
|
for c in range(0, 3):
|
|
img_target[y1:y2, x1:x2, c] = (alpha_s * img_source[:, :, c] +
|
|
alpha_l * img_target[y1:y2, x1:x2, c]) |