Ejemplo n.º 1
0
    def scene_metadata_container(cls, filename=None):
        from dcase_util.containers import MetaDataContainer

        if filename is not None:
            return MetaDataContainer().load(filename=filename)

        else:
            return MetaDataContainer([
                {
                    'filename': cls.audio_filename(),
                    'scene_label': 'street'
                },
                {
                    'filename': 'test1.wav',
                    'scene_label': 'home'
                },
                {
                    'filename': 'test2.wav',
                    'scene_label': 'office'
                },
                {
                    'filename': 'test3.wav',
                    'scene_label': 'car'
                },
                {
                    'filename': 'test4.wav',
                    'scene_label': 'bus'
                },
            ])
Ejemplo n.º 2
0
def test_process_events():
    meta = MetaDataContainer(content2).process_events(minimum_event_gap=0.5,
                                                      minimum_event_length=1.0)

    nose.tools.eq_(len(meta), 3)

    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.5)
    nose.tools.eq_(meta[0].offset, 3.0)

    nose.tools.eq_(meta[1].filename, 'audio_001.wav')
    nose.tools.eq_(meta[1].scene_label, 'office')
    nose.tools.eq_(meta[1].event_label, 'speech')
    nose.tools.eq_(meta[1].onset, 4.0)
    nose.tools.eq_(meta[1].offset, 6.0)

    nose.tools.eq_(meta[2].filename, 'audio_001.wav')
    nose.tools.eq_(meta[2].scene_label, 'office')
    nose.tools.eq_(meta[2].event_label, 'speech')
    nose.tools.eq_(meta[2].onset, 7.0)
    nose.tools.eq_(meta[2].offset, 8.0)

    meta = MetaDataContainer(content2).process_events(minimum_event_gap=1.0,
                                                      minimum_event_length=1.0)

    nose.tools.eq_(len(meta), 1)
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.5)
    nose.tools.eq_(meta[0].offset, 8.0)
Ejemplo n.º 3
0
def test_map_events():
    meta = MetaDataContainer(content)
    meta_mapped_1 = meta.map_events(target_event_label='activity',
                                    source_event_labels=['speech', 'printer'])
    nose.tools.eq_(len(meta_mapped_1), 4)

    meta_mapped_2 = meta.map_events(target_event_label='activity')
    nose.tools.eq_(len(meta_mapped_2), 5)
Ejemplo n.º 4
0
def test_process_events():
    meta = MetaDataContainer(content2).process_events(minimum_event_gap=0.5,
                                                      minimum_event_length=1.0)

    nose.tools.eq_(len(meta), 3)

    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.5)
    nose.tools.eq_(meta[0].offset, 3.0)

    nose.tools.eq_(meta[1].filename, 'audio_001.wav')
    nose.tools.eq_(meta[1].scene_label, 'office')
    nose.tools.eq_(meta[1].event_label, 'speech')
    nose.tools.eq_(meta[1].onset, 4.0)
    nose.tools.eq_(meta[1].offset, 6.0)

    nose.tools.eq_(meta[2].filename, 'audio_001.wav')
    nose.tools.eq_(meta[2].scene_label, 'office')
    nose.tools.eq_(meta[2].event_label, 'speech')
    nose.tools.eq_(meta[2].onset, 7.0)
    nose.tools.eq_(meta[2].offset, 8.0)

    meta = MetaDataContainer(content2).process_events(minimum_event_gap=1.0,
                                                      minimum_event_length=1.0)

    nose.tools.eq_(len(meta), 1)
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.5)
    nose.tools.eq_(meta[0].offset, 8.0)

    meta = MetaDataContainer([
        {
            'filename': 'audio_001.wav',
            'scene_label': 'office',
            'event_label': 'mouse clicking',
            'onset': 3.0,
            'offset': 5.0,
            'identifier': 'A001'
        },
        {
            'filename': 'audio_001.wav',
            'scene_label': 'office',
            'event_label': 'mouse clicking',
            'onset': 13.0,
            'offset': 13.0,
            'identifier': 'A001'
        },
    ]).process_events(minimum_event_gap=1.0,
                      minimum_event_length=numpy.spacing(1))

    nose.tools.eq_(len(meta), 1)
