-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpmqfaces.py
More file actions
63 lines (48 loc) · 1.48 KB
/
pmqfaces.py
File metadata and controls
63 lines (48 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import matplotlib
import matplotlib.pyplot as plt
from chernoff import *
# PMQ Defaults
PMQ_DEFAULT_VEC = [0.6 for x in range(19)]
PMQ_DEFAULT_VEC[UPPER_FACE] = 0.9
PMQ_DEFAULT_VEC[NOSE_LENGTH] = 0
PMQ_DEFAULT_VEC[EYE_VERTICAL] = 0.2
PMQ_DEFAULT_VEC[EYEBROW_SLANT] = 0.45
PMQ_DEFAULT_VEC[EYEBROW_SIZE] = 0.5
PMQ_DEFAULT_VEC[HAIR_SIZE] = 0
def init_fig():
return plt.figure(figsize=(11,11),frameon=False)
def pmq_face(fig,fitness,precision,simplicity,offset=0):
vec = PMQ_DEFAULT_VEC.copy()
vec[MOUTH_CURVE] = fitness
vec[MOUTH_WIDTH] = fitness
vec[EYE_SIZE] = precision
# vec[HAIR_SIZE] = 1-simplicity
vec[EYEBROW_SLANT] = simplicity
ax = fig.add_subplot(5,5,1+offset,aspect='equal')
cface(ax, *vec)
ax.axis([-1.2,1.2,-1.2,1.2])
ax.set_axis_off()
ax.set_xticks([])
ax.set_yticks([])
fig.subplots_adjust(hspace=0, wspace=0)
class PMQFace:
def __init__(self):
self.faces = 0
self.fig = init_fig()
def add_model(self,fitness,precision,simplicity):
pmq_face(self.fig,fitness,precision,simplicity,self.faces)
self.faces += 1
def main():
matplotlib.use('svg',force=True)
pmf = PMQFace()
pmf.add_model(0.9,0.9,0.9)
pmf.add_model(0.1,0.3,0.2)
pmf.add_model(0.8,0.4,0.5)
pmf.add_model(0.9,0.1,0.9)
pmf.add_model(0.1,0.9,0.1)
pmf.add_model(1.0,1.0,0.1)
pmf.add_model(0.1,0.1,1.0)
plt.savefig("face.svg")
print("Output to face.svg")
if __name__ == "__main__":
main()