test_api / preprocess.py
Codelinhtinh
add
affa2df
from typing import Tuple
import cv2
import numpy as np
def resize_and_pad(image: np.array,
new_shape: Tuple[int, int],
padding_color: Tuple[int] = (144, 144, 144)
) -> np.array:
h_org, w_org = image.shape[:2]
w_new, h_new = new_shape
padd_left, padd_right, padd_top, padd_bottom = 0, 0, 0, 0
#Padding left to right
if h_org >= w_org:
img_resize = cv2.resize(image, (int(w_org*h_new/h_org), h_new))
h, w = img_resize.shape[:2]
padd_left = (w_new-w)//2
padd_right = w_new - w - padd_left
ratio = h_new/h_org
#Padding top to bottom
if h_org < w_org:
img_resize = cv2.resize(image, (w_new, int(h_org*w_new/w_org)))
h, w = img_resize.shape[:2]
padd_top = (h_new-h)//2
padd_bottom = h_new - h - padd_top
ratio = w_new/w_org
image = cv2.copyMakeBorder(img_resize, padd_top, padd_bottom, padd_left, padd_right, cv2.BORDER_CONSTANT,None,value=padding_color)
return image, ratio, (padd_left, padd_top)
def normalization_input(image: np.array) -> np.array:
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) #BGR to RGB
img = image.transpose((2, 0, 1)) # HWC to CHW
img = np.ascontiguousarray(img).astype(np.float32)
img /=255.0
img = img[np.newaxis, ...]
return img