From 697bddaff36c0174437acc51d72e851a180f3e65 Mon Sep 17 00:00:00 2001 From: Brigham Lysenko Date: Mon, 19 Aug 2019 14:06:49 -0600 Subject: [PATCH] finalized dpi consistency --- facelib/LandmarksProcessor.py | 1 + facelib/S3FDExtractor.py | 2 +- mainscripts/Extractor.py | 31 +++++++++++++++---------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/facelib/LandmarksProcessor.py b/facelib/LandmarksProcessor.py index 7c0b697..dd3adae 100644 --- a/facelib/LandmarksProcessor.py +++ b/facelib/LandmarksProcessor.py @@ -152,6 +152,7 @@ def get_transform_mat (image_landmarks, output_size, face_type, scale=1.0): else: raise ValueError ('wrong face_type: ', face_type) + mat = umeyama(image_landmarks[17:], landmarks_2D, True)[0:2] mat = mat * (output_size - 2 * padding) mat[:,2] += padding diff --git a/facelib/S3FDExtractor.py b/facelib/S3FDExtractor.py index 59e42f1..d729f82 100644 --- a/facelib/S3FDExtractor.py +++ b/facelib/S3FDExtractor.py @@ -70,7 +70,7 @@ class S3FDExtractor(object): if len(bboxlist) == 0: bboxlist = np.zeros((1, 5)) - bboxlist = bboxlist[self.refine_nms(bboxlist, 0.3), :] + bboxlist = bboxlist[self.refine_nms(bboxlist, 0.8), :] bboxlist = [ x[:-1].astype(np.int) for x in bboxlist if x[-1] >= 0.5] return bboxlist diff --git a/mainscripts/Extractor.py b/mainscripts/Extractor.py index da013af..70f0c13 100644 --- a/mainscripts/Extractor.py +++ b/mainscripts/Extractor.py @@ -41,7 +41,6 @@ class ExtractSubprocessor(Subprocessor): #override def on_initialize(self, client_dict): self.type = client_dict['type'] - self.image_size = client_dict['image_size'] self.face_type = client_dict['face_type'] self.device_idx = client_dict['device_idx'] self.cpu_only = client_dict['device_type'] == 'CPU' @@ -126,6 +125,8 @@ class ExtractSubprocessor(Subprocessor): else: h, w, ch = image.shape + #self.image_size = h + if ch == 1: image = np.repeat (image, 3, -1) elif ch == 4: @@ -230,20 +231,22 @@ class ExtractSubprocessor(Subprocessor): continue rect = np.array(rect) - + rect_area = mathlib.polygon_area(np.array(rect[[0, 2, 2, 0]]), np.array(rect[[1, 1, 3, 3]])) + self.image_size = int(math.sqrt(rect_area)) + print(rect_area) if self.face_type == FaceType.MARK_ONLY: image_to_face_mat = None face_image = image face_image_landmarks = image_landmarks else: image_to_face_mat = LandmarksProcessor.get_transform_mat (image_landmarks, self.image_size, self.face_type) - + #print(image_landmarks) face_image = cv2.warpAffine(image, image_to_face_mat, (self.image_size, self.image_size), cv2.INTER_LANCZOS4) face_image_landmarks = LandmarksProcessor.transform_points (image_landmarks, image_to_face_mat) landmarks_bbox = LandmarksProcessor.transform_points ( [ (0,0), (0,self.image_size-1), (self.image_size-1, self.image_size-1), (self.image_size-1,0) ], image_to_face_mat, True) - rect_area = mathlib.polygon_area(np.array(rect[[0,2,2,0]]), np.array(rect[[1,1,3,3]])) + landmarks_area = mathlib.polygon_area(landmarks_bbox[:,0], landmarks_bbox[:,1] ) if landmarks_area > 4*rect_area: #get rid of faces which umeyama-landmark-area > 4*detector-rect-area @@ -305,10 +308,9 @@ class ExtractSubprocessor(Subprocessor): return data.filename #override - def __init__(self, input_data, type, image_size=None, face_type=None, debug_dir=None, multi_gpu=False, cpu_only=False, manual=False, manual_window_size=0, final_output_path=None): + def __init__(self, input_data, type, face_type=None, debug_dir=None, multi_gpu=False, cpu_only=False, manual=False, manual_window_size=0, final_output_path=None): self.input_data = input_data self.type = type - self.image_size = image_size self.face_type = face_type self.debug_dir = debug_dir self.final_output_path = final_output_path @@ -361,7 +363,6 @@ class ExtractSubprocessor(Subprocessor): #override def process_info_generator(self): base_dict = {'type' : self.type, - 'image_size': self.image_size, 'face_type': self.face_type, 'debug_dir': self.debug_dir, 'final_output_dir': str(self.final_output_path), @@ -731,7 +732,6 @@ def extract_fanseg(input_dir, device_args={} ): data = ExtractSubprocessor ([ ExtractSubprocessor.Data(filename) for filename in paths_to_extract ], 'fanseg', multi_gpu=multi_gpu, cpu_only=cpu_only).run() def extract_umd_csv(input_file_csv, - image_size=256, face_type='full_face', device_args={} ): @@ -798,7 +798,7 @@ def extract_umd_csv(input_file_csv, data = ExtractSubprocessor (data, 'landmarks', multi_gpu=multi_gpu, cpu_only=cpu_only).run() io.log_info ('Performing 3rd pass...') - data = ExtractSubprocessor (data, 'final', image_size, face_type, None, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False, final_output_path=output_path).run() + data = ExtractSubprocessor (data, 'final', face_type, None, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False, final_output_path=output_path).run() faces_detected += sum([d.faces_detected for d in data]) @@ -814,7 +814,6 @@ def main(input_dir, manual_fix=False, manual_output_debug_fix=False, manual_window_size=1368, - image_size=256, face_type='full_face', device_args={}): @@ -867,16 +866,16 @@ def main(input_dir, if images_found != 0: if detector == 'manual': io.log_info ('Performing manual extract...') - data = ExtractSubprocessor ([ ExtractSubprocessor.Data(filename) for filename in input_path_image_paths ], 'landmarks', image_size, face_type, debug_dir, cpu_only=cpu_only, manual=True, manual_window_size=manual_window_size).run() + data = ExtractSubprocessor ([ ExtractSubprocessor.Data(filename) for filename in input_path_image_paths ], 'landmarks', face_type, debug_dir, cpu_only=cpu_only, manual=True, manual_window_size=manual_window_size).run() else: io.log_info ('Performing 1st pass...') - data = ExtractSubprocessor ([ ExtractSubprocessor.Data(filename) for filename in input_path_image_paths ], 'rects-'+detector, image_size, face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False).run() + data = ExtractSubprocessor ([ ExtractSubprocessor.Data(filename) for filename in input_path_image_paths ], 'rects-'+detector, face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False).run() io.log_info ('Performing 2nd pass...') - data = ExtractSubprocessor (data, 'landmarks', image_size, face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False).run() + data = ExtractSubprocessor (data, 'landmarks', face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False).run() io.log_info ('Performing 3rd pass...') - data = ExtractSubprocessor (data, 'final', image_size, face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False, final_output_path=output_path).run() + data = ExtractSubprocessor (data, 'final', face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False, final_output_path=output_path).run() faces_detected += sum([d.faces_detected for d in data]) if manual_fix: @@ -885,8 +884,8 @@ def main(input_dir, else: fix_data = [ ExtractSubprocessor.Data(d.filename) for d in data if d.faces_detected == 0 ] io.log_info ('Performing manual fix for %d images...' % (len(fix_data)) ) - fix_data = ExtractSubprocessor (fix_data, 'landmarks', image_size, face_type, debug_dir, manual=True, manual_window_size=manual_window_size).run() - fix_data = ExtractSubprocessor (fix_data, 'final', image_size, face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False, final_output_path=output_path).run() + fix_data = ExtractSubprocessor (fix_data, 'landmarks', face_type, debug_dir, manual=True, manual_window_size=manual_window_size).run() + fix_data = ExtractSubprocessor (fix_data, 'final', face_type, debug_dir, multi_gpu=multi_gpu, cpu_only=cpu_only, manual=False, final_output_path=output_path).run() faces_detected += sum([d.faces_detected for d in fix_data])