Ejemplo n.º 5
0
    def __init__(self, *args, **kwargs):
        """Constructor"""

        # Run ProcessorMixin init
        ProcessorMixin.__init__(self, *args, **kwargs)

        # Run MetaDataContainer init
        MetaDataContainer.__init__(self, **kwargs)

        # Run super init to call init of mixins too
        super(MetadataReadingProcessor, self).__init__(*args, **kwargs)
Ejemplo n.º 6
0
def test_addition():
    meta = MetaDataContainer(content)
    meta2 = MetaDataContainer(content2)

    meta += meta2

    nose.tools.eq_(len(meta), 9)
    nose.tools.eq_(meta[8].filename, 'audio_001.wav')
    nose.tools.eq_(meta[8].scene_label, 'office')
    nose.tools.eq_(meta[8].event_label, 'speech')
    nose.tools.eq_(meta[8].onset, 7.0)
    nose.tools.eq_(meta[8].offset, 8.0)
Ejemplo n.º 7
0
    def tag_metadata_container(cls, filename=None):
        from dcase_util.containers import MetaDataContainer

        if filename is not None:
            return MetaDataContainer().load(filename=filename)

        else:
            return MetaDataContainer([{
                'filename': cls.audio_filename(),
                'scene_label': 'street',
                'tags': 'car, bicycle',
            }])
Ejemplo n.º 8
0
def test_intersection():
    data1 = MetaDataContainer(content)

    data2 = MetaDataContainer([{
        'filename': 'audio_001.wav',
        'scene_label': 'office',
        'event_label': 'speech',
        'onset': 1.0,
        'offset': 10.0,
        'identifier': 'A001'
    }])
    intersection = data1.intersection(data2)
    nose.tools.eq_(len(intersection), 1)
    nose.tools.eq_(intersection[0].filename, 'audio_001.wav')
Ejemplo n.º 9
0
    def event_metadata_container(cls, filename=None):
        from dcase_util.containers import MetaDataContainer

        if filename is not None:
            return MetaDataContainer().load(
                filename=filename
            )

        else:
            return MetaDataContainer(
                [
                    {
                        'filename': cls.audio_filename(),
                        'scene_label': 'street',
                        'event_label': 'car',
                        'onset': 0.0,
                        'offset': 10.0
                    },
                    {
                        'filename': cls.audio_filename(),
                        'scene_label': 'street',
                        'event_label': 'bicycle',
                        'onset': 0.0,
                        'offset': 3.641
                    },
                    {
                        'filename': 'test1.wav',
                        'scene_label': 'street',
                        'event_label': 'car',
                        'onset': 3.0,
                        'offset': 5.0
                    },
                    {
                        'filename': 'test1.wav',
                        'scene_label': 'street',
                        'event_label': 'bicycle',
                        'onset': 6.0,
                        'offset': 7.0
                    },
                    {
                        'filename': 'test1.wav',
                        'scene_label': 'street',
                        'event_label': 'car',
                        'onset': 7.0,
                        'offset': 8.0
                    },
                ]
            )
