Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
    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)