-
Notifications
You must be signed in to change notification settings - Fork 0
/
extractFeats.py
84 lines (62 loc) · 2.27 KB
/
extractFeats.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
__author__ = 'evgeny'
from features import logfbank
from collections import defaultdict
import scipy.io.wavfile as wav
import os
import numpy as np
sph2pipe = "/Users/evgeny/kaldi3/tools/sph2pipe_v2.5/sph2pipe"
window = 0.025
step = 0.01
nfilt = 40
fftsize = 512
left_context = 6
right_context = 2
def getAudio(path):
os.system(sph2pipe + " -f wav " + path + " tmp.wav")
(rate, sig) = wav.read("tmp.wav")
os.remove("tmp.wav")
return (rate, sig)
def extractLogFBank(rate, sig):
feats = logfbank(sig, rate, window, step, nfilt, fftsize, 0, None, 0)
return feats
keywords = ["she", "had"]
src = "/Users/evgeny/timit/TIMIT"
dst = "/Users/evgeny/data"
count = {"TEST": 10000, "TRAIN": 100000}
for type in ["TEST", "TRAIN"]:
dstt = dst + "/" + type
srct = src + "/" + type
if not os.path.exists(dstt):
os.mkdir(dstt)
mx = count[type]
item_id = 0
used = set()
wordCount = defaultdict(int)
for root, dirs, filenames in os.walk(srct):
for f in filenames:
if f.endswith(".WRD"):
id = f[:-4]
rate, sig = getAudio(root + "/" + id + ".WAV")
fbanks = extractLogFBank(rate, sig)
segments = []
file = open(root + "/" + f)
for line in file:
[start, end, word] = line.split()
start = int(start)
end = int(end) + 1
firstFrame = int(1.0 * start / rate / step)
lastFrame = int(1.0 * end / rate / step)
class_id = keywords.index(word) if word in keywords else len(keywords)
segments.append([firstFrame, lastFrame, class_id])
#sig_seg = sig[start:end]
#print root, id, start, end
#fbanks = extractLogFBank(rate, sig_seg)
#class_id = keywords.index(word) if word in keywords else len(keywords)
wordCount[class_id] += 1
#item_id += 1
np.save(dst + "/" + type + "/" + str(item_id), [fbanks, segments])
item_id += 1
file.close()
print item_id
for w in sorted(wordCount, key=wordCount.get, reverse=True):
print w, wordCount[w]