-
Notifications
You must be signed in to change notification settings - Fork 0
/
camera_facedetection.py
58 lines (48 loc) · 1.96 KB
/
camera_facedetection.py
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import cv2
from time import time
from tools.control import timer_manager
from tools.drawing import annotate_objects
from tools.processing import *
from tools.detection import *
scale = 0.75
cam = cv2.VideoCapture(0) # Define camera
# %% Camera loop
scale_camera = 0.9
scale_classifier = 0.4
scale_facial = 0.5
cv2.namedWindow("FaceDetector", cv2.WND_PROP_FULLSCREEN);
cv2.setWindowProperty("FaceDetector", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN);
while (True):
# with timer_manager():
start_time = time()
# with timer_manager("FrameGrab"):
img = resize(grab_frame(cam), scale_camera)
# with timer_manager("Detection"):
gs_img = resize(convert_to_gs(img), scale_classifier)
faces = detect_object(gs_img, 'face_front', img)
if len(faces) != 0:
annotate_objects(img, faces, 'Face (frontal)', 1)
for i, (x,y,w,h) in enumerate(faces):
face_crop = img[y:y+h+20, x:x+w]
# cv2.imshow('Face {}'.format(i), face_crop)
eyes = detect_object(resize(face_crop, scale_facial), 'eye', face_crop, minNeighbors=40)
mouths = detect_object(resize(face_crop, scale_facial), 'mouth', face_crop, minNeighbors=160)
eyes = [(x_+x, y_+y, w, h) for (x_, y_, w, h) in eyes]
if len(eyes) != 0:
annotate_objects(img, eyes, 'Eye', 2)
mouths = [(x_ + x, y_ + y, w, h) for (x_, y_, w, h) in mouths]
if len(mouths) != 0:
annotate_objects(img, mouths, 'Smile', 3)
# with timer_manager("Draw"):
end_time = time()
fps = 1/(end_time-start_time)
cv2.rectangle(img, (0, 0), (150, 40), (0, 0, 0), -1)
annotation_str = "FPS: {:.2f}".format(fps)
cv2.putText(img, annotation_str, (10, 30),
fontFace=cv2.QT_FONT_NORMAL, fontScale=0.75, color=(255,255,255))
cv2.imshow('FaceDetector', img)
# cv2.imshow('frame', edges_horizontal)q;q
if cv2.waitKey(1) & 0xFF == ord(']'):
break
cam.release()
cv2.destroyAllWindows()