Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/samples/python/facedetect.py
16337 views
1
#!/usr/bin/env python
2
3
'''
4
face detection using haar cascades
5
6
USAGE:
7
facedetect.py [--cascade <cascade_fn>] [--nested-cascade <cascade_fn>] [<video_source>]
8
'''
9
10
# Python 2/3 compatibility
11
from __future__ import print_function
12
13
import numpy as np
14
import cv2 as cv
15
16
# local modules
17
from video import create_capture
18
from common import clock, draw_str
19
20
21
def detect(img, cascade):
22
rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30),
23
flags=cv.CASCADE_SCALE_IMAGE)
24
if len(rects) == 0:
25
return []
26
rects[:,2:] += rects[:,:2]
27
return rects
28
29
def draw_rects(img, rects, color):
30
for x1, y1, x2, y2 in rects:
31
cv.rectangle(img, (x1, y1), (x2, y2), color, 2)
32
33
if __name__ == '__main__':
34
import sys, getopt
35
print(__doc__)
36
37
args, video_src = getopt.getopt(sys.argv[1:], '', ['cascade=', 'nested-cascade='])
38
try:
39
video_src = video_src[0]
40
except:
41
video_src = 0
42
args = dict(args)
43
cascade_fn = args.get('--cascade', "../../data/haarcascades/haarcascade_frontalface_alt.xml")
44
nested_fn = args.get('--nested-cascade', "../../data/haarcascades/haarcascade_eye.xml")
45
46
cascade = cv.CascadeClassifier(cascade_fn)
47
nested = cv.CascadeClassifier(nested_fn)
48
49
cam = create_capture(video_src, fallback='synth:bg=../data/lena.jpg:noise=0.05')
50
51
while True:
52
ret, img = cam.read()
53
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
54
gray = cv.equalizeHist(gray)
55
56
t = clock()
57
rects = detect(gray, cascade)
58
vis = img.copy()
59
draw_rects(vis, rects, (0, 255, 0))
60
if not nested.empty():
61
for x1, y1, x2, y2 in rects:
62
roi = gray[y1:y2, x1:x2]
63
vis_roi = vis[y1:y2, x1:x2]
64
subrects = detect(roi.copy(), nested)
65
draw_rects(vis_roi, subrects, (255, 0, 0))
66
dt = clock() - t
67
68
draw_str(vis, (20, 20), 'time: %.1f ms' % (dt*1000))
69
cv.imshow('facedetect', vis)
70
71
if cv.waitKey(5) == 27:
72
break
73
cv.destroyAllWindows()
74
75