Spaces:
Runtime error
Runtime error
import cv2 | |
import numpy as np | |
import modules.config | |
faceRestoreHelper = None | |
def align_warp_face(self, landmark, border_mode='constant'): | |
affine_matrix = cv2.estimateAffinePartial2D(landmark, self.face_template, method=cv2.LMEDS)[0] | |
self.affine_matrices.append(affine_matrix) | |
if border_mode == 'constant': | |
border_mode = cv2.BORDER_CONSTANT | |
elif border_mode == 'reflect101': | |
border_mode = cv2.BORDER_REFLECT101 | |
elif border_mode == 'reflect': | |
border_mode = cv2.BORDER_REFLECT | |
input_img = self.input_img | |
cropped_face = cv2.warpAffine(input_img, affine_matrix, self.face_size, | |
borderMode=border_mode, borderValue=(135, 133, 132)) | |
return cropped_face | |
def crop_image(img_rgb): | |
global faceRestoreHelper | |
if faceRestoreHelper is None: | |
from extras.facexlib.utils.face_restoration_helper import FaceRestoreHelper | |
faceRestoreHelper = FaceRestoreHelper( | |
upscale_factor=1, | |
model_rootpath=modules.config.path_controlnet, | |
device='cpu' # use cpu is safer since we are out of memory management | |
) | |
faceRestoreHelper.clean_all() | |
faceRestoreHelper.read_image(np.ascontiguousarray(img_rgb[:, :, ::-1].copy())) | |
faceRestoreHelper.get_face_landmarks_5() | |
landmarks = faceRestoreHelper.all_landmarks_5 | |
# landmarks are already sorted with confidence. | |
if len(landmarks) == 0: | |
print('No face detected') | |
return img_rgb | |
else: | |
print(f'Detected {len(landmarks)} faces') | |
result = align_warp_face(faceRestoreHelper, landmarks[0]) | |
return np.ascontiguousarray(result[:, :, ::-1].copy()) | |