Beispiel #1
0
    def donttest_detector_train(
            self):  # TODO: Cascade training fails for Version OpenCV 2.0

        positives = []
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        n = len(self.eyes.files())
        for filename in self.eyes.files()[:n / 2]:
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            faces = self.eyes.getFaces(img.filename)
            positives.append(
                [os.path.join(SCRAPS_FACE_DATA, img.filename), faces])

        neg_files = []
        for im_name in os.listdir(NONFACE_DATA):
            if im_name[-4:] != ".jpg": continue
            neg_files.append(os.path.join(NONFACE_DATA, im_name))

        fd = trainHaarClassifier(positives,
                                 neg_files,
                                 nstages=6,
                                 maxtreesplits=0,
                                 max_run_time=300)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth, rects, im=img)

        self.assertAlmostEqual(fdt.pos_rate, 0.9942196531791907)
Beispiel #2
0
    def donttest_detector_train(self): # TODO: Cascade training fails for Version OpenCV 2.0

        positives = []    
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        n = len(self.eyes.files())    
        for filename in self.eyes.files()[:n/2]:
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            faces = self.eyes.getFaces(img.filename)
            positives.append([os.path.join(SCRAPS_FACE_DATA,img.filename),faces])   
            
        neg_files = []
        for im_name in os.listdir(NONFACE_DATA):    
            if im_name[-4:] != ".jpg": continue
            neg_files.append(os.path.join(NONFACE_DATA,im_name))

        fd = trainHaarClassifier(positives,neg_files,nstages=6,maxtreesplits=0,max_run_time=300)
        fdt = FaceDetectionTest(name='scraps')
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.9942196531791907 )
Beispiel #3
0
class _TestSVMEyeDetector(unittest.TestCase):
    def setUp(self):
        self.images = []
        self.names = []

        SCRAPS_FACE_DATA = os.path.join(pv.__path__[0], "data",
                                        "csuScrapShots")

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            self.images.append(img)
            self.names.append(filename)

        self.assert_(len(self.images) == 173)

    def test_training(self):
        '''
        This trains the FaceFinder on the scraps database.
        '''
        #import cProfile

        # Load an eyes file
        eyes_filename = join(pv.__path__[0], 'data', 'csuScrapShots',
                             'coords.txt')
        #print "Creating eyes File."
        eyes_file = EyesFile(eyes_filename)

        # Create a face detector
        cascade_file = join(pv.__path__[0], 'config',
                            'facedetector_celebdb2.xml')
        #print "Creating a face detector from:",cascade_file
        face_detector = CascadeDetector(cascade_file)

        image_dir = join(pv.__path__[0], 'data', 'csuScrapShots')

        ed = SVMEyeDetectorFromDatabase(eyes_file,
                                        image_dir,
                                        image_ext=".pgm",
                                        face_detector=face_detector,
                                        random_seed=0)
        edt = EyeDetectionTest(name='scraps')

        #print "Testing..."
        for img in self.images:
            #print img.filename
            faces = ed.detect(img)

            #faces = ed.detect(img)
            pred_eyes = []
            for _, _, pleye, preye in faces:
                #detections.append(rect)
                pred_eyes.append((pleye, preye))

            truth_eyes = self.eyes.getEyes(img.filename)
            edt.addSample(truth_eyes, pred_eyes, im=img, annotate=False)

        #print edt.createSummary()
        self.assertAlmostEqual(edt.face_rate, 0.924855491329, places=3)
Beispiel #4
0
    def setUp(self):
        self.images = []
        self.names = []

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            self.images.append(img)
            self.names.append(filename)

        self.assert_(len(self.images) == 173)
