/
apply_model.py
88 lines (66 loc) · 2.41 KB
/
apply_model.py
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import glob, sys
import os.path
import os
import time
import numpy as np
from tqdm import tqdm
import scipy.stats
import pandas as pd
import matplotlib
# Force matplotlib to not use any Xwindows backend.
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import argparse
import tensorflow as tf
from tensorflow import keras
import utils
import random
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from tensorflow.keras.models import load_model
def get_test_results(BIN_DIR, data, test_list, modelfile, results_file1, results_file2):
print('testing...', modelfile)
model = load_model(modelfile)
model.summary()
MOS_Predict=np.zeros([len(test_list),])
MOS_true =np.zeros([len(test_list),])
df = pd.DataFrame(columns=['audio', 'true_mos','predict_mos','system_ID','speaker_ID'])
for i in tqdm(range(len(test_list))):
filepath=test_list[i].split(',')
speakerid = filepath[0]
sysid = filepath[1]
filename=filepath[2].split('.')[0]
mos=float(filepath[3])
_feat = utils.read(os.path.join(BIN_DIR,filename+'.h5'))
_mag = _feat['mag_sgram']
[Average_score, Frame_score]=model.predict(_mag, verbose=0, batch_size=1)
MOS_Predict[i]=Average_score
MOS_true[i] =mos
df = df.append({'audio': filename,
'true_mos': MOS_true[i],
'predict_mos': MOS_Predict[i],
'system_ID': sysid,
'speaker_ID': speakerid},
ignore_index=True)
df.to_pickle(results_file1)
df.to_csv(results_file2, index=False)
return
##################################################
model_name = "LA_model"
if model_name == "LA_model":
folder = './LA_best_model/'
model = folder+"/mosnet.h5"
feats = "orig"
##################################################
data = "LA"
flist = glob.glob("data/"+feats+"/*.h5")
fnames = [f.split("/")[-1].split(".")[0] for f in flist]
spks = [f.split("_")[0] for f in fnames]
testlist = [spk+",original,"+fname+".wav,0" for spk,fname in zip(spks, fnames)]
print(testlist)
bin_dir = "data/"+feats
results_file1 = "data/results.pkl"
results_file2 = "data/results.txt"
logname = "data/test_list.txt"
# apply the trained model and save results
get_test_results(bin_dir, data, testlist, model, results_file1, results_file2)