def test_pad():
    minimal_event_list = [{
        'event_label': 'A',
        'onset': 0,
        'offset': 1,
    }, {
        'event_label': 'A',
        'onset': 5,
        'offset': 15,
    }, {
        'event_label': 'B',
        'onset': 1,
        'offset': 2,
    }, {
        'event_label': 'B',
        'onset': 4,
        'offset': 5,
    }, {
        'event_label': 'C',
        'onset': 7,
        'offset': 12,
    }]
    meta = MetaDataContainer(minimal_event_list)

    target_event_roll = numpy.array([
        [1., 0., 0.],  # 0
        [0., 1., 0.],  # 1
        [0., 0., 0.],  # 2
        [0., 0., 0.],  # 3
        [0., 1., 0.],  # 4
        [1., 0., 0.],  # 5
        [1., 0., 0.],  # 6
        [1., 0., 1.],  # 7
        [1., 0., 1.],  # 8
        [1., 0., 1.],  # 9
        [1., 0., 1.],  # 10
        [1., 0., 1.],  # 11
        [1., 0., 0.],  # 12
        [1., 0., 0.],  # 13
        [1., 0., 0.],  # 14
        [0., 0., 0.],  # 15
    ]).T

    # Test #1
    roller = EventRollEncoder(label_list=['A', 'B', 'C'], time_resolution=1.0)
    event_roll = roller.encode(metadata_container=meta, length_seconds=16)

    numpy.testing.assert_array_equal(target_event_roll, event_roll.data)
    nose.tools.assert_equal(event_roll.shape[0], target_event_roll.shape[0])
    nose.tools.assert_equal(event_roll.shape[1], target_event_roll.shape[1])

    padded_event_roll = roller.pad(length=18)
    nose.tools.assert_equal(padded_event_roll.length, 18)
    nose.tools.assert_equal(padded_event_roll.shape[1], event_roll.shape[1])

    padded_event_roll = roller.pad(length=10)
    nose.tools.assert_equal(padded_event_roll.length, 10)
    nose.tools.assert_equal(padded_event_roll.shape[1], event_roll.shape[1])
Ejemplo n.º 11
0
def test_event_inactivity():
    meta = MetaDataContainer(content)
    meta_inactivity = meta.event_inactivity()

    nose.tools.eq_(len(meta_inactivity), 3)

    meta = MetaDataContainer([
        {
            'filename': 'audio_001.wav',
            'scene_label': 'office',
            'event_label': 'mouse clicking',
            'onset': 3.0,
            'offset': 5.0,
            'identifier': 'A001'
        },
        {
            'filename': 'audio_001.wav',
            'scene_label': 'office',
            'event_label': 'mouse clicking',
            'onset': 13.0,
            'offset': 13.0,
            'identifier': 'A001'
        },
    ])
    meta_inactivity = meta.event_inactivity(
        duration_list={'audio_001.wav': 20.0})
    nose.tools.eq_(meta_inactivity[0].onset, 0.00)
    nose.tools.eq_(meta_inactivity[0].offset, 3.00)

    nose.tools.eq_(meta_inactivity[1].onset, 5.00)
    nose.tools.eq_(meta_inactivity[1].offset, 20.00)
Ejemplo n.º 12
0
def test_construction():
    minimal_event_list = [{
        'scene_label': 'A'
    }, {
        'scene_label': 'A'
    }, {
        'scene_label': 'B'
    }, {
        'scene_label': 'B'
    }, {
        'scene_label': 'C'
    }]
    meta = MetaDataContainer(minimal_event_list)

    target_binary_matrix = numpy.array([
        [1., 0., 0.],  # 0
        [1., 0., 0.],  # 1
        [1., 0., 0.],  # 2
    ]).T

    # Test #1
    binary_matrix = OneHotEncoder(label_list=['A', 'B', 'C'],
                                  time_resolution=1.0).encode(
                                      label='A',
                                      length_seconds=3,
                                  )

    numpy.testing.assert_array_equal(target_binary_matrix, binary_matrix.data)
    nose.tools.assert_equal(binary_matrix.shape[0],
                            target_binary_matrix.shape[0])
    nose.tools.assert_equal(binary_matrix.shape[1],
                            target_binary_matrix.shape[1])

    target_binary_matrix = numpy.array([
        [0., 1., 0.],  # 0
        [0., 1., 0.],  # 1
        [0., 1., 0.],  # 2
    ]).T

    # Test #1
    binary_matrix = OneHotEncoder(label_list=['A', 'B', 'C'],
                                  time_resolution=1.0).encode(
                                      label='B',
                                      length_seconds=3,
                                  )

    numpy.testing.assert_array_equal(target_binary_matrix, binary_matrix.data)
    nose.tools.assert_equal(binary_matrix.shape[0],
                            target_binary_matrix.shape[0])
    nose.tools.assert_equal(binary_matrix.shape[1],
                            target_binary_matrix.shape[1])