Beispiel #5
0
class _TestSVMEyeDetector(unittest.TestCase):
    def setUp(self):
        self.images = []
        self.names = []
        
        SCRAPS_FACE_DATA = os.path.join(pv.__path__[0],"data","csuScrapShots")
        
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            self.images.append(img)
            self.names.append(filename)
        
        self.assert_( len(self.images) == 173 )
    
    def test_training(self):
        '''
        This trains the FaceFinder on the scraps database.
        '''
        #import cProfile

        # Load an eyes file
        eyes_filename = join(pv.__path__[0],'data','csuScrapShots','coords.txt')
        #print "Creating eyes File."
        eyes_file = EyesFile(eyes_filename)
        
        # Create a face detector
        cascade_file = join(pv.__path__[0],'config','facedetector_celebdb2.xml')
        #print "Creating a face detector from:",cascade_file
        face_detector = CascadeDetector(cascade_file)

        image_dir = join(pv.__path__[0],'data','csuScrapShots')
        
        ed = SVMEyeDetectorFromDatabase(eyes_file, image_dir, image_ext=".pgm", face_detector=face_detector,random_seed=0)
        edt = EyeDetectionTest(name='scraps')

        #print "Testing..."
        for img in self.images:
            #print img.filename
            faces = ed.detect(img)

            #faces = ed.detect(img)
            pred_eyes = []
            for _,_,pleye,preye in faces:
                #detections.append(rect)
                pred_eyes.append((pleye,preye))

            truth_eyes = self.eyes.getEyes(img.filename)
            edt.addSample(truth_eyes, pred_eyes, im=img, annotate=False)
        
        #print edt.createSummary()
        self.assertAlmostEqual( edt.face_rate ,   0.924855491329, places = 3 )
Beispiel #6
0
 def setUp(self):
     SCRAPS_FACE_DATA = os.path.join(pv.__path__[0],"data","csuScrapShots")
     self.test_images = []
     self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
     for filename in self.eyes.files()[0:10]:
         im = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
         eyes = self.eyes.getEyes(filename)
         #print eyes
         affine = pv.AffineFromPoints(eyes[0][0],eyes[0][1],pv.Point(40,40),pv.Point(88,40),(128,128))
         im = affine.transformImage(im)
         
         self.test_images.append(im)
Beispiel #7
0
    def test_detect_scraps_celeb1(self):
        fd = CascadeDetector(CELEB1_CASCADE)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.76878612716763006, places = 2 ) # TODO: Version 2 performance is better
Beispiel #8
0
    def test_face_detection_pickle(self):
        fd = CascadeDetector(OPENCV_CASCADE)
        
        fdt = FaceDetectionTest(name='scraps')

        data_buffer = pickle.dumps(fd)
        fd = pickle.loads(data_buffer)
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.98265895953757221, places = 2 ) # TODO: Version 2 performance is better
Beispiel #9
0
 def setUp(self):
     self.images = []
     self.names = []
     
     self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
     for filename in self.eyes.files():
         img = Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
         self.images.append(img)
         self.names.append(filename)
     
     self.assert_( len(self.images) == 173 )
Beispiel #10
0
 def setUp(self):
     SCRAPS_FACE_DATA = os.path.join(pv.__path__[0],"data","csuScrapShots")
     self.test_images = []
     self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
     for filename in self.eyes.files()[0:10]:
         im = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
         eyes = self.eyes.getEyes(filename)
         #print eyes
         affine = pv.AffineFromPoints(eyes[0][0],eyes[0][1],pv.Point(40,40),pv.Point(88,40),(128,128))
         im = affine.transformImage(im)
         
         self.test_images.append(im)
Beispiel #11
0
    def test_detect_scraps_celeb1(self):
        fd = CascadeDetector(CELEB1_CASCADE)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.76878612716763006, places = 2 ) # TODO: Version 2 performance is better
 def setUp(self):
     self.images = []
     self.names = []
     
     SCRAPS_FACE_DATA = os.path.join(pv.__path__[0],"data","csuScrapShots")
     
     
     self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
     for filename in self.eyes.files():
         img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
         self.images.append(img)
         self.names.append(filename)
     
     self.assert_( len(self.images) == 173 )
