1 import pyvision as pv
2 from pyvision.vector.SVM import SVM,TYPE_C_SVC
3
4
5 from scipy import ndimage
6
7
8
10
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
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
33 mat = mat - ndimage.gaussian_filter(mat,self.norm_sigma)
34
35
36 mat = mat - mat.mean()
37 mat = mat / mat.std()
38
39 tile = pv.Image(mat)
40
41 return tile
42
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
58 self.svm = SVM(svm_type=TYPE_C_SVC)
59
60
61 for sub_id, tiles in self.training_data.iteritems():
62 for tile in tiles:
63 self.svm.addTraining(sub_id,tile)
64
65
66 if C != None and Gamma != None:
67 self.svm.train(C_range = C, G_range = Gamma, verbose=True,callback=callback)
68 else:
69
70 self.svm.train(verbose=True,callback=callback)
71
72
73
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):
83
85 self.svm = None
86
87 self.n_faces = 0
88 self.n_labels = 0
89
90 self.training_data = {}
91
93 return self.svm != None
94