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
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
frame = cv.QueryFrame (capture) # ### get size of the frame frame_size = cv.GetSize (frame) gray = cv.CreateImage( frame_size, 8, 1 ) small_img = cv.CreateImage( cv.Size( int(frame_size.width/image_scale),int(frame_size.height/image_scale)), 8, 1 ) cascade = cv.LoadHaarClassifierCascade( cascade_name, cv.Size(1,1) ) # while 1: # do forever # capture the current image frame = cv.QueryFrame (capture) if frame is None: # no image captured... end the processing break # ### check OS if (osName == "nt"): cv.Flip(frame, frame, 0) else: cv.Flip(frame, None, 1) # ### detecting faces here detect_and_draw(frame, cascade) # ### handle key events k = cv.WaitKey (5) if k % 0x100 == 27: # user has press the ESC key, so exit cv.DestroyWindow('Camera'); break
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
hsv = cv.CreateImage(frame_size, 8, 3) # create the histogram hist = cv.CreateHist(1, [hdims], cv.HIST_ARRAY, hranges, 1) while 1: # do forever # 1. capture the current image frame = cv.QueryFrame(capture) if frame is None: # no image captured... end the processing break # mirror the captured image cv.Flip(frame, None, 1) # compute the hsv version of the image cv.CvtColor(frame, hsv, cv.BGR2HSV) # compute which pixels are in the wanted range cv.InRangeS(hsv, hsv_min, hsv_max, mask) # extract the hue from the hsv array cv.Split(hsv, hue, None, None, None) # select the rectangle of interest in the hue/mask arrays cv.SetImageROI(hue, selection) cv.SetImageROI(mask, selection) # it's time to compute the histogram