Beispiel #13
0
class _TestFacePCA(unittest.TestCase):
    def setUp(self):
        self.images = []
        self.names = []

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            self.images.append(img)
            self.names.append(filename)

        self.assert_(len(self.images) == 173)

    def test_pca_scraps(self):
        face_test = FaceRecognitionTest.FaceRecognitionTest(
            name='PCA_CSUScraps',
            score_type=FaceRecognitionTest.SCORE_TYPE_HIGH)
        pca = PCA(drop_front=2, basis_vectors=55)

        for im_name in self.eyes.files():
            im = pv.Image(os.path.join(SCRAPS_FACE_DATA, im_name + ".pgm"))
            rect = self.eyes.getFaces(im_name)
            eyes = self.eyes.getEyes(im_name)
            pca.addTraining(im, rect=rect[0], eyes=eyes[0])

        pca.train()

        face_records = {}
        for im_name in self.eyes.files():
            im = pv.Image(os.path.join(SCRAPS_FACE_DATA, im_name + ".pgm"))
            rect = self.eyes.getFaces(im_name)
            eyes = self.eyes.getEyes(im_name)
            fr = pca.computeFaceRecord(im, rect=rect[0], eyes=eyes[0])
            face_records[im_name] = fr

        for i_name in face_records.keys():
            scores = []
            for j_name in face_records.keys():
                similarity = pca.similarity(face_records[i_name],
                                            face_records[j_name])
                scores.append((j_name, similarity))
            face_test.addSample(i_name, scores)

        #print face_test.rank1_bounds
        self.assertAlmostEqual(face_test.rank1_rate, 0.43930635838150289)
        self.assertAlmostEqual(face_test.rank1_bounds[0], 0.3640772723094895)
        self.assertAlmostEqual(face_test.rank1_bounds[1], 0.51665118592791259)

        roc = face_test.getROCAnalysis()

        # Test based of fpr=0.01
        _ = roc.getFAR(far=0.01)
Beispiel #14
0
class _TestFacePCA(unittest.TestCase):
    
    def setUp(self):
        self.images = []
        self.names = []
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            self.images.append(img)
            self.names.append(filename)
        
        self.assert_( len(self.images) == 173 )

    
    def test_pca_scraps(self):
        face_test = FaceRecognitionTest.FaceRecognitionTest(name='PCA_CSUScraps',score_type=FaceRecognitionTest.SCORE_TYPE_HIGH)
        pca = PCA(drop_front=2,basis_vectors=55)
        
        for im_name in self.eyes.files():
            im = Image(os.path.join(SCRAPS_FACE_DATA, im_name + ".pgm"))
            rect = self.eyes.getFaces(im_name)
            eyes = self.eyes.getEyes(im_name)
            pca.addTraining(im,rect=rect[0],eyes=eyes[0])

        pca.train()
                
        face_records = {}
        for im_name in self.eyes.files():
            im = Image(os.path.join(SCRAPS_FACE_DATA, im_name + ".pgm"))
            rect = self.eyes.getFaces(im_name)
            eyes = self.eyes.getEyes(im_name)
            fr = pca.computeFaceRecord(im,rect=rect[0],eyes=eyes[0])
            face_records[im_name] = fr
        
        for i_name in face_records.keys():
            scores = []
            for j_name in face_records.keys():
                similarity = pca.similarity(face_records[i_name],face_records[j_name])
                scores.append((j_name,similarity))
            face_test.addSample(i_name,scores)
            
        #print face_test.rank1_bounds
        self.assertAlmostEqual(face_test.rank1_rate,0.43930635838150289)
        self.assertAlmostEqual(face_test.rank1_bounds[0],0.3640772723094895)
        self.assertAlmostEqual(face_test.rank1_bounds[1],0.51665118592791259)

        roc = face_test.getROCAnalysis()        

        # Test based of fpr=0.01
        roc_point = roc.getFAR(far=0.01)
