Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added __init__.py
Empty file.
Empty file added configure/__init__.py
Empty file.
Empty file added lib/__init__.py
Empty file.
Empty file added lib/matlab_py/__init__.py
Empty file.
7 changes: 6 additions & 1 deletion lib/matlab_py/mrcg.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,12 @@ def loudness(freq):
# pressure level dB. The equation is taken from section 4 of BS3383.
# Written by ZZ Jin, and adapted by DLW in Jan'07
dB=60
fmat = sio.loadmat('./lib/matlab_py/f_af_bf_cf.mat')
fmat = sio.loadmat(
os.path.join(
os.path.dirname(os.path.abspath(__file__)),
'f_af_bf_cf.mat',
)
)
# Stores parameters of equal-loudness functions from BS3383,"Normal equal-loudness level
# contours for pure tones under free-field listening conditions", table 1.
# f (or ff) is the tone frequency, af and bf are frequency-dependent coefficients, and
Expand Down
69 changes: 24 additions & 45 deletions lib/matlab_py/utils.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
import os

import librosa
import numpy as np
import scipy.io as sio
# from scipy.stats import threshold
import lib.matlab_py.mrcg as mrcg

from . import mrcg as mrcg

def th_classifier(input, th):

output = (input >= th).choose(input, 1)
output = (output < th).choose(output, 0)
# output = np.clip(input, a_min=th, a_max=None)
# output = np.divide(output, th)
# output = np.subtract(1, output)
# output = np.clip(output, a_min=1 - th, a_max=None)
# output = np.subtract(1, output)
return output


Expand All @@ -32,7 +26,7 @@ def binary_saver(name_file, data, num_file ):
return fid_file, fid_txt


def Frame_Length( x,overlap,nwind ):
def Frame_Length( x, overlap, nwind):
nx = len(x)
noverlap = nwind - overlap
framelen = int((nx - noverlap) / (nwind - noverlap))
Expand Down Expand Up @@ -83,7 +77,9 @@ def frame2rawlabel(label, win_len, win_step):
break
else:
temp_label = label[i]
raw_label[start_indx+1:start_indx+win_len] = raw_label[start_indx+1:start_indx+win_len] + temp_label
raw_label[
start_indx+1:start_indx+win_len
] = raw_label[start_indx+1:start_indx+win_len] + temp_label
i += 1

start_indx = start_indx + win_step
Expand All @@ -92,25 +88,6 @@ def frame2rawlabel(label, win_len, win_step):

return raw_label

# def frame2rawlabel(label, win_len, win_step):
# num_frame = len(label)
# total_len = (num_frame - 1) * win_step + win_len
# raw_label = np.zeros([1, total_len])
# start_indx = 0
# i = 0
# while 1 :
# if (start_indx+win_len>total_len):
# break
#
# temp = label[i]*np.ones([1,win_len])
# temp2 = raw_label[0][start_indx : start_indx + win_len]
# raw_label[0][start_indx : start_indx + win_len] = temp2 + temp
# i = i+1
# start_indx = start_indx+win_step
#
# raw_label = th_classifier(raw_label, 1)
# return raw_label


def frame2inpt(label, win_len, win_step):
num_frame = len(label)
Expand All @@ -121,22 +98,22 @@ def frame2inpt(label, win_len, win_step):
while 1:
if (start_indx + win_len > total_len):
break

temp = label[i] * np.ones([1, win_len])
raw_label[start_indx: start_indx + win_len] = raw_label[start_indx: start_indx + win_len] + temp
raw_label[
start_indx: start_indx + win_len
] = raw_label[start_indx: start_indx + win_len] + temp
i = i + 1
start_indx = start_indx + win_step

raw_label = th_classifier(raw_label, 1)
return raw_label


def mrcg_extract(audio_dir) :
def mrcg_extract(audio_dir, save_dir):
noisy_speech, audio_sr = librosa.load(audio_dir, sr=16000)
y_label = np.zeros([len(noisy_speech), 1])
os.mkdir('./sample_data')
os.mkdir('./sample_data/Labels')
save_dir = './sample_data'
os.makedirs(save_dir, exist_ok=True)
os.makedirs("{}/Labels".format(save_dir), exist_ok=True)
name_mrcg = save_dir + '/mrcg'
name_label = save_dir + '/Labels/label'
mrcg_mat = np.transpose(mrcg.mrcg_features(noisy_speech, audio_sr))
Expand All @@ -155,14 +132,22 @@ def mrcg_extract(audio_dir) :
binary_saver(name_label, framed_label[1: len(mrcg_mat), 1], num )
data_len = len(mrcg_mat)
sio.savemat(save_dir+'/normalize_factor',{'train_mean': train_mean, 'train_std': train_std})
# save([save_dir, '/normalize_factor'], 'train_mean', 'train_std')

