Skip to content

Commit 3f6463e

Browse files
Merge pull request #108 from hyperion-ml/tyche-cleanup
github actions
2 parents 73d02f1 + b18d5d3 commit 3f6463e

File tree

571 files changed

+41898
-33561
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

571 files changed

+41898
-33561
lines changed

.github/workflows/black.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ jobs:
1313
- uses: actions/checkout@v2
1414
- uses: psf/black@stable
1515
with:
16-
options: "--check --diff --color"
17-
version: "21.10b0"
16+
options: "--check --diff --color --extend-exclude '/hyp_utils\\/kaldi/'"
17+
version: "21.10b0"

egs/chime5_spkdet/v1/local/make_musan.py

Lines changed: 167 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -7,125 +7,183 @@
77

88
import os, sys
99

10+
1011
def process_music_annotations(path):
11-
utt2spk = {}
12-
utt2vocals = {}
13-
lines = open(path, 'r').readlines()
14-
for line in lines:
15-
utt, genres, vocals, musician = line.rstrip().split()[:4]
16-
# For this application, the musican ID isn't important
17-
utt2spk[utt] = utt
18-
utt2vocals[utt] = vocals == "Y"
19-
return utt2spk, utt2vocals
12+
utt2spk = {}
13+
utt2vocals = {}
14+
lines = open(path, "r").readlines()
15+
for line in lines:
16+
utt, genres, vocals, musician = line.rstrip().split()[:4]
17+
# For this application, the musican ID isn't important
18+
utt2spk[utt] = utt
19+
utt2vocals[utt] = vocals == "Y"
20+
return utt2spk, utt2vocals
2021

2122

2223
def prepare_music(root_dir, fs, use_vocals):
23-
utt2vocals = {}
24-
utt2spk = {}
25-
utt2wav = {}
26-
num_good_files = 0
27-
num_bad_files = 0
28-
music_dir = os.path.join(root_dir, "music")
29-
for root, dirs, files in os.walk(music_dir):
30-
for file in files:
31-
file_path = os.path.join(root, file)
32-
if file.endswith(".wav"):
33-
utt = str(file).replace(".wav", "")
34-
utt2wav[utt] = file_path
35-
elif str(file) == "ANNOTATIONS":
36-
utt2spk_part, utt2vocals_part = process_music_annotations(file_path)
37-
utt2spk.update(utt2spk_part)
38-
utt2vocals.update(utt2vocals_part)
39-
utt2spk_str = ""
40-
utt2wav_str = ""
41-
for utt in utt2vocals:
42-
if utt in utt2wav:
43-
if use_vocals or not utt2vocals[utt]:
44-
utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
45-
if fs == 8:
46-
utt2wav_str = utt2wav_str + utt + " sox -t wav " + utt2wav[utt] + " -r 8k -t wav - |\n"
24+
utt2vocals = {}
25+
utt2spk = {}
26+
utt2wav = {}
27+
num_good_files = 0
28+
num_bad_files = 0
29+
music_dir = os.path.join(root_dir, "music")
30+
for root, dirs, files in os.walk(music_dir):
31+
for file in files:
32+
file_path = os.path.join(root, file)
33+
if file.endswith(".wav"):
34+
utt = str(file).replace(".wav", "")
35+
utt2wav[utt] = file_path
36+
elif str(file) == "ANNOTATIONS":
37+
utt2spk_part, utt2vocals_part = process_music_annotations(file_path)
38+
utt2spk.update(utt2spk_part)
39+
utt2vocals.update(utt2vocals_part)
40+
utt2spk_str = ""
41+
utt2wav_str = ""
42+
for utt in utt2vocals:
43+
if utt in utt2wav:
44+
if use_vocals or not utt2vocals[utt]:
45+
utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
46+
if fs == 8:
47+
utt2wav_str = (
48+
utt2wav_str
49+
+ utt
50+
+ " sox -t wav "
51+
+ utt2wav[utt]
52+
+ " -r 8k -t wav - |\n"
53+
)
54+
else:
55+
utt2wav_str = (
56+
utt2wav_str
57+
+ utt
58+
+ " sox -t wav "
59+
+ utt2wav[utt]
60+
+ " -r 16k -t wav - |\n"
61+
)
62+
num_good_files += 1
4763
else:
48-
utt2wav_str = utt2wav_str + utt + " sox -t wav " + utt2wav[utt] + " -r 16k -t wav - |\n"
49-
num_good_files += 1
50-
else:
51-
print("Missing file", utt)
52-
num_bad_files += 1
53-
print("In music directory, processed", num_good_files, "files;", num_bad_files, "had missing wav data")
54-
return utt2spk_str, utt2wav_str
64+
print("Missing file", utt)
65+
num_bad_files += 1
66+
print(
67+
"In music directory, processed",
68+
num_good_files,
69+
"files;",
70+
num_bad_files,
71+
"had missing wav data",
72+
)
73+
return utt2spk_str, utt2wav_str
74+
5575