Beispiel #15
0
    def test_face_detection_pickle(self):
        fd = CascadeDetector(OPENCV_CASCADE)
        
        fdt = FaceDetectionTest(name='scraps')

        buffer = pickle.dumps(fd)
        fd = pickle.loads(buffer)
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.98265895953757221, places = 2 ) # TODO: Version 2 performance is better
Beispiel #16
0
    def test_training(self):
        '''
        This trains the FaceFinder on the scraps database.
        '''
        #import cProfile

        # Load an eyes file
        eyes_filename = join(pv.__path__[0], 'data', 'csuScrapShots',
                             'coords.txt')
        #print "Creating eyes File."
        eyes_file = EyesFile(eyes_filename)

        # Create a face detector
        cascade_file = join(pv.__path__[0], 'config',
                            'facedetector_celebdb2.xml')
        #print "Creating a face detector from:",cascade_file
        face_detector = CascadeDetector(cascade_file)

        image_dir = join(pv.__path__[0], 'data', 'csuScrapShots')

        ed = SVMEyeDetectorFromDatabase(eyes_file,
                                        image_dir,
                                        image_ext=".pgm",
                                        face_detector=face_detector,
                                        random_seed=0)
        edt = EyeDetectionTest(name='scraps')

        #print "Testing..."
        for img in self.images:
            #print img.filename
            faces = ed.detect(img)

            #faces = ed.detect(img)
            pred_eyes = []
            for _, _, pleye, preye in faces:
                #detections.append(rect)
                pred_eyes.append((pleye, preye))

            truth_eyes = self.eyes.getEyes(img.filename)
            edt.addSample(truth_eyes, pred_eyes, im=img, annotate=False)
Beispiel #17
0
class _TestCascadeDetector(unittest.TestCase):
    ''' Unit tests for the Cascade Detector '''
    def test_detect_bad_file(self):
        '''
        If the cascade file does not exist, opencv can crash without warning.
        This makes sure a test is run to make sure the cascade is there.
        '''

        self.assertRaises(CascadeNotFound, CascadeDetector, BAD_CASCADE)

    def test_face_detection_pickle(self):
        fd = CascadeDetector(OPENCV_CASCADE)

        fdt = FaceDetectionTest(name='scraps')

        buffer = pickle.dumps(fd)
        fd = pickle.loads(buffer)

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth, rects, im=img)

        self.assertAlmostEqual(
            fdt.pos_rate, 0.98265895953757221,
            places=2)  # TODO: Version 2 performance is better

    def test_detect_scraps_opencv(self):

        fd = CascadeDetector(OPENCV_CASCADE)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth, rects, im=img)

        self.assertAlmostEqual(
            fdt.pos_rate, 0.98265895953757221,
            places=2)  # TODO: Version 2 performance is better

    def test_detect_scraps_celeb1(self):
        fd = CascadeDetector(CELEB1_CASCADE)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth, rects, im=img)

        self.assertAlmostEqual(
            fdt.pos_rate, 0.76878612716763006,
            places=2)  # TODO: Version 2 performance is better

    def test_detect_scraps_celeb2(self):

        fd = CascadeDetector(CELEB2_CASCADE)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth, rects, im=img)

        self.assertAlmostEqual(fdt.pos_rate, 0.925, places=2)

    def donttest_detector_train(
            self):  # TODO: Cascade training fails for Version OpenCV 2.0

        positives = []
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        n = len(self.eyes.files())
        for filename in self.eyes.files()[:n / 2]:
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            faces = self.eyes.getFaces(img.filename)
            positives.append(
                [os.path.join(SCRAPS_FACE_DATA, img.filename), faces])

        neg_files = []
        for im_name in os.listdir(NONFACE_DATA):
            if im_name[-4:] != ".jpg": continue
            neg_files.append(os.path.join(NONFACE_DATA, im_name))

        fd = trainHaarClassifier(positives,
                                 neg_files,
                                 nstages=6,
                                 maxtreesplits=0,
                                 max_run_time=300)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA, "coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth, rects, im=img)

        self.assertAlmostEqual(fdt.pos_rate, 0.9942196531791907)