print('MRCG extraction is successifully done.')
return data_len, winlen, winstep


def vad_func(audio_dir, mode, th, output_type, is_default, off_on_length=20, on_off_length=20, hang_before=10,
hang_over=10):
def vad_func(
audio_dir,
mode,
th,
output_type,
is_default,
off_on_length=20,
on_off_length=20,
hang_before=10,
hang_over=10
):

os.system('rm -rf result')
os.system('rm -rf sample_data')
Expand All @@ -177,9 +162,8 @@ def vad_func(audio_dir, mode, th, output_type, is_default, off_on_length=20, on_

os.system(order)

pred_result = sio.loadmat('./result/pred.mat')
pred_result = sio.loadmat('result/pred.mat')
pp = pred_result['pred']
result = np.zeros([len(pp), 1])
result = th_classifier(pp, th)
result = vad_post(result, off_on_length, on_off_length, hang_before, hang_over)
if output_type == 1:
Expand All @@ -189,9 +173,6 @@ def vad_func(audio_dir, mode, th, output_type, is_default, off_on_length=20, on_


def vad_post(post_label, off_on_length=20, on_off_length=20, hang_before=10, hang_over=10):
# plt.subplot(4,1,1)
# plt.plot(post_label)

'''fill 1 to short valley'''
offset = False
onset = False
Expand All @@ -209,8 +190,6 @@ def vad_post(post_label, off_on_length=20, on_off_length=20, hang_before=10, han
offset = False

'''remove impulse like detection'''
# plt.subplot(4,1,2)
# plt.plot(post_label)
post_label = np.concatenate([np.zeros((1, 1)), post_label], axis=0)

for i in range(post_label.shape[0]):
Expand Down
121 changes: 39 additions & 82 deletions lib/python/VAD_test.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import sys
sys.path.insert(0, './lib/python')
import VAD_Proposed as Vp
import VAD_DNN as Vd
import VAD_bDNN as Vb
import VAD_LSTM_2 as Vl
import scipy.io as sio
import graph_test as graph_test

from . import graph_test
import os, getopt
import glob

Expand All @@ -17,127 +14,87 @@
# model_dir = "./saved_model"
# valid_batch_size = 4134

if __name__ == '__main__':

try:
opts, args = getopt.getopt(sys.argv[1:], 'hm:l:d:', ["data_dir=", "norm_dir=", "model_dir="])
except getopt.GetoptError as err:
print(str(err))
sys.exit(1)

if len(opts) != 6:
print("arguments are not enough.")
sys.exit(1)

for opt, arg in opts:
if opt == '-h':
sys.exit(0)
elif opt == '-m':
mode = int(arg)
elif opt == '-l':
data_len = int(arg)
elif opt == '-d':
is_default = int(arg)
elif opt == '--data_dir':
data_dir = str(arg)
elif opt == '--norm_dir':
norm_dir = str(arg)
elif opt == '--model_dir':
model_dir = str(arg)

def get_predictions(mode, data_len, is_default, data_dir, norm_dir, model_dir):
if mode == 0:
# Vp.test_config(c_test_dir=data_dir,
# c_norm_dir=norm_dir,
# c_initial_logs_dir=model_dir, c_batch_size_eval=batch_size,
# c_data_len=data_len)
#
# pred, label = Vp.main()

if is_default:
graph_list = sorted(glob.glob(model_dir + '/backup/backup_pb/frozen_model_ACAM.pb'))
norm_dir = model_dir + '/backup/backup_norm'
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)
else:
graph_list = sorted(glob.glob(model_dir + '/graph/ACAM/*.pb'))
print(graph_list)
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)

elif mode == 1:

print(os.path.abspath('./configure/bDNN'))
sys.path.insert(0, os.path.abspath('./configure/bDNN'))

import config as cg
if is_default:
graph_list = sorted(glob.glob(model_dir + '/backup/backup_pb/frozen_model_bDNN.pb'))
norm_dir = model_dir + '/backup/backup_norm'
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)
else:
graph_list = sorted(glob.glob(model_dir + '/graph/bDNN/*.pb'))
print(graph_list)
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)

