def fetch_and_detect(self): frame = cv.QueryFrame(self.capture) if frame is None: print 'Could not get frame' return cv.Flip(frame, None, 1) # detection tpl = self.detect(frame) # = (detected something?) # update webcam image if self.show_cam: cv.ShowImage('Camera', frame) return tpl
from CVtypes import cv win = 'Show Cam' cv.NamedWindow(win) cap = cv.CreateCameraCapture(0) while cv.WaitKey(1) != 27: img = cv.QueryFrame(cap) cv.ShowImage(win, img)
def detect_and_draw(img ,cascade): global age global trackedFaces global plotpoints t = cv.GetTickCount() ## start counter cv.CvtColor( img, gray, cv.BGR2GRAY ) cv.Resize( gray, small_img, cv.INTER_LINEAR ) cv.ClearMemStorage( storage ) #Ages all trackedFaces for f in trackedFaces: f.updateLife() #Remove expired faces for f in trackedFaces: if (f.isTooOld()): trackedFaces.remove(f) faces = cv.HaarDetectObjects( small_img, cascade, storage, haar_scale, min_neighbors, haar_flags, min_size ) drawline = 0 if faces: #found a face for r in faces: matchedFace = False; pt1 = cv.Point( int(r.x*image_scale), int(r.y*image_scale)) pt2 = cv.Point( int((r.x+r.width)*image_scale), int((r.y+r.height)*image_scale) ) #check if there are trackedFaces if (len(trackedFaces) > 0): #each face being tracked for f in trackedFaces: #the face is found (small movement) if ((abs(f.xpt - pt1.x) < FACE_MAX_MOVEMENT) and (abs(f.ypt - pt1.y) < FACE_MAX_MOVEMENT)): matchedFace = True; f.updateFace(int(r.width*image_scale), int(r.height*image_scale), pt1.x, pt1.y); #f.updateFace(r.width*image_scale, r.height*image_scale, pt1.x, pt1.y); mf = f; break; #if face not found, add a new face if (matchedFace == False): f = Face(0,int(r.width*image_scale), int(r.height*image_scale), pt1.x, pt1.y,0); trackedFaces.append(f); mf = f; #No tracked faces: adding one else: f = Face(0,int (r.width*image_scale), int (r.height*image_scale), pt1.x, pt1.y,0); trackedFaces.append(f); mf = f; #where to draw face and properties if (mf.age > 5): #draw attention line lnpt1 = cv.Point (int (mf.xpt*scale), int(mf.ypt*scale-5)-5) if (mf.age > mf.width): lnpt2 = cv.Point (int (mf.xpt*scale+mf.width), int(mf.ypt*scale-5)) else: lnpt2 = cv.Point (int (mf.xpt*scale+mf.age), int(mf.ypt*scale-5)) #cv.Line(img, lnpt1, lnpt2, RED, 2, 8, 0) ## drawing attention line cv.Rectangle(img, lnpt1, lnpt2, RED, 4, 8, 0) ## drawing bolded attention line ### draw eyes cv.Rectangle(img, mf.eyeLeft1, mf.eyeLeft2, MAGENTA, 3,8,0) cv.Rectangle(img, mf.eyeRight1, mf.eyeRight2, MAGENTA, 3,8,0) # ### draw mouth cv.Rectangle(img, mf.mouthTopLeft, mf.mouthBotRight, ORANGE, 3, 8, 0) # ### draw face cv.Rectangle( img, pt1, pt2, getColor(mf), 3, 8, 0 ) drawline = mf.age if(CAPTURING): saveAsJPG(img) if (osName == "nt"): cv.Flip(img, img, 0) cv.ShowImage ('Camera', img) t = cv.GetTickCount() - t ## counter for FPS print "%i fps." % (cv.GetTickFrequency()*1000000./t) ## print FPS
def detect(image): image_size = cv.GetSize(image) # create grayscale version grayscale = cv.CreateImage(image_size, 8, 1) cv.CvtColor(image, grayscale, cv.BGR2GRAY) # create storage storage = cv.CreateMemStorage(0) cv.ClearMemStorage(storage) # equalize histogram cv.EqualizeHist(grayscale, grayscale) # detect objects cascade = cv.LoadHaarClassifierCascade('haarcascade_frontalface_alt.xml', cv.Size(1, 1)) faces = cv.HaarDetectObjects(grayscale, cascade, storage, 1.2, 2, cv.HAAR_DO_CANNY_PRUNING, cv.Size(50, 50)) if faces: print 'face detected!' for i in faces: cv.Rectangle(image, cv.Point(int(i.x), int(i.y)), cv.Point(int(i.x + i.width), int(i.y + i.height)), cv.RGB(0, 255, 0), 3, 8, 0) # create windows cv.NamedWindow('Camera', cv.WINDOW_AUTOSIZE) # create capture device device = 0 # assume we want first device capture = cv.CreateCameraCapture(0) cv.SetCaptureProperty(capture, cv.CAP_PROP_FRAME_WIDTH, 640) cv.SetCaptureProperty(capture, cv.CAP_PROP_FRAME_HEIGHT, 480) # check if capture device is OK if not capture: print "Error opening capture device" sys.exit(1) while 1: # do forever # capture the current frame frame = cv.QueryFrame(capture) if frame is None: break # mirror cv.Flip(frame, None, 1) # face detection detect(frame) # display webcam image cv.ShowImage('Camera', frame) # handle events k = cv.WaitKey(10) if k == 0x1b: # ESC print 'ESC pressed. Exiting ...' break
cv.SetZero(histimg) # compute the width for each bin do display bin_w = histimg[0].width / hdims for i in range(hdims): # for all the bins # get the value, and scale to the size of the hist image val = int( round(cv.GetReal1D(hist[0].bins, i) * histimg[0].height / 255)) # compute the color color = hsv2rgb(i * 180. / hdims) # draw the rectangle in the wanted color cv.Rectangle(histimg, cv.Point(i * bin_w, histimg[0].height), cv.Point((i + 1) * bin_w, histimg[0].height - val), color, -1, 8, 0) # we can now display the images cv.ShowImage('Camera', frame) cv.ShowImage('Histogram', histimg) # handle events k = cv.WaitKey(10) if k == 0x1b: # user has press the ESC key, so exit break
cv.SetCaptureProperty(capture, cv.CAP_PROP_FRAME_HEIGHT, 480) # check if capture device is OK if not capture: print "Error opening capture device" sys.exit(1) while 1: # do forever # capture the current frame frame = cv.QueryFrame(capture) if frame is None: break # mirror cv.Flip(frame, None, 1) # face detection detect(frame) # display webcam image cv.ShowImage('Camera', frame) # handle events k = cv.WaitKey(10) if k == 0x1b: # ESC print 'ESC pressed. Exiting ...' break