1
2
3 """This simulates re-running feature_vec.py with the -xform or -XFORM flags.
4 It reads in a feature vector, then transforms it by a matrix multiplication,
5 and writes it back out.
6 """
7
8 import os
9 import sys
10 import math
11 from gmisclib import chunkio
12 from gmisclib import die
13 import gpkimgclass
14 from gmisclib import avio
15 from gmisclib import Num
16
17
18 PLOT = False
19
20 XFORM = None
21
22
24 o = {}
25 for (k, v) in h.items():
26 if k.startswith('F_INFO'):
27 o['OLD_%s' % k] = v
28 elif k.startswith('RMS'):
29 pass
30 elif k.startswith('TTYPE'):
31 pass
32 elif k.startswith('TUNITS'):
33 pass
34 else:
35 o[k] = v
36 return o
37
38
40 fac = chunkio.datachunk(open(Xform, 'r')).read_NumArray()
41 o = Num.matrixmultiply(data.d, fac)
42 hdr = fiddle( data.hdr )
43 hdr['XFORM'] = Xform
44 for i in range( fac.shape[1] ):
45 hdr['TTYPE%d' % (i+1)] = 'Mixture%d' % i
46 d = ','.join(['%g' % q for q in fac[:,i] ])
47 hdr['F_INFO%d' % (i+1)] = d
48 hdr['RMS%d' % (i+1)] = math.sqrt(Num.average(o[:,i]**2))
49 gpkimgclass.gpk_img(hdr, o).write(ofile)
50
51
52
53 if __name__ == '__main__':
54 ofile = '-'
55 arglist = sys.argv[1:]
56 while arglist and arglist[0].startswith('-'):
57 arg = arglist.pop(0)
58 if arg == '--':
59 break
60 elif arg == '-o':
61 ofile = arglist.pop(0)
62 elif arg == '-xform':
63 fxd = os.environ['OXIVOICE']
64 XFORM = '%s/xform.chunk' % fxd
65 elif arg == '-Xform':
66 XFORM = arglist.pop(0)
67 else:
68 die.die('Unrecognized flag: %s' % arg)
69 assert XFORM, "Nothing to do!"
70 fname = arglist[0]
71 data = gpkimgclass.read(fname)
72 process(data, XFORM)
73