Spaces:
Runtime error
Runtime error
| import cv2 | |
| from mtcnn.mtcnn import MTCNN | |
| import numpy as np | |
| def load_image(filename): | |
| """Load an image from a file path.""" | |
| img = cv2.imread(filename) | |
| return cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | |
| def normalize(img): | |
| """Normalize the given image array.""" | |
| mean, std = img.mean(), img.std() | |
| return (img - mean) / std | |
| def detect_faces_with_mtcnn(img): | |
| """Detect faces in an image using MTCNN.""" | |
| detector = MTCNN() | |
| bounding_boxes = [] | |
| detected_faces = detector.detect_faces(img) | |
| for detected_face in detected_faces: | |
| bounding_boxes.append(detected_face["box"]) | |
| return bounding_boxes | |
| # Crops out parts of an image based on a list of bounding | |
| # boxes. The cropped faces are also resized to 160x160 in | |
| # preparation for passing it to FaceNet to compute the | |
| # face embeddings. | |
| # | |
| def crop_faces_to_160x160(img, bounding_boxes): | |
| """Crop faces from an image based on detections.""" | |
| cropped_faces = [] | |
| for (x,y,w,h) in bounding_boxes: | |
| cropped_face = img[y:y+h, x:x+w] | |
| normalize(cropped_face) | |
| cropped_face = cv2.resize(cropped_face, (160, 160), interpolation=cv2.INTER_CUBIC) | |
| cropped_faces.append(cropped_face) | |
| return np.array(cropped_faces) | |
| # Extract cropped user face image | |
| # | |
| def get_user_cropped_image_from_photo(filename): | |
| # Load the image. | |
| #...# | |
| img = load_image(filename) | |
| # Detect faces and extract all bounding boxes | |
| #...# | |
| bounding_boxes = detect_faces_with_mtcnn(img) | |
| # Crop out the faces from the image | |
| #...# | |
| cropped_faces = crop_faces_to_160x160(img, bounding_boxes) | |
| if cropped_faces.shape[0] == 0: | |
| return | |
| # Take the image of only the first detected face | |
| #...# | |
| cropped_face = cropped_faces[0:1, :, :, :] | |
| # Get the face embeddings using FaceNet and return | |
| # the results. | |
| #...# | |
| return cropped_face[0] | |