def test_construction():
    minimal_event_list = [{
        'event_label': 'A',
        'onset': 0,
        'offset': 1,
    }, {
        'event_label': 'A',
        'onset': 5,
        'offset': 15,
    }, {
        'event_label': 'B',
        'onset': 1,
        'offset': 2,
    }, {
        'event_label': 'B',
        'onset': 4,
        'offset': 5,
    }, {
        'event_label': 'C',
        'onset': 7,
        'offset': 12,
    }]
    meta = MetaDataContainer(minimal_event_list)

    target_event_roll = numpy.array([
        [1., 0., 0.],  # 0
        [0., 1., 0.],  # 1
        [0., 0., 0.],  # 2
        [0., 0., 0.],  # 3
        [0., 1., 0.],  # 4
        [1., 0., 0.],  # 5
        [1., 0., 0.],  # 6
        [1., 0., 1.],  # 7
        [1., 0., 1.],  # 8
        [1., 0., 1.],  # 9
        [1., 0., 1.],  # 10
        [1., 0., 1.],  # 11
        [1., 0., 0.],  # 12
        [1., 0., 0.],  # 13
        [1., 0., 0.],  # 14
    ]).T

    # Test #1
    event_roll = EventRollEncoder(
        label_list=['A', 'B', 'C'], time_resolution=1.0,
        label='event_label').encode(metadata_container=meta)

    numpy.testing.assert_array_equal(target_event_roll, event_roll.data)
    nose.tools.assert_equal(event_roll.shape[0], target_event_roll.shape[0])
    nose.tools.assert_equal(event_roll.shape[1], target_event_roll.shape[1])
Ejemplo n.º 14
0
    def __init__(self, **kwargs):
        """Constructor

        Parameters
        ----------
        time_resolution : float
            Hop length in seconds

        """

        super(Masker, self).__init__(**kwargs)

        # Initialize mask events
        from dcase_util.containers import MetaDataContainer
        self.mask_events = MetaDataContainer()
Ejemplo n.º 15
0
def test_content():
    meta = MetaDataContainer(content)
    nose.tools.eq_(len(meta), 5)

    # Test content
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.0)
    nose.tools.eq_(meta[0].offset, 10.0)

    nose.tools.eq_(meta[4].filename, 'audio_002.wav')
    nose.tools.eq_(meta[4].scene_label, 'meeting')
    nose.tools.eq_(meta[4].event_label, 'printer')
    nose.tools.eq_(meta[4].onset, 5.0)
    nose.tools.eq_(meta[4].offset, 7.0)
Ejemplo n.º 16
0
def test_dataset():
    d = Dataset()
    d.meta_container = MetaDataContainer(content)

    nose.tools.eq_(d.scene_labels(), ['meeting', 'office'])
    nose.tools.eq_(d.scene_label_count(), 2)
    nose.tools.eq_(d.event_labels(), ['mouse clicking', 'printer', 'speech'])
    nose.tools.eq_(d.event_label_count(), 3)

    nose.tools.eq_(d.meta_count, len(content))
    nose.tools.eq_(d.meta, content)

    nose.tools.eq_(d.file_meta(filename='audio_001.wav'),
                   [content[0], content[1], content[2]])
    nose.tools.eq_(d.file_meta(filename='audio_002.wav'),
                   [content[3], content[4]])
