From 74d2f98883ac9a1eb97f21e27109e949e67a6a7d Mon Sep 17 00:00:00 2001 From: Libo-Xu <55094824+Libo-Xu@users.noreply.github.com> Date: Thu, 1 Jul 2021 10:40:11 +0800 Subject: [PATCH] Finish the TODO in function "preprocess_face" Resize the detected face image proportionally then add black pixels to resize it to target_size, which avoids the transformation on the detected faces resulting from resizing directly. --- deepface/commons/functions.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/deepface/commons/functions.py b/deepface/commons/functions.py index 4ed5de3..2e32b38 100644 --- a/deepface/commons/functions.py +++ b/deepface/commons/functions.py @@ -124,9 +124,22 @@ def preprocess_face(img, target_size=(224, 224), grayscale = False, enforce_dete if grayscale == True: img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) - img = cv2.resize(img, target_size) - #TODO: resize causes transformation on base image, you should add black pixels to rezie it to target_size + # img = cv2.resize(img, target_size) + + # First resize the longer side to the target size + factor = target_size[0] / max(img.shape) # Suppose target_size[0] == target_size[1] + dsize = (int(img.shape[1] * factor), int(img.shape[0] * factor)) + img = cv2.resize(img, dsize) + # Then pad the other side to the target size by adding black pixels + diff_0 = target_size[0] - img.shape[0] + diff_1 = target_size[1] - img.shape[1] + if grayscale == False: + # Put the base image in the middle of the padded image + img = np.pad(img, ((diff_0 // 2, diff_0 - diff_0 // 2), (diff_1 // 2, diff_1 - diff_1 // 2), (0, 0)), 'constant') + else: + img = np.pad(img, ((diff_0 // 2, diff_0 - diff_0 // 2), (diff_1 // 2, diff_1 - diff_1 // 2)), 'constant') + img_pixels = image.img_to_array(img) img_pixels = np.expand_dims(img_pixels, axis = 0) img_pixels /= 255 #normalize input in [0, 1]