From c3ef6e866f7d8569cf561fb3524485eed43c9895 Mon Sep 17 00:00:00 2001 From: Alexander Mordvintsev Date: Thu, 7 Jul 2011 22:33:36 +0000 Subject: [PATCH] facedetect.py sample works --- samples/python2/facedetect.py | 38 +++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/samples/python2/facedetect.py b/samples/python2/facedetect.py index 29b744730..4eed36f6e 100644 --- a/samples/python2/facedetect.py +++ b/samples/python2/facedetect.py @@ -1,22 +1,52 @@ import numpy as np -import cv2 +import cv2, cv from video import create_capture +help_message = ''' +USAGE: facedetect.py [--cascade ] [--nested-cascade ] [] +''' + +def detect(img, cascade): + rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30)) + if len(rects) == 0: + return [] + rects[:,2:] += rects[:,:2] + return rects + +def draw_rects(img, rects, color): + for x1, y1, x2, y2 in rects: + cv2.rectangle(img, (x1, y1), (x2, y2), color) + if __name__ == '__main__': import sys, getopt + print help_message args, video_src = getopt.getopt(sys.argv[1:], '', ['cascade=', 'nested-cascade=']) try: video_src = video_src[0] - except: video_src = '0' + except: video_src = 'synth:bg=../cpp/lena.jpg:noise=0.05' + args = dict(args) cascade_fn = args.get('--cascade', "../../data/haarcascades/haarcascade_frontalface_alt.xml") - nested_fn = args.get('--nested-cascade', "../../data/haarcascades/haarcascade_eye.xml.xml") + nested_fn = args.get('--nested-cascade', "../../data/haarcascades/haarcascade_eye.xml") + cascade = cv2.CascadeClassifier(cascade_fn) + nested = cv2.CascadeClassifier(nested_fn) cam = create_capture(video_src) while True: ret, img = cam.read() - cv2.imshow('facedetect', img) + gray = cv2.cvtColor(img, cv.CV_BGR2GRAY) + gray = cv2.equalizeHist(gray) + rects = detect(gray, cascade) + vis = cv2.cvtColor(gray, cv.CV_GRAY2BGR) + draw_rects(vis, rects, (0, 255, 0)) + for x1, y1, x2, y2 in rects: + roi = gray[y1:y2, x1:x2] + vis_roi = vis[y1:y2, x1:x2] + subrects = detect(roi.copy(), nested) + draw_rects(vis_roi, subrects, (255, 0, 0)) + + cv2.imshow('facedetect', vis) if cv2.waitKey(5) == 27: break