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)
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)
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)
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 )
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)
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)