Package pyvision :: Package face :: Module SVMFaceRec
[hide private]
[frames] | no frames]

Source Code for Module pyvision.face.SVMFaceRec

 1  import pyvision as pv 
 2  from pyvision.vector.SVM import SVM,TYPE_C_SVC 
 3  #from pyvision.vector.VectorClassifier import NORM_NONE 
 4  #from pyvision.vector.PCA import PCA 
 5  from scipy import ndimage 
 6  #import random 
 7   
 8   
9 -class SVMFaceRec:
10
11 - def __init__(self):
12 self.tile_size = (128,160) 13 self.leye = pv.Point(26.0,40.0) 14 self.reye = pv.Point(102.0,40.0) 15 self.norm_sigma = 8.0 16 17 self.svm = None 18 19 self.n_faces = 0 20 self.n_labels = 0 21 22 self.training_data = {}
23 24
25 - def preprocess(self,im,leye,reye,ilog=None):
26 im = pv.Image(im.asPIL()) 27 affine = pv.AffineFromPoints(leye,reye,self.leye,self.reye,self.tile_size) 28 tile = affine.transformImage(im) 29 30 mat = tile.asMatrix2D() 31 32 # High pass filter the image 33 mat = mat - ndimage.gaussian_filter(mat,self.norm_sigma) 34 35 # Value normalize the image. 36 mat = mat - mat.mean() 37 mat = mat / mat.std() 38 39 tile = pv.Image(mat) 40 41 return tile
42
43 - def addTraining(self,im,leye,reye,sub_id,ilog=None):
44 self.svm = None 45 46 tile = self.preprocess(im,leye,reye,ilog) 47 if not self.training_data.has_key(sub_id): 48 self.training_data[sub_id] = [] 49 50 self.training_data[sub_id].append(tile) 51 52 self.n_labels = len(self.training_data) 53 self.n_faces += 1
54 55
56 - def train(self, C = None, Gamma = None, ilog=None, callback=None):
57 # Create the SVM 58 self.svm = SVM(svm_type=TYPE_C_SVC) 59 60 # Add training data 61 for sub_id, tiles in self.training_data.iteritems(): 62 for tile in tiles: 63 self.svm.addTraining(sub_id,tile) 64 65 # Train the SVM 66 if C != None and Gamma != None: 67 self.svm.train(C_range = C, G_range = Gamma, verbose=True,callback=callback) 68 else: 69 #Automatic 70 self.svm.train(verbose=True,callback=callback)
71 72 73
74 - def predict(self,im,leye,reye):
75 assert self.svm != None 76 77 tile = self.preprocess(im,leye,reye) 78 return self.svm.predict(tile)
79
80 - def score(self,im,leye,reye):
81 tile = self.preprocess(im,leye,reye) 82 return self.svm.predictSVMValues(tile)
83
84 - def reset(self):
85 self.svm = None 86 87 self.n_faces = 0 88 self.n_labels = 0 89 90 self.training_data = {}
91
92 - def isTrained(self):
93 return self.svm != None
94