Ejemplo n.º 17
0
def test_add_time_offset():
    meta = MetaDataContainer(content2).add_time(time=2.0)

    nose.tools.eq_(len(meta), 4)

    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 3.0)
    nose.tools.eq_(meta[0].offset, 3.2)

    nose.tools.eq_(meta[3].filename, 'audio_001.wav')
    nose.tools.eq_(meta[3].scene_label, 'office')
    nose.tools.eq_(meta[3].event_label, 'speech')
    nose.tools.eq_(meta[3].onset, 9.0)
    nose.tools.eq_(meta[3].offset, 10.0)
def fill_event_gaps(events, duration):
    filled_events = MetaDataContainer()
    if len(events) == 0:
        filled_events.append(
            MetaDataItem({
                'onset': 0.0,
                'offset': duration,
                'event_label': '-'
            }))
        return filled_events
    sorted_events = sorted(events)
    last_offset = 0.0
    unannotated_segments = [[0.0, duration]]
    for i, e in enumerate(sorted_events):
        for i, seg in enumerate(unannotated_segments):
            if e.onset < seg[1] and e.offset > seg[0]:
                if seg[0] >= e.onset and seg[1] <= e.offset:
                    unannotated_segments.pop(i)
                elif seg[0] >= e.onset:
                    unannotated_segments[i][0] = e.offset
                elif seg[1] <= e.offset:
                    unannotated_segments[i][1] = e.onset
                else:
                    unannotated_segments.append([e.offset, seg[1]])
                    unannotated_segments[i][1] = e.onset
        filled_events.append(
            MetaDataItem({
                'onset': e.onset,
                'offset': e.offset,
                'event_label': e.event_label
            }))

    for seg in unannotated_segments:
        filled_events.append(
            MetaDataItem({
                'onset': seg[0],
                'offset': seg[1],
                'event_label': '-'
            }))

    return filled_events
Ejemplo n.º 19
0
    def system_output_file(self, filename):
        """Checks that MetaDataContainer file exists, and can be parsed.

        Parameters
        ----------
        filename : str
            File path

        Raises
        ------
        ImportError:
            Error if file format specific module cannot be imported
        IOError:
            File does not exists or has unknown file format

        Returns
        -------
        MetaDataContainer or bool

        """

        if not os.path.isfile(filename):
            self.error_log.append(u'File missing [{filename:s}]'.format(
                filename=filename
            ))

            return False

        else:
            try:
                if self.task == 'TAG':
                    data = ProbabilityContainer().load(filename=filename)

                else:
                    data = MetaDataContainer().load(filename=filename)

                return data

            except Exception:
                self.error_log.append(u'File cannot be parsed [{filename:s}]'.format(
                    filename=filename
                ))
Ejemplo n.º 20
0
def test_max_event_offset():
    nose.tools.eq_(MetaDataContainer(content).max_offset, 10)
Ejemplo n.º 21
0
def test_unique_files():
    files = MetaDataContainer(content).unique_files

    nose.tools.eq_(len(files), 2)
    nose.tools.eq_(files[0], 'audio_001.wav')
    nose.tools.eq_(files[1], 'audio_002.wav')
Ejemplo n.º 22
0
def test_unique_event_labels():
    events = MetaDataContainer(content).unique_event_labels
    nose.tools.eq_(len(events), 3)
    nose.tools.eq_(events[0], 'mouse clicking')
    nose.tools.eq_(events[1], 'printer')
    nose.tools.eq_(events[2], 'speech')
Ejemplo n.º 23
0
def test_unique_scene_labels():
    scenes = MetaDataContainer(content).unique_scene_labels
    nose.tools.eq_(len(scenes), 2)
    nose.tools.eq_(scenes[0], 'meeting')
    nose.tools.eq_(scenes[1], 'office')
Ejemplo n.º 24
0
def test_event_label_count():
    nose.tools.eq_(MetaDataContainer(content).event_label_count, 3)
