예제 #1
0
def test_slide_and_accumulate():

    ed = EventDetector(class_labels=['event1', 'event2'],
                       disable_progress_bar=True,
                       params={
                           'hop_length_seconds': 0.02,
                       })
    probabilities = numpy.array(
        [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0])

    # Test sum
    res = ed._slide_and_accumulate(input_probabilities=probabilities,
                                   window_length=2,
                                   accumulation_type='sliding_sum').tolist()
    nose.tools.assert_list_equal(res, [3, 5, 7, 9, 11, 13, 15, 17, 9, 10])

    # Test mean
    res = ed._slide_and_accumulate(input_probabilities=probabilities,
                                   window_length=2,
                                   accumulation_type='sliding_mean').tolist()
    nose.tools.assert_list_equal(
        res, [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.0, 10.0])

    # Test median
    res = ed._slide_and_accumulate(
        input_probabilities=probabilities,
        window_length=3,
        accumulation_type='sliding_median').tolist()
    nose.tools.assert_list_equal(
        res, [2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 8.0, 9.0, 10.0])

    nose.tools.assert_raises(AssertionError, ed._slide_and_accumulate,
                             probabilities, 2, "test")
예제 #2
0
def test_contiguous_regions():
    ed = EventDetector(class_labels=['event1', 'event2'],
                       disable_progress_bar=True,
                       params={
                           'hop_length_seconds': 0.02,
                       })
    activity_array = numpy.array(
        [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1])
    res = ed._contiguous_regions(activity_array=activity_array).tolist()
    nose.tools.assert_list_equal(res, [[4, 8], [12, 14], [16, 20]])
예제 #3
0
def test_activity_processing():

    ed = EventDetector(class_labels=['event1', 'event2'],
                       disable_progress_bar=True,
                       params={
                           'hop_length_seconds': 0.02,
                       })
    activity = numpy.array([1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0])
    res = ed._activity_processing(activity_vector=activity,
                                  window_size=3,
                                  processing_type="median_filtering").tolist()
    nose.tools.assert_list_equal(
        res, [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0])

    nose.tools.assert_raises(AssertionError, ed._activity_processing, activity,
                             3, "test")
예제 #4
0
def test_get_target_matrix_dict():
    FeatureExtractor(store=True, overwrite=True).extract(
        audio_file=os.path.join('material', 'test.wav'),
        extractor_name='mfcc',
        extractor_params={'mfcc': {
            'n_mfcc': 10
        }},
        storage_paths={'mfcc': os.path.join('material', 'test.mfcc.cpickle')})

    feature_container = FeatureContainer(
        filename=os.path.join('material', 'test.mfcc.cpickle'))

    data = {
        'file1.wav': feature_container,
        'file2.wav': feature_container,
    }

    annotations = {
        'file1.wav':
        MetaDataContainer([{
            'file': 'file1.wav',
            'scene_label': 'scene1',
            'event_onset': 0.0,
            'event_offset': 1.0,
            'event_label': 'event1',
        }, {
            'file': 'file1.wav',
            'scene_label': 'scene1',
            'event_onset': 1.0,
            'event_offset': 2.0,
            'event_label': 'event2',
        }]),
        'file2.wav':
        MetaDataContainer([{
            'file': 'file2.wav',
            'scene_label': 'scene1',
            'event_onset': 0.0,
            'event_offset': 1.0,
            'event_label': 'event2',
        }, {
            'file': 'file2.wav',
            'scene_label': 'scene1',
            'event_onset': 1.0,
            'event_offset': 2.0,
            'event_label': 'event1',
        }]),
    }

    ed = EventDetector(class_labels=['event1', 'event2'],
                       disable_progress_bar=True,
                       params={
                           'hop_length_seconds': 0.02,
                       })
    target_matrix = ed._get_target_matrix_dict(data=data,
                                               annotations=annotations)

    # Test shape
    nose.tools.eq_(target_matrix['file1.wav'].shape, (501, 2))
    nose.tools.eq_(target_matrix['file2.wav'].shape, (501, 2))

    # Test content
    nose.tools.eq_(numpy.sum(target_matrix['file1.wav'][:, 0] == 1), 50)
    nose.tools.eq_(numpy.sum(target_matrix['file1.wav'][:, 1] == 1), 50)

    nose.tools.eq_(numpy.sum(target_matrix['file2.wav'][:, 0] == 1), 50)
    nose.tools.eq_(numpy.sum(target_matrix['file2.wav'][:, 1] == 1), 50)
