X-Git-Url: http://git.maemo.org/git/?p=opencv;a=blobdiff_plain;f=samples%2Fswig_python%2Ffacedetect.py;fp=samples%2Fswig_python%2Ffacedetect.py;h=73eef6e18b78b638730b98e4b6cc974b0bf546ed;hp=0000000000000000000000000000000000000000;hb=e4c14cdbdf2fe805e79cd96ded236f57e7b89060;hpb=454138ff8a20f6edb9b65a910101403d8b520643 diff --git a/samples/swig_python/facedetect.py b/samples/swig_python/facedetect.py new file mode 100755 index 0000000..73eef6e --- /dev/null +++ b/samples/swig_python/facedetect.py @@ -0,0 +1,128 @@ +#!/usr/bin/python +""" +This program is demonstration for face and object detection using haar-like features. +The program finds faces in a camera image or video stream and displays a red box around them. + +Original C implementation by: ? +Python implementation by: Roman Stanchak +""" +import sys +from opencv.cv import * +from opencv.highgui import * + + +# Global Variables +cascade = None +storage = cvCreateMemStorage(0) +cascade_name = "../../data/haarcascades/haarcascade_frontalface_alt.xml" +input_name = "../c/lena.jpg" + +# Parameters for haar detection +# From the API: +# The default parameters (scale_factor=1.1, min_neighbors=3, flags=0) are tuned +# for accurate yet slow object detection. For a faster operation on real video +# images the settings are: +# scale_factor=1.2, min_neighbors=2, flags=CV_HAAR_DO_CANNY_PRUNING, +# min_size= 1: + + if sys.argv[1].startswith("--cascade="): + cascade_name = sys.argv[1][ len("--cascade="): ] + if len(sys.argv) > 2: + input_name = sys.argv[2] + + elif sys.argv[1] == "--help" or sys.argv[1] == "-h": + print "Usage: facedetect --cascade=\"\" [filename|camera_index]\n" + sys.exit(-1) + + else: + input_name = sys.argv[1] + + # the OpenCV API says this function is obsolete, but we can't + # cast the output of cvLoad to a HaarClassifierCascade, so use this anyways + # the size parameter is ignored + cascade = cvLoadHaarClassifierCascade( cascade_name, cvSize(1,1) ) + + if not cascade: + print "ERROR: Could not load classifier cascade" + sys.exit(-1) + + + if input_name.isdigit(): + capture = cvCreateCameraCapture( int(input_name) ) + else: + capture = cvCreateFileCapture( input_name ) + + cvNamedWindow( "result", 1 ) + + if capture: + frame_copy = None + while True: + frame = cvQueryFrame( capture ) + if not frame: + cvWaitKey(0) + break + if not frame_copy: + frame_copy = cvCreateImage( cvSize(frame.width,frame.height), + IPL_DEPTH_8U, frame.nChannels ) + if frame.origin == IPL_ORIGIN_TL: + cvCopy( frame, frame_copy ) + else: + cvFlip( frame, frame_copy, 0 ) + + detect_and_draw( frame_copy ) + + if( cvWaitKey( 10 ) >= 0 ): + break + + else: + image = cvLoadImage( input_name, 1 ) + + if image: + detect_and_draw( image ) + cvWaitKey(0) + + cvDestroyWindow("result")