5676
def prepare_speech(root_dir, fs):
57-
utt2spk = {}
58-
utt2wav = {}
59-
num_good_files = 0
60-
num_bad_files = 0
61-
speech_dir = os.path.join(root_dir, "speech")
62-
for root, dirs, files in os.walk(speech_dir):
63-
for file in files:
64-
file_path = os.path.join(root, file)
65-
if file.endswith(".wav"):
66-
utt = str(file).replace(".wav", "")
67-
utt2wav[utt] = file_path
68-
utt2spk[utt] = utt
69-
utt2spk_str = ""
70-
utt2wav_str = ""
71-
for utt in utt2spk:
72-
if utt in utt2wav:
73-
utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
74-
if fs == 8:
75-
utt2wav_str = utt2wav_str + utt + " sox -t wav " + utt2wav[utt] + " -r 8k -t wav - |\n"
76-
else:
77-
utt2wav_str = utt2wav_str + utt + " sox -t wav " + utt2wav[utt] + " -r 16k -t wav - |\n"
78-
num_good_files += 1
79-
else:
80-
print("Missing file", utt)
81-
num_bad_files += 1
82-
print("In speech directory, processed", num_good_files, "files;", num_bad_files, "had missing wav data")
83-
return utt2spk_str, utt2wav_str
77+
utt2spk = {}
78+
utt2wav = {}
79+
num_good_files = 0
80+
num_bad_files = 0
81+
speech_dir = os.path.join(root_dir, "speech")
82+
for root, dirs, files in os.walk(speech_dir):
83+
for file in files:
84+
file_path = os.path.join(root, file)
85+
if file.endswith(".wav"):
86+
utt = str(file).replace(".wav", "")
87+
utt2wav[utt] = file_path
88+
utt2spk[utt] = utt
89+
utt2spk_str = ""
90+
utt2wav_str = ""
91+
for utt in utt2spk:
92+
if utt in utt2wav:
93+
utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
94+
if fs == 8:
95+
utt2wav_str = (
96+
utt2wav_str
97+
+ utt
98+
+ " sox -t wav "
99+
+ utt2wav[utt]
100+
+ " -r 8k -t wav - |\n"
101+
)
102+
else:
103+
utt2wav_str = (
104+
utt2wav_str
105+
+ utt
106+
+ " sox -t wav "
107+
+ utt2wav[utt]
108+
+ " -r 16k -t wav - |\n"
109+
)
110+
num_good_files += 1
111+
else:
112+
print("Missing file", utt)
113+
num_bad_files += 1
114+
print(
115+
"In speech directory, processed",
116+
num_good_files,
117+
"files;",
118+
num_bad_files,
119+
"had missing wav data",
120+
)
121+
return utt2spk_str, utt2wav_str
122+
84123