# Vb.test_config(c_test_dir=data_dir,
# c_norm_dir=norm_dir,
# c_initial_logs_dir=model_dir, c_batch_size_eval=batch_size,
# c_data_len=data_len)
# Vb.test_config(c_test_dir=data_dir,
# c_norm_dir='/home/sbie/storage3/github/VAD_Toolkit/VAD/saved_model/backup_norm',
# c_initial_logs_dir='/home/sbie/storage3/github/VAD_Toolkit/VAD/saved_model/backup_ckpt', c_batch_size_eval=batch_size,
# c_data_len=data_len)
#
# pred, label = Vb.main()

elif mode == 2:

start_time = time()
print(os.path.abspath('./configure/DNN'))
sys.path.insert(0, os.path.abspath('./configure/DNN'))

import config as cg

if is_default:
graph_list = sorted(glob.glob(model_dir + '/backup/backup_pb/frozen_model_DNN.pb'))
norm_dir = model_dir + '/backup/backup_norm'
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)
else:
graph_list = sorted(glob.glob(model_dir + '/graph/DNN/*.pb'))
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)

# Vd.test_config(c_test_dir=data_dir,
# c_norm_dir=norm_dir,
# c_initial_logs_dir=model_dir, c_batch_size_eval=batch_size,
# c_data_len=data_len)
#
# pred, label = Vd.main()

end_time = time()

time_taken = end_time - start_time
print(time_taken)

elif mode == 3:

sys.path.insert(0, os.path.abspath('./configure/LSTM'))

import config as cg

if is_default:
graph_list = sorted(glob.glob(model_dir + '/backup/backup_pb/frozen_model_LSTM.pb'))
norm_dir = model_dir + '/backup/backup_norm'
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)
else:
graph_list = sorted(glob.glob(model_dir + '/graph/LSTM/*.pb'))
print(graph_list)
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)

# Vl.test_config(c_test_dir=data_dir,
# c_norm_dir=norm_dir,
# c_initial_logs_dir=model_dir, c_batch_num=200, c_seq_size=20,
# c_data_len=data_len)
#
# pred, label = Vl.main()
pred, label = graph_test.do_test(graph_list[-1], data_dir, norm_dir, data_len, is_default, mode)
print('{} pred : {} label'.format(pred, label))
return pred, label


if __name__ == '__main__':

try:
opts, args = getopt.getopt(sys.argv[1:], 'hm:l:d:', ["data_dir=", "norm_dir=", "model_dir="])
except getopt.GetoptError as err:
print(str(err))
sys.exit(1)

if len(opts) != 6:
print("arguments are not enough.")
sys.exit(1)

for opt, arg in opts:
if opt == '-h':
sys.exit(0)
elif opt == '-m':
mode = int(arg)
elif opt == '-l':
data_len = int(arg)
elif opt == '-d':
is_default = int(arg)
elif opt == '--data_dir':
data_dir = str(arg)
elif opt == '--norm_dir':
norm_dir = str(arg)
elif opt == '--model_dir':
model_dir = str(arg)

pred, label = get_predictions(mode, data_len, is_default, data_dir, norm_dir, model_dir)

sio.savemat('./result/pred.mat', {'pred': pred})
sio.savemat('./result/label.mat', {'label': label})
sio.savemat('result/pred.mat', {'pred': pred})
sio.savemat('result/label.mat', {'label': label})
print("done")
Empty file added lib/python/__init__.py
Empty file.
8 changes: 4 additions & 4 deletions lib/python/data_reader_bDNN_v2.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import numpy as np
import os
import glob
import utils

import numpy as np
import scipy.io as sio

from . import utils


class DataReader(object):

def __init__(self, input_dir, output_dir, norm_dir, w=19, u=9, name=None):
# print(name + " data reader initialization...")
self._input_dir = input_dir
self._output_dir = output_dir
self._norm_dir = norm_dir
Expand Down
Loading