Ejemplo n.º 25
0
def test_scene_label_count():
    nose.tools.eq_(MetaDataContainer(content).scene_label_count, 2)
Ejemplo n.º 26
0
def test_event_count():
    nose.tools.eq_(MetaDataContainer(content).event_count, len(content))
Ejemplo n.º 27
0
def test_formats():
    delimiters = [',', ';', '\t']
    for delimiter in delimiters:
        tmp = tempfile.NamedTemporaryFile('r+',
                                          suffix='.txt',
                                          dir='/tmp',
                                          delete=False)
        try:
            tmp.write('0.5' + delimiter + '0.7\n')
            tmp.write('2.5' + delimiter + '2.7\n')
            tmp.close()

            item = MetaDataContainer().load(filename=tmp.name)[0]
            nose.tools.eq_(item.onset, 0.5)
            nose.tools.eq_(item.offset, 0.7)

        finally:
            os.unlink(tmp.name)

        tmp = tempfile.NamedTemporaryFile('r+',
                                          suffix='.txt',
                                          dir='/tmp',
                                          delete=False)
        try:
            tmp.write('0.5' + delimiter + '0.7' + delimiter + 'event\n')
            tmp.write('2.5' + delimiter + '2.7' + delimiter + 'event\n')
            tmp.close()

            item = MetaDataContainer().load(filename=tmp.name)[0]
            nose.tools.eq_(item.onset, 0.5)
            nose.tools.eq_(item.offset, 0.7)
            nose.tools.eq_(item.event_label, 'event')

        finally:
            os.unlink(tmp.name)

        tmp = tempfile.NamedTemporaryFile('r+',
                                          suffix='.txt',
                                          dir='/tmp',
                                          delete=False)
        try:
            tmp.write('file.wav' + delimiter + 'scene' + delimiter + '0.5' +
                      delimiter + '0.7' + delimiter + 'event\n')
            tmp.write('file.wav' + delimiter + 'scene' + delimiter + '0.5' +
                      delimiter + '0.7' + delimiter + 'event\n')
            tmp.close()

            item = MetaDataContainer().load(filename=tmp.name)[0]
            nose.tools.eq_(item.onset, 0.5)
            nose.tools.eq_(item.offset, 0.7)
            nose.tools.eq_(item.event_label, 'event')
            nose.tools.eq_(item.filename, 'file.wav')
            nose.tools.eq_(item.scene_label, 'scene')

        finally:
            os.unlink(tmp.name)

        tmp = tempfile.NamedTemporaryFile('r+',
                                          suffix='.txt',
                                          dir='/tmp',
                                          delete=False)
        try:
            tmp.write('file.wav' + delimiter + 'scene' + delimiter + '0.5' +
                      delimiter + '0.7' + delimiter + 'event' + delimiter +
                      'm' + delimiter + 'a1\n')
            tmp.write('file.wav' + delimiter + 'scene' + delimiter + '0.5' +
                      delimiter + '0.7' + delimiter + 'event' + delimiter +
                      'm' + delimiter + 'a2\n')
            tmp.close()

            item = MetaDataContainer().load(filename=tmp.name)[0]
            nose.tools.eq_(item.onset, 0.5)
            nose.tools.eq_(item.offset, 0.7)
            nose.tools.eq_(item.event_label, 'event')
            nose.tools.eq_(item.filename, 'file.wav')
            nose.tools.eq_(item.scene_label, 'scene')
            nose.tools.eq_(item.identifier, 'a1')
            nose.tools.eq_(item.source_label, 'm')

        finally:
            os.unlink(tmp.name)