Beispiel #18
0
class _FastFilterTest(unittest.TestCase):
    def setUp(self):
        SCRAPS_FACE_DATA = os.path.join(pv.__path__[0],"data","csuScrapShots")
        self.test_images = []
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files()[0:10]:
            im = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            eyes = self.eyes.getEyes(filename)
            #print eyes
            affine = pv.AffineFromPoints(eyes[0][0],eyes[0][1],pv.Point(40,40),pv.Point(88,40),(128,128))
            im = affine.transformImage(im)
            
            self.test_images.append(im)

    
    def test_gabor1(self):
        ilog = None # pv.ImageLog(name="GaborTest1")
        
        bank = FilterBank(tile_size=(128,128))
        kernels = createGaborKernels()
        for wavelet in kernels:
            bank.addFilter(wavelet)
            
        for i in range(len(bank.filters)):
            filter = np.fft.ifft2(bank.filters[i])
            if ilog:
                ilog.log(pv.Image(np.fft.fftshift(filter.real)),label="Filter_RE_%d"%i)
                ilog.log(pv.Image(np.fft.fftshift(filter.imag)),label="Filter_IM_%d"%i)
            
        
        for im in self.test_images[:1]:
            if ilog:
                ilog.log(im,label="ORIG")
            results = bank.convolve(im)
            #print "RShape",results.shape[2]
            if ilog:
                for i in range(results.shape[2]):
                    ilog.log(pv.Image(results[:,:,i].real),label="CONV_RE_%d"%i)
                    ilog.log(pv.Image(results[:,:,i].imag),label="CONV_IM_%d"%i)
        if ilog:
            ilog.show()

        
    def test_gabor2(self):
        #print
        bank = FilterBank(tile_size=(128,128))
        #print "generating filters"
        freq = 5
        oreint = 3
        test_values = [[0.39182228, 0.39265844, 5.4866541e-07, 7.4505806e-08, -0.00035403497, -0.049227916], [0.39180198, 0.3926785, -1.0430813e-07, 4.4703484e-08, 0.017195048, -0.045993667], [0.39180198, 0.39267856, -5.9604645e-08, 7.4505806e-09, 0.045639627, 0.017549083], [0.1959009, 0.19633935, -1.0430813e-07, -1.4901161e-08, -0.054863166, -0.010506729], [0.19590084, 0.19633923, -1.0337681e-07, -3.7252903e-08, -0.050385918, -0.024042567], [0.19590083, 0.19633923, -1.8626451e-07, -2.6077032e-08, 0.053237237, 0.014138865], [0.097950377, 0.098169744, 7.5995922e-07, 4.0978193e-08, -0.029739097, 0.029439665], [0.097950377, 0.098169573, 8.5681677e-08, 7.4505806e-09, -0.034587309, 0.023616293], [0.097950369, 0.098169573, 3.7252903e-09, 2.7939677e-08, 0.040645007, 0.0075459499], [0.048975188, 0.049084734, -1.0859221e-06, 1.4528632e-07, -0.0026100441, 0.025389811], [0.048975196, 0.049084827, -9.3132257e-09, 3.3527613e-08, -0.0058529032, 0.02486741], [0.048975192, 0.049084831, -7.6368451e-08, -4.703179e-08, 0.025110571, 0.0032778508], [0.024487557, 0.024542304, -0.00027022697, 1.1050142e-06, 0.0053004427, 0.013041494], [0.024487549, 0.024542348, -4.4152141e-05, 3.0389987e-05, 0.0040912526, 0.013478963], [0.024487551, 0.024542345, -4.4191256e-05, 3.0397903e-05, 0.013955923, 0.001284558]]
        start = time.time()
        i = 0
        for f in range(freq):
            #f=f+2
            for o in range(oreint):
                #print "F:%10.5f O:%10.5f"%(f,o)
                w1 = GaborWavelet(np.pi*2.0**(-(f+2.0)/2.0),o*np.pi/oreint,np.pi)
                mask = w1.mask((64,64))
                ssr = (np.real(mask)**2).sum()
                ssi = (np.imag(mask)**2).sum()
                sr = np.real(mask).sum()
                si = np.imag(mask).sum()
                
                self.assertAlmostEqual(test_values[i][0],ssr,places=5)
                self.assertAlmostEqual(test_values[i][1],ssi,places=5)
                self.assertAlmostEqual(test_values[i][2],sr,places=5)
                self.assertAlmostEqual(test_values[i][3],si,places=5)
                self.assertAlmostEqual(test_values[i][4],np.real(mask)[3,2],places=5)
                self.assertAlmostEqual(test_values[i][5],np.imag(mask)[3,2],places=5)

                bank.addFilter(w1)
                i+=1
                #mask = w1.mask((128,128))
                #Image(real(mask)).show()
                #Image(imag(mask)).show()
        stop = time.time()
        #print "Filter Time:",stop-start
                
        start = time.time()
        for im in self.test_images:
            jets = bank.convolve(im)
            #mag = sqrt(real(jets)*real(jets)+imag(jets)*imag(jets))
            #if ilog: ilog.log(im)
            #for i in range(freq*oreint):
            #    if ilog: ilog.log(Image(real(jets[:,:,i])))
            #    if ilog: ilog.log(Image(real(jets[:,:,i])))
            #    if ilog: ilog.log(Image(mag[:,:,i]))
            
        stop = time.time()
        frame_time = (stop-start)/len(self.test_images)
        #print "Frame Time: %0.5fs"% frame_time


    def test_GaborFilters(self):
        ilog = None # pv.ImageLog(name="GaborTest1")
        
        #bank = FilterBank(tile_size=(128,128))
        kernels = createGaborKernels()
        filters = GaborFilters(kernels)
        
        gim = filters.convolve(self.test_images[0])
        
        template = gim.extractJet(pv.Point(64,64))
        
        table = pv.Table()
        
        for i in range(0,128):
            table[i,'disp'] = i - 64
            novel = gim.extractJet(pv.Point(i,64))
            table[i,'simMag'] = template.simMag(novel)
            table[i,'simPhase'] = template.simPhase(novel)
            table[i,'simDisplace'] = template.simDisplace(novel)
            dx,dy = template.displace(novel,method="Simple")
            table[i,'displace_dx'] = dx
            table[i,'displace_dy'] = dy
            dx,dy = template.displace(novel,method="Blocked")
            table[i,'blocked_dx'] = dx
            table[i,'blocked_dy'] = dy
            dx,dy = template.displace(novel,method="Iter")
            table[i,'iter_dx'] = dx
            table[i,'iter_dy'] = dy
        
        #print
        #print table
        #table.save("../../gabor_plot.csv")
      
    def test_GaborImage(self):
        ilog = None # pv.ImageLog(name="GaborTest1")
        
        #bank = FilterBank(tile_size=(128,128))
        kernels = createGaborKernels()
        filters = GaborFilters(kernels)
        
        gim = filters.convolve(self.test_images[0])
        
        test_point = pv.Point(62.6,64.8)
        template = gim.extractJet(test_point)
        
        new_point,sim,jet = gim.locatePoint(template,pv.Point(60,70))
        self.assertAlmostEqual(new_point.l2(test_point),0.0)

        new_point,sim,jet = gim.locatePoint(template,pv.Point(30,49))        
        self.assert_(new_point.l2(test_point) > 1.0)
        
        new_point,sim,jet = gim.locatePoint(template)        
        self.assertAlmostEqual(new_point.l2(test_point),0.0)
