Пример #1
0
    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
Пример #2
0
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
Пример #3
0
    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
Пример #4
0
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
Пример #5
0
    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