Ejemplo n.º 28
0
def test_filter_time_segment():
    # Case 1
    meta = MetaDataContainer(content).filter_time_segment(
        filename='audio_001.wav',
        start=1.0,
        stop=3.5,
        zero_time=True,
        trim=True,
    )

    nose.tools.eq_(len(meta), 2)
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 0.0)
    nose.tools.eq_(meta[0].offset, 2.5)

    nose.tools.eq_(meta[1].filename, 'audio_001.wav')
    nose.tools.eq_(meta[1].scene_label, 'office')
    nose.tools.eq_(meta[1].event_label, 'mouse clicking')
    nose.tools.eq_(meta[1].onset, 2.0)
    nose.tools.eq_(meta[1].offset, 2.5)

    # Case 2
    meta = MetaDataContainer(content).filter_time_segment(
        filename='audio_001.wav',
        start=1.0,
        stop=3.5,
        zero_time=False,
        trim=True,
    )
    nose.tools.eq_(len(meta), 2)
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.0)
    nose.tools.eq_(meta[0].offset, 3.5)

    nose.tools.eq_(meta[1].filename, 'audio_001.wav')
    nose.tools.eq_(meta[1].scene_label, 'office')
    nose.tools.eq_(meta[1].event_label, 'mouse clicking')
    nose.tools.eq_(meta[1].onset, 3.0)
    nose.tools.eq_(meta[1].offset, 3.5)

    # Case 3
    meta = MetaDataContainer(content).filter_time_segment(
        filename='audio_001.wav',
        start=1.0,
        stop=3.5,
        zero_time=False,
        trim=False,
    )
    nose.tools.eq_(len(meta), 2)
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.0)
    nose.tools.eq_(meta[0].offset, 10.0)

    nose.tools.eq_(meta[1].filename, 'audio_001.wav')
    nose.tools.eq_(meta[1].scene_label, 'office')
    nose.tools.eq_(meta[1].event_label, 'mouse clicking')
    nose.tools.eq_(meta[1].onset, 3.0)
    nose.tools.eq_(meta[1].offset, 5.0)
Ejemplo n.º 29
0
def test_filter():
    # Test filter by file
    meta = MetaDataContainer(content).filter(filename='audio_002.wav')

    nose.tools.eq_(len(meta), 2)
    nose.tools.eq_(meta[0].filename, 'audio_002.wav')
    nose.tools.eq_(meta[0].scene_label, 'meeting')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.0)
    nose.tools.eq_(meta[0].offset, 9.0)

    nose.tools.eq_(meta[1].filename, 'audio_002.wav')
    nose.tools.eq_(meta[1].scene_label, 'meeting')
    nose.tools.eq_(meta[1].event_label, 'printer')
    nose.tools.eq_(meta[1].onset, 5.0)
    nose.tools.eq_(meta[1].offset, 7.0)

    # Test filter by scene_label
    meta = MetaDataContainer(content).filter(scene_label='office')

    nose.tools.eq_(len(meta), 3)
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.0)
    nose.tools.eq_(meta[0].offset, 10.0)

    nose.tools.eq_(meta[1].filename, 'audio_001.wav')
    nose.tools.eq_(meta[1].scene_label, 'office')
    nose.tools.eq_(meta[1].event_label, 'mouse clicking')
    nose.tools.eq_(meta[1].onset, 3.0)
    nose.tools.eq_(meta[1].offset, 5.0)

    meta = MetaDataContainer(content).filter(scene_list=['meeting'])
    nose.tools.eq_(len(meta), 2)

    # Test filter by event_label
    meta = MetaDataContainer(content).filter(event_label='speech')

    nose.tools.eq_(len(meta), 2)
    nose.tools.eq_(meta[0].filename, 'audio_001.wav')
    nose.tools.eq_(meta[0].scene_label, 'office')
    nose.tools.eq_(meta[0].event_label, 'speech')
    nose.tools.eq_(meta[0].onset, 1.0)
    nose.tools.eq_(meta[0].offset, 10.0)

    nose.tools.eq_(meta[1].filename, 'audio_002.wav')
    nose.tools.eq_(meta[1].scene_label, 'meeting')
    nose.tools.eq_(meta[1].event_label, 'speech')
    nose.tools.eq_(meta[1].onset, 1.0)
    nose.tools.eq_(meta[1].offset, 9.0)

    meta = MetaDataContainer(content).filter(event_list=['speech', 'printer'])
    nose.tools.eq_(len(meta), 4)

    # Test filter by tags
    meta = MetaDataContainer(content3).filter(tag='tag1')
    nose.tools.eq_(len(meta), 2)

    meta = MetaDataContainer(content3).filter(tag_list=['tag1', 'tag3'])
    nose.tools.eq_(len(meta), 3)