Beispiel #19
0
class _TestCascadeDetector(unittest.TestCase):
    ''' Unit tests for the Cascade Detector '''
    
    
    def test_detect_bad_file(self):
        '''
        If the cascade file does not exist, opencv can crash without warning.
        This makes sure a test is run to make sure the cascade is there.
        '''
        
        self.assertRaises(CascadeNotFound,CascadeDetector,BAD_CASCADE)
        
    def test_face_detection_pickle(self):
        fd = CascadeDetector(OPENCV_CASCADE)
        
        fdt = FaceDetectionTest(name='scraps')

        buffer = pickle.dumps(fd)
        fd = pickle.loads(buffer)
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.98265895953757221, places = 2 ) # TODO: Version 2 performance is better

        
    def test_detect_scraps_opencv(self):
        
        fd = CascadeDetector(OPENCV_CASCADE)
        fdt = FaceDetectionTest(name='scraps')
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.98265895953757221, places = 2 ) # TODO: Version 2 performance is better
        
    def test_detect_scraps_celeb1(self):
        fd = CascadeDetector(CELEB1_CASCADE)
        fdt = FaceDetectionTest(name='scraps')

        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.76878612716763006, places = 2 ) # TODO: Version 2 performance is better
        
    def test_detect_scraps_celeb2(self):
        
        fd = CascadeDetector(CELEB2_CASCADE)
        fdt = FaceDetectionTest(name='scraps')
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.925, places = 2 )
  

    def donttest_detector_train(self): # TODO: Cascade training fails for Version OpenCV 2.0

        positives = []    
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        n = len(self.eyes.files())    
        for filename in self.eyes.files()[:n/2]:
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            faces = self.eyes.getFaces(img.filename)
            positives.append([os.path.join(SCRAPS_FACE_DATA,img.filename),faces])   
            
        neg_files = []
        for im_name in os.listdir(NONFACE_DATA):    
            if im_name[-4:] != ".jpg": continue
            neg_files.append(os.path.join(NONFACE_DATA,im_name))

        fd = trainHaarClassifier(positives,neg_files,nstages=6,maxtreesplits=0,max_run_time=300)
        fdt = FaceDetectionTest(name='scraps')
        
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files():
            img = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            rects = fd(img)
            truth = self.eyes.getFaces(img.filename)
            fdt.addSample(truth,rects,im=img)

        self.assertAlmostEqual( fdt.pos_rate , 0.9942196531791907 )
