1
+ import cv2
2
+
3
+
4
+ eyes = cv2 .CascadeClassifier ("haarcascades/haarcascade_eye.xml" )
5
+ face = cv2 .CascadeClassifier ("haarcascades/haarcascade_frontalface_alt.xml" )
6
+ image = cv2 .imread ("glasses.png" , - 1 )
7
+ capture = cv2 .VideoCapture (0 )
8
+
9
+ def deal_with_it (eyes_cascade , face_cascade , glasses_img ):
10
+ '''live meme generator'''
11
+
12
+ #mask
13
+ glasses_mask = glasses_img [:, :, 3 ]
14
+ glasses_mask_inv = cv2 .bitwise_not (glasses_mask )
15
+
16
+ glasses_img = glasses_img [:, :, 0 :3 ]
17
+ orig_glasses_height , orig_glasses_width = glasses_img .shape [:2 ]
18
+
19
+ while (True ):
20
+ # Capture video feed
21
+ unused , img = capture .read ()
22
+ frame = cv2 .flip (img , 1 )
23
+
24
+ # grayscale
25
+ gray = cv2 .cvtColor (frame , cv2 .COLOR_BGR2GRAY )
26
+
27
+ faces = face_cascade .detectMultiScale (gray ,scaleFactor = 1.1 ,minNeighbors = 5 ,minSize = (30 , 30 ),flags = cv2 .CASCADE_SCALE_IMAGE )
28
+
29
+ for (x , y , w , h ) in faces :
30
+
31
+ roi_gray = gray [y :y + h , x :x + w ]
32
+ roi_color = frame [y :y + h , x :x + w ]
33
+
34
+ eyes = eyes_cascade .detectMultiScale (roi_gray )
35
+
36
+ for (nx ,ny ,nw ,nh ) in eyes :
37
+
38
+ glasses_width = nw * 4
39
+ glasses_height = orig_glasses_height * 2
40
+ area = glasses_width * glasses_height
41
+
42
+ # possition
43
+ x1 = nx - glasses_width * 2
44
+ x2 = nx + nw + glasses_width * 2
45
+ y1 = ny + nh - glasses_height
46
+ y2 = ny + nh + glasses_height
47
+
48
+ # black magic
49
+ if x1 < 0 :
50
+ x1 = 0
51
+ if x2 > w :
52
+ x2 = w
53
+ if y1 < 0 :
54
+ y1 = 0
55
+ if y2 > h :
56
+ y2 = h
57
+
58
+ # adjust bassed on black magic
59
+ glasses_height = y2 - y1
60
+ glasses_width = x2 - x1
61
+
62
+ # rescale
63
+ glasses = cv2 .resize (glasses_img , (glasses_width ,glasses_height ), interpolation = cv2 .INTER_AREA )
64
+ mask = cv2 .resize (glasses_mask , (glasses_width ,glasses_height ), interpolation = cv2 .INTER_AREA )
65
+ mask_inv = cv2 .resize (glasses_mask_inv , (glasses_width ,glasses_height ), interpolation = cv2 .INTER_AREA )
66
+
67
+ # some more black magic
68
+ roi = roi_color [y1 :y2 , x1 :x2 ]
69
+
70
+ # difference between regions of interest
71
+ roi_bg = cv2 .bitwise_and (roi ,roi ,mask = mask_inv )
72
+ roi_fg = cv2 .bitwise_and (glasses ,glasses ,mask = mask )
73
+
74
+ # combine regions
75
+ dst = cv2 .add (roi_bg ,roi_fg )
76
+ roi_color [y1 :y2 , x1 :x2 ] = dst
77
+
78
+ break
79
+
80
+ # video feed
81
+ cv2 .imshow ("Deal With It @ SalemStateMemes.edu" , frame )
82
+
83
+ #exit
84
+ if cv2 .waitKey (1 ) == 27 : #esc key
85
+ break
86
+
87
+ capture .release ()
88
+ cv2 .destroyAllWindows ()
89
+
90
+ if __name__ == '__main__' :
91
+ deal_with_it (eyes , face , image )
0 commit comments