predict smoothing
[asr1617data.git] / predict.py
index 962b9fd..3e0e2f7 100644 (file)
@@ -1,26 +1,54 @@
-import numpy as np
 import sys
 
+if len(sys.argv) != 3:
+    print("Usage: {} MODEL.json AUDIO.wav".format(sys.argv[0]))
+    sys.exit(1)
+
+import pympi
 import scipy.io.wavfile as wav
 import numpy as np
-from python_speech_featuresimport mfcc
+from python_speech_features import mfcc
 
 from keras.models import model_from_json
 
 modelfile = sys.argv[1]
-hdf5file = '{}.hdf5'.format(modelfile[-4:])
+hdf5file = '{}.hdf5'.format(modelfile[:-5])
 
-with open(modelfile, 'r') as f:
+with open(modelfile, 'r', encoding='utf-8') as f:
     json = f.read()
 model = model_from_json(json)
 model.load_weights(hdf5file)
 
+(_, winlen, winstep, name) = modelfile.split('_')
+winlen = float(winlen)
+winstep = float(winstep)
+
+multiclass = name == 'multi'
+
 model.compile(
     loss='binary_crossentropy',
     optimizer='rmsprop',
     metrics=['accuracy'])
 
-(rate, sig) = wav.read(sys.stdin.buffer)
-data = mfcc(sig, rate, winlen
-for i in model.predict(dat, batch_size=32, verbose=0):
-    print(i[0])
+(rate, sig) = wav.read(sys.argv[2], mmap=True)
+data = mfcc(sig, rate, winlen, winstep, numcep=13, appendEnergy=True)
+tgob = pympi.TextGrid(xmax=winstep*len(data))
+tier = tgob.add_tier('lyrics')
+
+window_len = int(1.0/winstep)
+
+x = model.predict(data, batch_size=32, verbose=0)
+s = np.r_[x[window_len-1:0:-1],x,x[-2:-window_len-1:-1]]
+w = np.hanning(window_len)
+#
+smoothed = np.convolve(w/w.sum(), s[:,0], mode='valid')
+wavdata = np.uint8(list(map(int,
+    smoothed*255))[int(window_len/2):-1*(int(window_len/2))])
+#wavdata = np.uint8(x*255)
+
+print('sr: ', int(1.0/winstep))
+print("len(wavdata): ", len(wavdata))
+print("len(x): ", len(x))
+wav.write('class.wav', int(1.0/winstep), wavdata)
+
+tgob.to_file('/dev/stdout')