12
12
import os
13
13
import h5py
14
14
import shutil
15
- import tempfile
15
+ import argparse
16
16
17
17
from abnet3 .utils import read_vad_file , read_feats , Features_Accessor
18
18
@@ -341,6 +341,27 @@ def load_mean_variance(self, file_path):
341
341
342
342
return {'mean' : mean_var [0 ], 'variance' : mean_var [1 ]}
343
343
344
+
345
+ def normalize (self , input_features , output_features ):
346
+ print ("Normalizing" )
347
+ if self .norm_per_file :
348
+ self .mean_var_norm_per_file (input_features , output_features ,
349
+ vad_file = self .vad_file )
350
+ else :
351
+ if self .load_mean_variance_path is not None :
352
+ params = self .load_mean_variance (
353
+ file_path = self .load_mean_variance_path )
354
+ else :
355
+ params = None
356
+ mean , variance = self .mean_variance_normalisation (
357
+ input_features , output_features , params = params ,
358
+ vad_file = self .vad_file
359
+ )
360
+ if self .save_mean_variance_path is not None :
361
+ self .save_mean_variance (
362
+ mean , variance ,
363
+ output_file = self .save_mean_variance_path )
364
+
344
365
def generate (self ):
345
366
346
367
functions = {
@@ -370,23 +391,7 @@ def generate(self):
370
391
if self .normalization :
371
392
print ("Normalizing" )
372
393
h5_temp2 = tempdir + '/temp2'
373
- if self .norm_per_file :
374
- self .mean_var_norm_per_file (h5_temp1 , h5_temp2 ,
375
- vad_file = self .vad_file )
376
- else :
377
- if self .load_mean_variance_path is not None :
378
- params = self .load_mean_variance (
379
- file_path = self .load_mean_variance_path )
380
- else :
381
- params = None
382
- mean , variance = self .mean_variance_normalisation (
383
- h5_temp1 , h5_temp2 , params = params ,
384
- vad_file = self .vad_file
385
- )
386
- if self .save_mean_variance_path is not None :
387
- self .save_mean_variance (
388
- mean , variance ,
389
- output_file = self .save_mean_variance_path )
394
+ self .normalize (h5_temp1 , h5_temp2 )
390
395
else :
391
396
h5_temp2 = h5_temp1
392
397
if self .stack :
@@ -397,3 +402,93 @@ def generate(self):
397
402
shutil .copy (h5_temp2 , self .output_path )
398
403
finally :
399
404
shutil .rmtree (tempdir )
405
+
406
+
407
+
408
+ def main_wav (args ):
409
+
410
+ features_generator = FeaturesGenerator (
411
+ files = args .wav_dir ,
412
+ output_path = args .output_path ,
413
+ method = args .method ,
414
+ n_filters = args .n_filters ,
415
+ save_mean_variance_path = args .save_mean_var ,
416
+ load_mean_variance_path = args .load_mean_var ,
417
+ vad_file = args .vad ,
418
+ normalization = args .normalization ,
419
+ stack = True ,
420
+ norm_per_file = args .norm_per_file ,
421
+ norm_per_channel = args .norm_per_channel ,
422
+ )
423
+
424
+ features_generator .generate ()
425
+
426
+ def main_normalize (args ):
427
+ features_generator = FeaturesGenerator (
428
+ save_mean_variance_path = args .save_mean_var ,
429
+ load_mean_variance_path = args .load_mean_var ,
430
+ vad_file = args .vad ,
431
+ normalization = True ,
432
+ norm_per_file = args .norm_per_file ,
433
+ norm_per_channel = args .norm_per_channel ,
434
+ )
435
+
436
+ features_generator .normalize (
437
+ args .input_features ,
438
+ args .output_features
439
+ )
440
+
441
+ def main ():
442
+ parser = argparse .ArgumentParser ()
443
+
444
+ subparsers = parser .add_subparsers (help = 'sub-command help' )
445
+
446
+ parser_wav = subparsers .add_parser ("wav" )
447
+ parser_normalize = subparsers .add_parser ("norm" )
448
+
449
+
450
+ parser_wav .add_argument ("wav_dir" , help = "Path to wav directory" )
451
+ parser_wav .add_argument ("output_path" , help = "Path to output h5f file" )
452
+ parser_wav .add_argument ("method" , choices = ["mfcc" , "fbanks" ],
453
+ help = "which features to generate" )
454
+ parser_wav .add_argument ("--vad" , help = "Path to vad file "
455
+ "(CSV, seconds with header)" )
456
+ parser_wav .add_argument ("--normalization" , "-n" , action = "store_true" )
457
+ parser_wav .add_argument ("--norm-per-file" , action = "store_true" ,
458
+ help = "Independent normalization for each file" )
459
+ parser_wav .add_argument ("--norm-per-channel" , action = "store_true" ,
460
+ help = "Normalize each channel independently" )
461
+ parser_wav .add_argument ("--n-filters" , type = int , default = 40 )
462
+ parser_wav .add_argument ("--save-mean-var" , type = str ,
463
+ help = "Path to emplacement where mean / var"
464
+ "will be saved" )
465
+ parser_wav .add_argument ("--load-mean-var" , type = str ,
466
+ help = "Path to emplacement where mean / var"
467
+ "are saved. Will be used to compute test features" )
468
+
469
+ parser_wav .set_defaults (func = main_wav )
470
+
471
+ parser_normalize .add_argument ("input_features" , help = "Path to input h5f file" )
472
+ parser_normalize .add_argument ("output_features" , help = "Path to output h5f file" )
473
+ parser_normalize .add_argument ("--vad" , help = "Path to vad file "
474
+ "(CSV, seconds with header)" )
475
+ parser_normalize .add_argument ("--norm-per-file" , action = "store_true" ,
476
+ help = "Independent normalization for each file" )
477
+ parser_normalize .add_argument ("--norm-per-channel" , action = "store_true" ,
478
+ help = "Normalize each channel independently" )
479
+ parser_normalize .add_argument ("--save-mean-var" , type = str ,
480
+ help = "Path to emplacement where mean / var"
481
+ "will be saved" )
482
+ parser_normalize .add_argument ("--load-mean-var" , type = str ,
483
+ help = "Path to emplacement where mean / var"
484
+ "are saved. Will be used to compute test features" )
485
+
486
+ parser_normalize .set_defaults (func = main_normalize )
487
+
488
+ args = parser .parse_args ()
489
+ if args .func :
490
+ args .func (args )
491
+
492
+
493
+ if __name__ == '__main__' :
494
+ main ()
0 commit comments