diff scripts/load_features.py @ 43:b1d9ba5f888e branch-tests

debugging tests
author Maria Panteli <m.x.panteli@gmail.com>
date Fri, 15 Sep 2017 16:17:55 +0100
parents 3b67cd634b9a
children 06e5711f9f62
line wrap: on
line diff
--- a/scripts/load_features.py	Fri Sep 15 12:27:11 2017 +0100
+++ b/scripts/load_features.py	Fri Sep 15 16:17:55 2017 +0100
@@ -103,7 +103,7 @@
         return music_idx
     
     
-    def get_features(self, df, stop_sec=30.0, class_label='Country', precomp_melody=False):
+    def get_features(self, df, stop_sec=30.0, class_label='Country', precomp_melody=True):
         oplist = []
         mflist = []
         chlist = []
@@ -116,26 +116,32 @@
                 continue
             print 'file ' + str(i) + ' of ' + str(n_files)
             music_idx = self.get_music_idx_for_file(df['Speech'].iloc[i])
-            if len(music_idx)==0:
-                # no music segments -> skip this file
+            #min_dur_sec=8.0
+            #min_n_frames = np.int(np.floor(min_dur_sec * self.framessr2))
+            if len(music_idx)==0:  # or len(music_idx)<min_n_frames:
+                # no music segments or music segment too short -> skip this file
                 continue
-            try:
-                op, mfcc = self.get_op_mfcc_for_file(df['Melspec'].iloc[i], stop_sec=stop_sec)
-                ch = self.get_chroma_for_file(df['Chroma'].iloc[i], stop_sec=stop_sec)
-                pb = self.get_pb_for_file(df['Melodia'].iloc[i], precomp_melody=precomp_melody, stop_sec=stop_sec)
+            if 1:
+                # allow feature extraction of longer segments (2*stop_sec)
+                # because some of it might be speech segments that are filtered out
+                stop_sec_feat = 2 * stop_sec  
+                op, mfcc = self.get_op_mfcc_for_file(df['Melspec'].iloc[i], stop_sec=stop_sec_feat)
+                ch = self.get_chroma_for_file(df['Chroma'].iloc[i], stop_sec=stop_sec_feat)
+                pb = self.get_pb_for_file(df['Melodia'].iloc[i], precomp_melody=precomp_melody, stop_sec=stop_sec_feat)
                 #if precomp_melody:
                 #    pb = self.load_precomputed_pb_from_melodia(df['Melodia'].iloc[i], stop_sec=stop_sec)
                 #else:
                 #    pb = self.get_pb_from_melodia(df['Melodia'].iloc[i], stop_sec=stop_sec)
-            except:
+            else:
                 continue
             n_stop = np.int(np.ceil(stop_sec * self.framessr2))
             print n_stop, len(op), len(mfcc), len(ch), len(pb)
-            min_n_frames = np.min([n_stop, len(op), len(mfcc), len(ch), len(pb)])  # ideally, features should have the same number of frames
-            if min_n_frames==0:
+            max_n_frames = np.min([n_stop, len(op), len(mfcc), len(ch), len(pb)])  # ideally, features should have the same number of frames
+            if max_n_frames==0:
                 # no features extracted -> skip this file
                 continue
-            music_idx = music_idx[music_idx<min_n_frames]
+            # music segment duration must be <= 30sec
+            music_idx = music_idx[music_idx<max_n_frames]  
             n_frames = len(music_idx)
             oplist.append(op.iloc[music_idx, :])
             mflist.append(mfcc.iloc[music_idx, :])
@@ -271,8 +277,11 @@
         else:
             root = root_BL
         base = base.split('_')[-1].split('.csv')[0]+'_vamp_mtg-melodia_melodia_melody.csv'
+        bihist_file = os.path.join(root, base)
+        if not os.path.exists(bihist_file):
+            return pbihist
         print 'load precomputed pitch bihist', root
-        pbihist = np.loadtxt(os.path.join(root, base), delimiter=',').T
+        pbihist = np.loadtxt(bihist_file, delimiter=',').T
         n_stop = np.int(np.ceil(stop_sec * self.framessr2))
         pbihist = pbihist[:, :np.min([pbihist.shape[0], n_stop])]
         return pbihist