annotate extract_features.py @ 7:b7169083b9ea tip

fix typo in variable name
author Maria Panteli
date Tue, 01 Jan 2019 15:51:38 +0200
parents c4ef4a02fc19
children
rev   line source
Maria@1 1 # -*- coding: utf-8 -*-
Maria@1 2 """
Maria@1 3 Created on Thu Feb 11 19:51:24 2016
Maria@1 4
Maria@1 5 @author: mariapanteli
Maria@1 6 """
Maria@1 7 """ Extract scale transform and pitch bihistogram descriptors"""
Maria@1 8
Maria@1 9 import os
Maria@1 10 import numpy
Maria@1 11 import pandas
Maria@1 12 import sys
Maria@1 13 sys.path.append('util')
Maria@1 14 import pitch_bihist as pbh
Maria@1 15 import scale_transform as stf
Maria@1 16
Maria@1 17
Maria@1 18 def extract_pitch_bihist(filenames):
Maria@1 19 """ compute pitch bihistogram feature for each audio file in filenames
Maria@1 20 """
Maria@1 21 melf = []
Maria@1 22 for filename in filenames:
Maria@1 23 print filename
Maria@1 24 pb = pbh.PitchBihist()
Maria@1 25 pbihist = pb.get_pitchbihist(filename=filename)
Maria@1 26 average_frame = numpy.nanmean(pbihist.T, axis=0, keepdims=True)
Maria@1 27 melf.append(average_frame)
Maria@1 28 melf = numpy.concatenate(melf)
Maria@1 29 return melf
Maria@1 30
Maria@1 31
Maria@1 32 def extract_scale_transform(filenames):
Maria@1 33 """ compute scale transform feature for each audio file in filenames
Maria@1 34 """
Maria@1 35 rhyf = []
Maria@7 36 for filename in filenames:
Maria@1 37 print filename
Maria@1 38 st = stf.ScaleTransform()
Maria@1 39 stransf = st.get_scale_transform(filename=filename)
Maria@1 40 average_frame = numpy.nanmean(stransf.T, axis=0, keepdims=True)
Maria@1 41 rhyf.append(average_frame)
Maria@1 42 rhyf = numpy.concatenate(rhyf)
Maria@1 43 return rhyf
Maria@1 44
Maria@1 45
Maria@1 46 if __name__ == '__main__':
Maria@1 47 # Load metadata to get audio filenames
Maria@1 48 df = pandas.read_csv(os.path.join('data','Metadata.csv'))
Maria@1 49 filenames = df["filename"].get_values()
Maria@1 50
Maria@1 51 # Specify audio directory and append to audio filenames
Maria@1 52 filenames_mel = [os.path.join('audio','melodies', ff) for ff in filenames]
Maria@1 53 filenames_rhy = [os.path.join('audio','rhythms', ff) for ff in filenames]
Maria@1 54
Maria@1 55 pitch_bihist = extract_pitch_bihist(filenames_mel)
Maria@1 56 scale_transform = extract_scale_transform(filenames_rhy)
Maria@1 57
Maria@1 58 # Save .csv where rows = n_files, columns = n_features
Maria@1 59 write_file = False
Maria@1 60 if write_file:
Maria@1 61 numpy.savetxt(os.path.join('data', 'PB.csv'), pitch_bihist, delimiter=',', fmt='%10.12f')
Maria@1 62 numpy.savetxt(os.path.join('data', 'ST.csv'), scale_transform, delimiter=',', fmt='%10.12f')