def convert(self, converter, item): try: (filename, image, faces) = item skip = self.check_skipframe(filename) if self.arguments.discard_frames and skip: return if not skip: # process frame as normal for idx, face in faces: if self.input_aligned_dir is not None and self.check_skipface( filename, idx): print('face {} for frame {} was deleted, skipping'. format(idx, os.path.basename(filename))) continue # Check for image rotations and rotate before mapping face if face.r != 0: image = rotate_image(image, face.r) image = converter.patch_image( image, face, 64 if "128" not in self.arguments.trainer else 128) # TODO: This switch between 64 and 128 is a hack for now. We should have a separate cli option for size image = rotate_image(image, face.r * -1) else: image = converter.patch_image( image, face, 64 if "128" not in self.arguments.trainer else 128) # TODO: This switch between 64 and 128 is a hack for now. We should have a separate cli option for size output_file = get_folder(self.output_dir) / Path(filename).name cv2.imwrite(str(output_file), image) except Exception as e: print('Failed to convert image: {}. Reason: {}'.format( filename, e))
def get_faces_alignments(self, filename, image): faces_count = 0 faces = self.faces_detected[os.path.basename(filename)] for rawface in faces: face = DetectedFace(**rawface) # Rotate the image if necessary if face.r != 0: image = rotate_image(image, face.r) face.image = image[face.y:face.y + face.h, face.x:face.x + face.w] if self.filter is not None and not self.filter.check(face): print('Skipping not recognized face!') continue yield faces_count, face self.num_faces_detected += 1 faces_count += 1 if faces_count > 1 and self.arguments.verbose: print('Note: Found more than one face in an image! File: %s' % filename) self.verify_output = True