85124
def prepare_noise(root_dir, fs):
86-
utt2spk = {}
87-
utt2wav = {}
88-
num_good_files = 0
89-
num_bad_files = 0
90-
noise_dir = os.path.join(root_dir, "noise")
91-
for root, dirs, files in os.walk(noise_dir):
92-
for file in files:
93-
file_path = os.path.join(root, file)
94-
if file.endswith(".wav"):
95-
utt = str(file).replace(".wav", "")
96-
utt2wav[utt] = file_path
97-
utt2spk[utt] = utt
98-
utt2spk_str = ""
99-
utt2wav_str = ""
100-
for utt in utt2spk:
101-
if utt in utt2wav:
102-
utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
103-
if fs == 8:
104-
utt2wav_str = utt2wav_str + utt + " sox -t wav " + utt2wav[utt] + " -r 8k -t wav - |\n"
105-
else:
106-
utt2wav_str = utt2wav_str + utt + " sox -t wav " + utt2wav[utt] + " -r 16k -t wav - |\n"
107-
num_good_files += 1
108-
else:
109-
print("Missing file", utt)
110-
num_bad_files += 1
111-
print("In noise directory, processed", num_good_files, "files;", num_bad_files, "had missing wav data")
112-
return utt2spk_str, utt2wav_str
125+
utt2spk = {}
126+
utt2wav = {}
127+
num_good_files = 0
128+
num_bad_files = 0
129+
noise_dir = os.path.join(root_dir, "noise")
130+
for root, dirs, files in os.walk(noise_dir):
131+
for file in files:
132+
file_path = os.path.join(root, file)
133+
if file.endswith(".wav"):
134+
utt = str(file).replace(".wav", "")
135+
utt2wav[utt] = file_path
136+
utt2spk[utt] = utt
137+
utt2spk_str = ""
138+
utt2wav_str = ""
139+
for utt in utt2spk:
140+
if utt in utt2wav:
141+
utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
142+
if fs == 8:
143+
utt2wav_str = (
144+
utt2wav_str
145+
+ utt
146+
+ " sox -t wav "
147+
+ utt2wav[utt]
148+
+ " -r 8k -t wav - |\n"
149+
)
150+
else:
151+
utt2wav_str = (
152+
utt2wav_str
153+
+ utt
154+
+ " sox -t wav "
155+
+ utt2wav[utt]
156+
+ " -r 16k -t wav - |\n"
157+
)
158+
num_good_files += 1
159+
else:
160+
print("Missing file", utt)
161+
num_bad_files += 1
162+
print(
163+
"In noise directory, processed",
164+
num_good_files,
165+
"files;",
166+
num_bad_files,
167+
"had missing wav data",
168+
)
169+
return utt2spk_str, utt2wav_str
170+
113171

114172
def main():
115-
in_dir = sys.argv[1]
116-
fs = int(sys.argv[2])
117-
out_dir = sys.argv[3]
118-
use_vocals = sys.argv[4] == "Y"
119-
utt2spk_music, utt2wav_music = prepare_music(in_dir, fs, use_vocals)
120-
utt2spk_speech, utt2wav_speech = prepare_speech(in_dir, fs)
121-
utt2spk_noise, utt2wav_noise = prepare_noise(in_dir, fs)
122-
utt2spk = utt2spk_speech + utt2spk_music + utt2spk_noise
123-
utt2wav = utt2wav_speech + utt2wav_music + utt2wav_noise
124-
wav_fi = open(os.path.join(out_dir, "wav.scp"), 'w')
125-
wav_fi.write(utt2wav)
126-
utt2spk_fi = open(os.path.join(out_dir, "utt2spk"), 'w')
127-
utt2spk_fi.write(utt2spk)
173+
in_dir = sys.argv[1]
174+
fs = int(sys.argv[2])
175+
out_dir = sys.argv[3]
176+
use_vocals = sys.argv[4] == "Y"
177+
utt2spk_music, utt2wav_music = prepare_music(in_dir, fs, use_vocals)
178+
utt2spk_speech, utt2wav_speech = prepare_speech(in_dir, fs)
179+
utt2spk_noise, utt2wav_noise = prepare_noise(in_dir, fs)
180+
utt2spk = utt2spk_speech + utt2spk_music + utt2spk_noise
181+
utt2wav = utt2wav_speech + utt2wav_music + utt2wav_noise
182+
wav_fi = open(os.path.join(out_dir, "wav.scp"), "w")
183+
wav_fi.write(utt2wav)
184+
utt2spk_fi = open(os.path.join(out_dir, "utt2spk"), "w")
185+
utt2spk_fi.write(utt2spk)
128186