Ejemplo n.º 30
0
    def prepare(self):
        """Prepare dataset for the usage.

        Returns
        -------
        self

        """
        if not self.meta_container.exists():
            scene_label = 'home'

            evaluation_chunks = ListDictContainer(
                filename=os.path.join(self.local_path, 'chime_home',
                                      'evaluation_chunks_refined.csv')).load(
                                          fields=['id', 'filename', 'set_id'])

            audio_files = {}
            for item in dcase_cross_val_data:
                audio_filename = os.path.join(
                    'chime_home', 'chunks',
                    item['filename'] + self.sample_mode + '.wav')
                annotation_filename = os.path.join('chime_home', 'chunks',
                                                   item['filename'] + '.csv')

                if audio_filename not in audio_files:
                    audio_files[audio_filename] = {
                        'audio': audio_filename,
                        'meta': annotation_filename
                    }

            meta_data = MetaDataContainer()
            for audio_filename, data in iteritems(audio_files):
                current_meta_data = DictContainer(filename=os.path.join(
                    self.local_path, data['meta'])).load()
                tags = []
                for i, tag in enumerate(current_meta_data['majorityvote']):
                    if tag != 'S' and tag != 'U':
                        tags.append(self.tagcode_to_taglabel(tag))

                name = os.path.split(audio_filename)[1]
                segment_name = name[0:name.find('_chunk')]
                chunk_name = name[name.find('_chunk') + 1:].split('.')[0]

                item = MetaDataItem({
                    'filename': audio_filename,
                    'scene_label': scene_label,
                    'tags': ';'.join(tags) + ';',
                    'identifier': segment_name
                })

                self.process_meta_item(item=item, absolute_path=False)

                meta_data.append(item)

            # Save meta
            meta_data.save(filename=self.meta_file)

            # Load meta and cross validation
            self.load()

        all_folds_found = True

        train_filename = self.evaluation_setup_filename(setup_part='train')

        test_filename = self.evaluation_setup_filename(setup_part='test')

        eval_filename = self.evaluation_setup_filename(setup_part='evaluate')

        if not os.path.isfile(train_filename):
            all_folds_found = False

        if not os.path.isfile(test_filename):
            all_folds_found = False

        if not os.path.isfile(eval_filename):
            all_folds_found = False

        if not all_folds_found:
            Path().makedirs(path=self.evaluation_setup_path)

            # Train
            train_filename = self.evaluation_setup_filename(setup_part='train')

            train_meta = MetaDataContainer(filename=train_filename)
            for filename in self.train_files():
                train_meta.append(self.file_meta(filename)[0])

            train_meta.save()

            # Test
            test_filename = self.evaluation_setup_filename(setup_part='test')

            test_meta = MetaDataContainer(filename=test_filename)
            for filename in self.test_files():
                test_meta.append(
                    MetaDataItem(
                        {'filename':
                         self.absolute_to_relative_path(filename)}))

            test_meta.save()

            # Evaluate
            eval_filename = self.evaluation_setup_filename(
                setup_part='evaluate')

            eval_meta = MetaDataContainer(filename=eval_filename)
            for filename in self.test_files():
                eval_meta.append(self.file_meta(filename)[0])

            eval_meta.save()

            # Load meta and cross validation
            self.load()

        return self