deepsafe's picture
Add stripped inference-only model code mirror
9e14838 verified
Raw History Blame Contribute Delete
2.33 kB
import math
import os
import random
import cv2
import numpy as np
def bgr2ycbcr(img_bgr):
img_bgr = img_bgr.astype(np.float32)
img_ycrcb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YCR_CB)
img_ycbcr = img_ycrcb[:, :, (0, 2, 1)].astype(np.float32)
# to [16/255, 235/255]
img_ycbcr[:, :, 0] = (img_ycbcr[:, :, 0] * (235 - 16) + 16) / 255.0
# to [16/255, 240/255]
img_ycbcr[:, :, 1:] = (img_ycbcr[:, :, 1:] * (240 - 16) + 16) / 255.0
return img_ycbcr
def ycbcr2bgr(img_ycbcr):
img_ycbcr = img_ycbcr.astype(np.float32)
# to [0, 1]
img_ycbcr[:, :, 0] = (img_ycbcr[:, :, 0] * 255.0 - 16) / (235 - 16)
# to [0, 1]
img_ycbcr[:, :, 1:] = (img_ycbcr[:, :, 1:] * 255.0 - 16) / (240 - 16)
img_ycrcb = img_ycbcr[:, :, (0, 2, 1)].astype(np.float32)
img_bgr = cv2.cvtColor(img_ycrcb, cv2.COLOR_YCR_CB2BGR)
return img_bgr
def color_saturation(img, param):
ycbcr = bgr2ycbcr(img)
ycbcr[:, :, 1] = 0.5 + (ycbcr[:, :, 1] - 0.5) * param
ycbcr[:, :, 2] = 0.5 + (ycbcr[:, :, 2] - 0.5) * param
img = ycbcr2bgr(ycbcr).astype(np.uint8)
return img
def color_contrast(img, param):
img = img.astype(np.float32) * param
img = img.astype(np.uint8)
return img
def block_wise(img, param):
width = 8
block = np.ones((width, width, 3)).astype(int) * 128
param = min(img.shape[0], img.shape[1]) // 256 * param
for i in range(param):
r_w = random.randint(0, img.shape[1] - 1 - width)
r_h = random.randint(0, img.shape[0] - 1 - width)
img[r_h:r_h + width, r_w:r_w + width, :] = block
return img
def gaussian_noise_color(img, param):
ycbcr = bgr2ycbcr(img) / 255
size_a = ycbcr.shape
b = (ycbcr + math.sqrt(param) *
np.random.randn(size_a[0], size_a[1], size_a[2])) * 255
b = ycbcr2bgr(b)
img = np.clip(b, 0, 255).astype(np.uint8)
return img
def gaussian_blur(img, param):
img = cv2.GaussianBlur(img, (param, param), param * 1.0 / 6)
return img
def jpeg_compression(img, param):
h, w, _ = img.shape
s_h = h // param
s_w = w // param
img = cv2.resize(img, (s_w, s_h))
img = cv2.resize(img, (w, h))
return img
def video_compression(vid_in, vid_out, param):
cmd = f'ffmpeg -i {vid_in} -crf {param} -y {vid_out}'
os.system(cmd)
return