Beispiel #20
0
class _FastFilterTest(unittest.TestCase):
    def setUp(self):
        SCRAPS_FACE_DATA = os.path.join(pv.__path__[0],"data","csuScrapShots")
        self.test_images = []
        self.eyes = EyesFile(os.path.join(SCRAPS_FACE_DATA,"coords.txt"))
        for filename in self.eyes.files()[0:10]:
            im = pv.Image(os.path.join(SCRAPS_FACE_DATA, filename + ".pgm"))
            eyes = self.eyes.getEyes(filename)
            #print eyes
            affine = pv.AffineFromPoints(eyes[0][0],eyes[0][1],pv.Point(40,40),pv.Point(88,40),(128,128))
            im = affine.transformImage(im)
            
            self.test_images.append(im)

    
    def test_gabor1(self):
        ilog = None # pv.ImageLog(name="GaborTest1")
        
        bank = FilterBank(tile_size=(128,128))
        kernels = createGaborKernels()
        for wavelet in kernels:
            bank.addFilter(wavelet)
            
        for i in range(len(bank.filters)):
            corr_filter = np.fft.ifft2(bank.filters[i])
            if ilog:
                ilog.log(pv.Image(np.fft.fftshift(corr_filter.real)),label="Filter_RE_%d"%i)
                ilog.log(pv.Image(np.fft.fftshift(corr_filter.imag)),label="Filter_IM_%d"%i)
            
        
        for im in self.test_images[:1]:
            if ilog:
                ilog.log(im,label="ORIG")
            results = bank.convolve(im)
            #print "RShape",results.shape[2]
            if ilog:
                for i in range(results.shape[2]):
                    ilog.log(pv.Image(results[:,:,i].real),label="CONV_RE_%d"%i)
                    ilog.log(pv.Image(results[:,:,i].imag),label="CONV_IM_%d"%i)
        if ilog:
            ilog.show()

        
    def test_gabor2(self):
        #print
        bank = FilterBank(tile_size=(128,128))
        #print "generating filters"
        freq = 5
        oreint = 3
        test_values = [[0.39182228, 0.39265844, 5.4866541e-07, 7.4505806e-08, -0.00035403497, -0.049227916], [0.39180198, 0.3926785, -1.0430813e-07, 4.4703484e-08, 0.017195048, -0.045993667], [0.39180198, 0.39267856, -5.9604645e-08, 7.4505806e-09, 0.045639627, 0.017549083], [0.1959009, 0.19633935, -1.0430813e-07, -1.4901161e-08, -0.054863166, -0.010506729], [0.19590084, 0.19633923, -1.0337681e-07, -3.7252903e-08, -0.050385918, -0.024042567], [0.19590083, 0.19633923, -1.8626451e-07, -2.6077032e-08, 0.053237237, 0.014138865], [0.097950377, 0.098169744, 7.5995922e-07, 4.0978193e-08, -0.029739097, 0.029439665], [0.097950377, 0.098169573, 8.5681677e-08, 7.4505806e-09, -0.034587309, 0.023616293], [0.097950369, 0.098169573, 3.7252903e-09, 2.7939677e-08, 0.040645007, 0.0075459499], [0.048975188, 0.049084734, -1.0859221e-06, 1.4528632e-07, -0.0026100441, 0.025389811], [0.048975196, 0.049084827, -9.3132257e-09, 3.3527613e-08, -0.0058529032, 0.02486741], [0.048975192, 0.049084831, -7.6368451e-08, -4.703179e-08, 0.025110571, 0.0032778508], [0.024487557, 0.024542304, -0.00027022697, 1.1050142e-06, 0.0053004427, 0.013041494], [0.024487549, 0.024542348, -4.4152141e-05, 3.0389987e-05, 0.0040912526, 0.013478963], [0.024487551, 0.024542345, -4.4191256e-05, 3.0397903e-05, 0.013955923, 0.001284558]]
        i = 0
        for f in range(freq):
            #f=f+2
            for o in range(oreint):
                #print "F:%10.5f O:%10.5f"%(f,o)
                w1 = GaborWavelet(np.pi*2.0**(-(f+2.0)/2.0),o*np.pi/oreint,np.pi)
                mask = w1.mask((64,64))
                ssr = (np.real(mask)**2).sum()
                ssi = (np.imag(mask)**2).sum()
                sr = np.real(mask).sum()
                si = np.imag(mask).sum()
                
                self.assertAlmostEqual(test_values[i][0],ssr,places=5)
                self.assertAlmostEqual(test_values[i][1],ssi,places=5)
                self.assertAlmostEqual(test_values[i][2],sr,places=5)
                self.assertAlmostEqual(test_values[i][3],si,places=5)
                self.assertAlmostEqual(test_values[i][4],np.real(mask)[3,2],places=5)
                self.assertAlmostEqual(test_values[i][5],np.imag(mask)[3,2],places=5)

                bank.addFilter(w1)
                i+=1
                #mask = w1.mask((128,128))
                #Image(real(mask)).show()
                #Image(imag(mask)).show()
        #print "Filter Time:",stop-start
                
            


    def test_GaborFilters(self):
        
        #bank = FilterBank(tile_size=(128,128))
        kernels = createGaborKernels()
        filters = GaborFilters(kernels)
        
        gim = filters.convolve(self.test_images[0])
        
        template = gim.extractJet(pv.Point(64,64))
        
        table = pv.Table()
        
        for i in range(0,128):
            table[i,'disp'] = i - 64
            novel = gim.extractJet(pv.Point(i,64))
            table[i,'simMag'] = template.simMag(novel)
            table[i,'simPhase'] = template.simPhase(novel)
            table[i,'simDisplace'] = template.simDisplace(novel)
            dx,dy = template.displace(novel,method="Simple")
            table[i,'displace_dx'] = dx
            table[i,'displace_dy'] = dy
            dx,dy = template.displace(novel,method="Blocked")
            table[i,'blocked_dx'] = dx
            table[i,'blocked_dy'] = dy
            dx,dy = template.displace(novel,method="Iter")
            table[i,'iter_dx'] = dx
            table[i,'iter_dy'] = dy
        
        #print
        #print table
        #table.save("../../gabor_plot.csv")
      
    def test_GaborImage(self):
        
        kernels = createGaborKernels()
        filters = GaborFilters(kernels)
        
        gim = filters.convolve(self.test_images[0])
        
        test_point = pv.Point(62.6,64.8)
        template = gim.extractJet(test_point)
        
        new_point,_,_ = gim.locatePoint(template,pv.Point(60,70))
        self.assertAlmostEqual(new_point.l2(test_point),0.0)

        new_point,_,_ = gim.locatePoint(template,pv.Point(30,49))        
        self.assert_(new_point.l2(test_point) > 1.0)
        
        new_point,_,_ = gim.locatePoint(template)        
        self.assertAlmostEqual(new_point.l2(test_point),0.0)