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' }, ])
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)
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)
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)
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)
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)
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', }])
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')
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])
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)
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])
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()
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)
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]])
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
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 ))
def test_max_event_offset(): nose.tools.eq_(MetaDataContainer(content).max_offset, 10)
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')
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')
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')
def test_event_label_count(): nose.tools.eq_(MetaDataContainer(content).event_label_count, 3)
def test_scene_label_count(): nose.tools.eq_(MetaDataContainer(content).scene_label_count, 2)
def test_event_count(): nose.tools.eq_(MetaDataContainer(content).event_count, len(content))
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)
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)
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)
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