def align_face(self, faces, align_eyes, size, filename): """ Align the detected face and add the destination file path """ final_faces = list() image = faces["image"] landmarks = faces["landmarks"] detected_faces = faces["detected_faces"] for idx, face in enumerate(detected_faces): detected_face = DetectedFace() detected_face.from_bounding_box(face, image) detected_face.landmarksXY = landmarks[idx] detected_face.load_aligned(image, size=size, align_eyes=align_eyes) final_faces.append({"file_location": self.output_dir / Path(filename).stem, "face": detected_face}) faces["detected_faces"] = final_faces
def detect_faces(self, filename, image): """ Extract the face from a frame (If alignments file not found) """ inp = {"filename": filename, "image": image} self.extractor.input_queue.put(inp) faces = next(self.extractor.detected_faces()) landmarks = faces["landmarks"] detected_faces = faces["detected_faces"] final_faces = list() for idx, face in enumerate(detected_faces): detected_face = DetectedFace() detected_face.from_bounding_box(face) detected_face.landmarksXY = landmarks[idx] final_faces.append(detected_face) return final_faces
def load_aligned_face(self): """ Align the faces for vgg_face input """ for filename, face in self.filters.items(): logger.debug("Loading aligned face: '%s'", filename) bounding_box = face["detected_faces"][0] image = face["image"] landmarks = face["landmarks"][0] detected_face = DetectedFace() detected_face.from_bounding_box(bounding_box, image) detected_face.landmarksXY = landmarks detected_face.load_aligned(image, size=224) face["face"] = detected_face.aligned_face del face["image"] logger.debug("Loaded aligned face: ('%s', shape: %s)", filename, face["face"].shape)
def detect_faces(self, filename, image): """ Extract the face from a frame (If alignments file not found) """ inp = {"filename": filename, "image": image} self.extractor.input_queue.put(inp) faces = next(self.extractor.detected_faces()) landmarks = faces["landmarks"] detected_faces = faces["detected_faces"] final_faces = list() for idx, face in enumerate(detected_faces): detected_face = DetectedFace() detected_face.from_bounding_box(face) detected_face.landmarksXY = landmarks[idx] final_faces.append(detected_face) return final_faces