File size: 1,149 Bytes
7d1cd50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import cv2
import numpy as np
from helper.utils import points2array

def blur_all_faces(input_imag,landmark_files):
    detector,predictor = landmark_files
    msg = None
    detections = detector(input_imag, 1)
    if len(detections) == 0:
        msg = "No faces detected"
        return input_imag, msg
    
    canvas = input_imag.copy()
    for rect in detections:
        landmarks = predictor(input_imag, rect)
        landmarks = points2array(landmarks.parts())
        indices = list(range(16)) + [26,25,24,19,18,17,0]
        pts = np.array(landmarks)[indices].reshape(-1,1,2)        
        canvas = cv2.fillPoly(canvas,[pts],(255,255,255))
        canvas = cv2.cvtColor(canvas,cv2.COLOR_BGR2GRAY)
        face_mask = cv2.threshold(canvas, 250, 255, cv2.THRESH_BINARY)[1]
        face_mask_in = cv2.bitwise_not(face_mask)
        blurred_face = cv2.GaussianBlur(input_imag, (37, 37), 150)
        blurred_face = cv2.bitwise_and(blurred_face, blurred_face, mask=face_mask_inv)
        bg = cv2.bitwise_and(input_imag, input_imag, mask=face_mask_in)
        input_img = cv2.bitwise_or(bg,blurred_face)

        return input_img,msg