def score_model(model, x, b, t): # First, transform the data if model is not None: try: xt = model.dot(x) except: return 0.0 else: xt = x # Then, run the segmenter kmin, kmax = segmenter.get_num_segs(b[-1]) boundary_beats = segmenter.get_segments(xt, kmin=kmin, kmax=kmax) if len(boundary_beats) < 2 or len(t) < 2: return 0.0 t = np.unique(t) boundary_times = mir_eval.util.adjust_events(b[boundary_beats], t_min=0.0, t_max=t[-1])[0] truth_intervals = mir_eval.util.boundaries_to_intervals(t) pred_intervals = mir_eval.util.boundaries_to_intervals(boundary_times) score = mir_eval.segment.detection(truth_intervals, pred_intervals, trim=True)[-1] return score
def score_model(model, x, b, t): # First, transform the data if model is not None: try: xt = model.dot(x) except: return 0.0 else: xt = x # Then, run the segmenter kmin, kmax = segmenter.get_num_segs(b[-1]) boundary_beats = segmenter.get_segments(xt, kmin=kmin, kmax=kmax) if len(boundary_beats) < 2 or len(t) < 2: return 0.0 t = np.unique(t) boundary_times = mir_eval.util.adjust_events(b[boundary_beats], t_min=0.0, t_max=t[-1])[0] truth_intervals = mir_eval.util.boundaries_to_intervals(t)[0] pred_intervals = mir_eval.util.boundaries_to_intervals(boundary_times)[0] score = mir_eval.segment.detection(truth_intervals, pred_intervals, trim=True)[-1] return score
def score_model(model, x, b, t): # First, transform the data if model is not None: xt = model.dot(x) else: xt = x # Then, run the segmenter kmin, kmax = segmenter.get_num_segs(b[-1]) boundary_beats = segmenter.get_segments(xt, kmin=kmin, kmax=kmax) if len(boundary_beats) < 2 or len(t) < 2: return 0.0 boundary_times = mir_eval.util.adjust_events(b[boundary_beats], t_min=0.0, t_max=t[-1])[0] # Convert boundaries to intervals truth_intervals = mir_eval.util.boundaries_to_intervals(t)[0] pred_intervals = mir_eval.util.boundaries_to_intervals(boundary_times)[0] score = mir_eval.segment.boundary_detection(truth_intervals, pred_intervals)[-1] return score
make_metadata(annotation) for tag, bounds in zip(labels, levels): add_level(annotation, tag, make_intervals(bounds, beats)) return J if __name__ == '__main__': parameters = segmenter.process_arguments() # Load the features print '- ', os.path.basename(parameters['input_song']) X, beats = segmenter.features(parameters['input_song']) # Load the boundary transformation W_bound = segmenter.load_transform(parameters['transform_boundary']) print '\tapplying boundary transformation...' X_bound = W_bound.dot(X) # Find the segment boundaries print '\tpredicting segments...' kmin, kmax = segmenter.get_num_segs(beats[-1]) levels, labels = get_all_levels(X_bound, kmin, kmax) J = make_jams(levels, labels, beats) with open(parameters['output_file'], 'w') as f: json.dump(J, f, indent=2)