-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathextract_features.py
84 lines (68 loc) · 2.64 KB
/
extract_features.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
r'''
____ ____ _ ____ _____ _ _
| _ \ / ___| / \ / ___|| ____| _ __ ___ ___ __| | ___| |___
| | | | | / _ \ \___ \| _| _____| '_ ` _ \ / _ \ / _` |/ _ \ / __|
| |_| | |___ / ___ \ ___) | |__|_____| | | | | | (_) | (_| | __/ \__ \\
|____/ \____/_/ \_\____/|_____| |_| |_| |_|\___/ \__,_|\___|_|___/
Feature extraction example
'''
import os
import argparse
from dcase_models.data.datasets import get_available_datasets
from dcase_models.data.features import get_available_features
from dcase_models.util.files import load_json
def main():
# Parse arguments
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
'-d', '--dataset', type=str,
help='dataset name (e.g. UrbanSound8k, ESC50, URBAN_SED, SONYC_UST)',
default='UrbanSound8k'
)
parser.add_argument(
'-f', '--features', type=str,
help='features name (e.g. Spectrogram, MelSpectrogram, Openl3)',
default='MelSpectrogram'
)
parser.add_argument(
'-p', '--path', type=str,
help='path to the parameters.json file',
default='../'
)
args = parser.parse_args()
print(__doc__)
if args.dataset not in get_available_datasets():
raise AttributeError('Dataset not available')
if args.features not in get_available_features():
raise AttributeError('Features not available')
# Get parameters
parameters_file = os.path.join(args.path, 'parameters.json')
params = load_json(parameters_file)
params_dataset = params['datasets'][args.dataset]
params_features = params['features']
# Get and init dataset class
dataset_class = get_available_datasets()[args.dataset]
dataset_path = os.path.join(args.path, params_dataset['dataset_path'])
dataset = dataset_class(dataset_path)
# Get and init feature class
features_class = get_available_features()[args.features]
features = features_class(
sequence_time=params_features['sequence_time'],
sequence_hop_time=params_features['sequence_hop_time'],
audio_win=params_features['audio_win'],
audio_hop=params_features['audio_hop'],
sr=params_features['sr'], **params_features[args.features]
)
# Extract features
if features.check_if_extracted(dataset):
print('%s features were already extracted for %s dataset. ' % (
args.features, args.dataset))
else:
print('Extracting features ...')
features.extract(dataset)
print('Done!')
if __name__ == "__main__":
main()