129187

130-
if __name__=="__main__":
131-
main()
188+
if __name__ == "__main__":
189+
main()

egs/chime5_spkdet/v1/local/score_dcf.py

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,48 +20,54 @@
2020

2121
def score_dcf(key_file, score_file, output_path):
2222

23-
logging.info('Load key: %s' % key_file)
23+
logging.info("Load key: %s" % key_file)
2424
key = TrialKey.load_txt(key_file)
25-
logging.info('Load scores: %s' % score_file)
25+
logging.info("Load scores: %s" % score_file)
2626
scr = TrialScores.load_txt(score_file)
2727
tar, non = scr.get_tar_non(key)
2828

29-
priors = np.array([0.001, 0.005, 0.01, 0.05 ])
29+
priors = np.array([0.001, 0.005, 0.01, 0.05])
3030
min_dcf, act_dcf, eer, _ = fast_eval(tar, non, priors)
31-
31+
3232
output_dir = os.path.dirname(output_path)
3333
if not os.path.isdir(output_dir):
3434
os.makedirs(output_dir)
3535

36-
output_file = output_path + '_results'
37-
with open(output_file, 'w') as f:
38-
s = 'EER: {0:.2f} DCF5e-2: {1:.3f} / {2:.3f} DCF1e-2: {3:.3f} / {4:.3f} DCF5e-3: {5:.3f} / {6:.3f} DCF1e-3: {7:.3f} / {8:.3f}'.format(
39-
eer * 100, min_dcf[3], act_dcf[3],
40-
min_dcf[2], act_dcf[2],
41-
min_dcf[1], act_dcf[1],
42-
min_dcf[0], act_dcf[0])
36+
output_file = output_path + "_results"
37+
with open(output_file, "w") as f:
38+
s = "EER: {0:.2f} DCF5e-2: {1:.3f} / {2:.3f} DCF1e-2: {3:.3f} / {4:.3f} DCF5e-3: {5:.3f} / {6:.3f} DCF1e-3: {7:.3f} / {8:.3f}".format(
39+
eer * 100,
40+
min_dcf[3],
41+
act_dcf[3],
42+
min_dcf[2],
43+
act_dcf[2],
44+
min_dcf[1],
45+
act_dcf[1],
46+
min_dcf[0],
47+
act_dcf[0],
48+
)
4349
f.write(s)
4450
logging.info(s)
45-
51+
4652

4753
if __name__ == "__main__":
4854

49-
parser=argparse.ArgumentParser(
50-
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
51-
fromfile_prefix_chars='@',
52-
description='Computes EER and DCF')
55+
parser = argparse.ArgumentParser(
56+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
57+
fromfile_prefix_chars="@",
58+
description="Computes EER and DCF",
59+
)
60+
61+
parser.add_argument("--key-file", dest="key_file", required=True)
62+
parser.add_argument("--score-file", dest="score_file", required=True)
63+
parser.add_argument("--output-path", dest="output_path", required=True)
64+
parser.add_argument(
65+
"-v", "--verbose", dest="verbose", default=1, choices=[0, 1, 2, 3], type=int
66+
)
5367

54-
parser.add_argument('--key-file', dest='key_file', required=True)
55-
parser.add_argument('--score-file', dest='score_file', required=True)
56-
parser.add_argument('--output-path', dest='output_path', required=True)
57-
parser.add_argument('-v', '--verbose', dest='verbose', default=1,
58-
choices=[0, 1, 2, 3], type=int)
59-
60-
args=parser.parse_args()
68+
args = parser.parse_args()
6169
config_logger(args.verbose)
6270
del args.verbose
6371
logging.debug(args)
64-
65-
score_dcf(**vars(args))
66-
6772

73+
score_dcf(**vars(args))

0 commit comments

Comments
 (0)