data_util.py 1.19 KB
import cv2
import numpy as np
import base64
from skimage import transform as trans

def base64_to_img(imgBase64):
    img_b64decode = base64.b64decode(imgBase64)
    img_array = np.fromstring(img_b64decode, np.uint8)
    ori_image = cv2.imdecode(img_array, cv2.IMREAD_COLOR)

    return ori_image

def preprocess(image, landmarks):
    src = np.array([[38.2946, 51.6963],
                    [73.5318, 51.6963],
                    [56.0252, 71.7366],
                    [41.5493, 92.3655],
                    [70.7299, 92.3655] ], dtype=np.float32)

    landmarks = np.array(landmarks)
    dst = landmarks.astype(np.float32)
    tform = trans.SimilarityTransform()
    tform.estimate(dst, src)
    M = tform.params[0:2,:]
    warped = cv2.warpAffine(image, M, (112, 112), borderValue=0.0)
    return warped

def get_norm_face(image, landmarks):
    norm_image = preprocess(image, landmarks)
    # norm_image = cv2.cvtColor(norm_image, cv2.COLOR_BGR2RGB).astype(np.float32)
    # norm_image = cv2.resize(norm_image, (112, 112))
    # norm_image = norm_image.transpose((2, 0, 1))
    # norm_image = norm_image.transpose((1,2,0))
    # norm_image = cv2.resize(norm_image, (112, 112))[:,:,::-1]
    return norm_image