comparison tests/test_load_features.py @ 35:c4428589b82b branch-tests

more tests in load_features
author Maria Panteli
date Thu, 14 Sep 2017 13:07:19 +0100
parents 115774aff442
children b1d9ba5f888e
comparison
equal deleted inserted replaced
34:115774aff442 35:c4428589b82b
5 @author: mariapanteli 5 @author: mariapanteli
6 """ 6 """
7 7
8 import pytest 8 import pytest
9 9
10 import os
10 import numpy as np 11 import numpy as np
11 12 import pandas as pd
12 import scripts.load_features as load_features 13 import scripts.load_features as load_features
13 14
14 feat_loader = load_features.FeatureLoader(win2sec=8) 15 feat_loader = load_features.FeatureLoader(win2sec=8)
15 16
16 17
93 frames = np.vstack([frames1, frames2]) 94 frames = np.vstack([frames1, frames2])
94 aveframes = feat_loader.average_local_frames(frames, getstd=True) 95 aveframes = feat_loader.average_local_frames(frames, getstd=True)
95 aveframes_true = np.array([[0.5, 0], [1.5, 1], [0.1, 0], [0.1, 0]]) 96 aveframes_true = np.array([[0.5, 0], [1.5, 1], [0.1, 0], [0.1, 0]])
96 # test only the second frame which contains values 0 or values 1 for all 8-second frame entries 97 # test only the second frame which contains values 0 or values 1 for all 8-second frame entries
97 assert np.array_equal(aveframes[:, 1], aveframes_true[:, 1]) 98 assert np.array_equal(aveframes[:, 1], aveframes_true[:, 1])
99
100
101 def test_get_op_from_melspec_n_frames():
102 dur_sec = 10.0
103 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
104 np.random.seed(1)
105 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands
106 melspec = melspec - np.min(melspec) # melspec must be positive
107 opmel = feat_loader.get_op_from_melspec(melspec)
108 n_frames = opmel.shape[0]
109 # expect 4 frames for windows not centered and .5 sec hop size
110 # np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2)
111 assert n_frames == 4
112
113
114 def test_get_op_from_melspec_n_bins():
115 dur_sec = 10.0
116 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
117 np.random.seed(1)
118 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands
119 melspec = melspec - np.min(melspec) # melspec must be positive
120 opmel = feat_loader.get_op_from_melspec(melspec)
121 n_bins = opmel.shape[1]
122 assert n_bins == 40 * 200
123
124
125 def test_get_op_from_melspec_K_bands():
126 dur_sec = 10.0
127 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
128 np.random.seed(1)
129 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands
130 melspec = melspec - np.min(melspec) # melspec must be positive
131 K = 2
132 opmel = feat_loader.get_op_from_melspec(melspec, K=K)
133 n_bins = opmel.shape[1]
134 assert n_bins == K * 200
135
136
137 def test_get_mfcc_from_melspec_n_coef():
138 dur_sec = 10.0
139 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
140 np.random.seed(1)
141 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands
142 melspec = melspec - np.min(melspec) # melspec must be positive
143 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=False)
144 assert mfcc.shape[1] == 20
145
146
147 def test_get_mfcc_from_melspec_n_coef_delta():
148 dur_sec = 10.0
149 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
150 np.random.seed(1)
151 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands
152 melspec = melspec - np.min(melspec) # melspec must be positive
153 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=True, avelocalframes=False)
154 assert mfcc.shape[1] == 40
155
156
157 def test_get_mfcc_from_melspec_n_frames():
158 dur_sec = 10.0
159 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
160 np.random.seed(1)
161 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands
162 melspec = melspec - np.min(melspec) # melspec must be positive
163 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=False)
164 assert mfcc.shape[0] == dur_frames
165
166
167 def test_get_mfcc_from_melspec_n_frames_win2():
168 dur_sec = 10.0
169 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
170 np.random.seed(1)
171 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands
172 melspec = melspec - np.min(melspec) # melspec must be positive
173 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=True)
174 n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2)
175 assert mfcc.shape[0] == n_frames_true
176
177
178 def test_get_ave_chroma_align():
179 dur_sec = 10.0
180 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
181 np.random.seed(1)
182 chroma = np.random.randn(60, dur_frames) # chroma with 60 bins
183 chroma = chroma - np.min(chroma) # chroma must be positive
184 ave_chroma = feat_loader.get_ave_chroma(chroma, alignchroma=True, avelocalframes=False)
185 # the maximum bin across time is the first bin (after alignment)
186 assert np.argmax(np.sum(ave_chroma, axis=0)) == 0
187
188
189 def test_get_ave_chroma_n_frames():
190 dur_sec = 10.0
191 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
192 np.random.seed(1)
193 chroma = np.random.randn(60, dur_frames) # chroma with 60 bins
194 chroma = chroma - np.min(chroma) # chroma must be positive
195 ave_chroma = feat_loader.get_ave_chroma(chroma, avelocalframes=True, stdlocalframes=False)
196 n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2)
197 assert ave_chroma.shape[0] == n_frames_true
198
199
200 def test_get_ave_chroma_n_bins():
201 dur_sec = 10.0
202 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr))
203 np.random.seed(1)
204 chroma = np.random.randn(60, dur_frames) # chroma with 60 bins
205 chroma = chroma - np.min(chroma) # chroma must be positive
206 ave_chroma = feat_loader.get_ave_chroma(chroma, avelocalframes=True, stdlocalframes=True)
207 assert ave_chroma.shape[1] == 120
208
209
210 def test_get_pb_for_file_empty():
211 pbihist = feat_loader.get_pb_for_file('')
212 assert np.array_equal(pbihist, [])
213
214
215 def test_get_pb_for_file_n_bins():
216 pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=False, scale=False)
217 assert pbihist.shape[1] == 3600
218
219
220 def test_get_pb_for_file_align():
221 pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=False, scale=False)
222 pbihist = pbihist.get_values()
223 assert np.sum(pbihist[:, :60].ravel()) > np.sum(pbihist[:, 60:120].ravel())
224
225
226 def test_get_pb_for_file_nmf():
227 pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=True, scale=False)
228 assert pbihist.shape[1] == 240
229
230
231 def test_get_features():
232 df = pd.read_csv('data/sample_dataset/metadata.csv')
233 df = df.iloc[:1, :]
234 os.chdir('data/')
235 data_list = feat_loader.get_features(df)
236 os.chdir('..')
237 assert len(np.unique(data_list[-1])) == 1
238
239
240 def test_get_features_n_files():
241 df = pd.read_csv('data/sample_dataset/metadata.csv')
242 n_files = 3
243 df = df.iloc[:n_files, :]
244 os.chdir('data/')
245 data_list = feat_loader.get_features(df)
246 os.chdir('..')
247 assert len(np.unique(data_list[-1])) == n_files
248
249
250 def test_get_features_n_frames():
251 df = pd.read_csv('data/sample_dataset/metadata.csv')
252 df = df.iloc[:1, :]
253 os.chdir('data/')
254 data_list = feat_loader.get_features(df)
255 os.chdir('..')
256 dur_sec = 11.5 # duration of first file in metadata.csv is > 11 seconds
257 n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2)
258 assert len(data_list[0]) == n_frames_true
259