예제 #5
0
def test_generate_validation():

    annotations = {
        'file1.wav':
        MetaDataContainer([{
            'file': 'file1.wav',
            'scene_label': 'scene1',
            'event_onset': 0.0,
            'event_offset': 1.0,
            'event_label': 'event1',
            'location_identifier': 'a',
        }, {
            'file': 'file1.wav',
            'scene_label': 'scene1',
            'event_onset': 1.0,
            'event_offset': 2.0,
            'event_label': 'event2',
            'location_identifier': 'a',
        }, {
            'file': 'file1.wav',
            'scene_label': 'scene1',
            'event_onset': 2.0,
            'event_offset': 3.0,
            'event_label': 'event2',
            'location_identifier': 'a',
        }, {
            'file': 'file1.wav',
            'scene_label': 'scene1',
            'event_onset': 4.0,
            'event_offset': 5.0,
            'event_label': 'event1',
            'location_identifier': 'a',
        }, {
            'file': 'file1.wav',
            'scene_label': 'scene1',
            'event_onset': 1.0,
            'event_offset': 2.0,
            'event_label': 'event1',
            'location_identifier': 'a',
        }]),
        'file2.wav':
        MetaDataContainer([{
            'file': 'file2.wav',
            'scene_label': 'scene1',
            'event_onset': 0.0,
            'event_offset': 1.0,
            'event_label': 'event2',
            'location_identifier': 'b',
        }, {
            'file': 'file2.wav',
            'scene_label': 'scene1',
            'event_onset': 1.0,
            'event_offset': 2.0,
            'event_label': 'event1',
            'location_identifier': 'b',
        }, {
            'file': 'file2.wav',
            'scene_label': 'scene1',
            'event_onset': 2.0,
            'event_offset': 3.0,
            'event_label': 'event2',
            'location_identifier': 'b',
        }, {
            'file': 'file2.wav',
            'scene_label': 'scene1',
            'event_onset': 3.0,
            'event_offset': 4.0,
            'event_label': 'event2',
            'location_identifier': 'b',
        }])
    }

    ed = EventDetector(class_labels=['event1', 'event2'],
                       disable_progress_bar=True,
                       params={
                           'hop_length_seconds': 0.02,
                       })

    # Test generated_scene_location_event_balanced
    validation_set = ed._generate_validation(
        annotations=annotations,
        validation_type='generated_scene_location_event_balanced',
        valid_percentage=0.50,
        seed=0)
    nose.tools.eq_(len(validation_set), 1)

    # Test generated_event_file_balanced
    annotations = {
        'file1.wav':
        MetaDataContainer([
            {
                'file': 'file1.wav',
                'scene_label': 'scene1',
                'event_onset': 0.0,
                'event_offset': 1.0,
                'event_label': 'event1',
                'location_identifier': 'a',
            },
        ]),
        'file2.wav':
        MetaDataContainer([
            {
                'file': 'file2.wav',
                'scene_label': 'scene1',
                'event_onset': 0.0,
                'event_offset': 1.0,
                'event_label': 'event2',
                'location_identifier': 'b',
            },
        ])
    }

    validation_set = ed._generate_validation(
        annotations=annotations,
        validation_type='generated_event_file_balanced',
        valid_percentage=0.50,
        seed=0)
    nose.tools.assert_list_equal(validation_set, ['file1.wav', 'file2.wav'])

    nose.tools.assert_raises(AssertionError, ed._generate_validation,
                             annotations, 'test', 0.5)