Source code for audiomate.corpus.base

import abc
import collections

import numpy as np

from audiomate.utils import stats


[docs]class CorpusView(metaclass=abc.ABCMeta): """ This class defines the basic interface of a corpus. It is not meant to be instantiated directly. It only describes the methods for accessing data of the corpus. Notes: All paths to files should be held as absolute paths in memory. """ @property @abc.abstractmethod def name(self): """ Return the name of the dataset (Equals basename of the path, if not None). """ return 'undefined' # # Files # @property @abc.abstractmethod def files(self): """ Return the files in the corpus. Returns: dict: A dictionary containing :py:class:`audiomate.corpus.assets.File` objects with the file-idx as key. """ return {} @property def num_files(self): """ Return number of files. """ return len(self.files) # # Utterances # @property @abc.abstractmethod def utterances(self): """ Return the utterances in the corpus. Returns: dict: A dictionary containing :py:class:`audiomate.corpus.assets.Utterance` objects with the utterance-idx as key. """ return {} @property def num_utterances(self): """ Return number of utterances. """ return len(self.utterances) # # Issuers # @property @abc.abstractmethod def issuers(self): """ Return the issuers in the corpus. Returns: dict: A dictionary containing :py:class:`audiomate.corpus.assets.Issuer` objects with the issuer-idx as key. """ return {} @property def num_issuers(self): """ Return the number of issuers in the corpus. """ return len(self.issuers) # # Feature Container # @property @abc.abstractmethod def feature_containers(self): """ Return the feature-containers in the corpus. Returns: dict: A dictionary containing :py:class:`audiomate.corpus.assets.FeatureContainer` objects with the feature-idx as key. """ return {} @property def num_feature_containers(self): """ Return the number of feature-containers in the corpus. """ return len(self.feature_containers) # # Subviews # @property def subviews(self): """ Return the subviews of the corpus. Returns: dict: A dictionary containing :py:class:`audiomate.corpus.Subview` objects with the subview-idx as key. """ return {} @property def num_subviews(self): """ Return the number of subviews in the corpus. """ return len(self.subviews) # # Labels #
[docs] def all_label_values(self, label_list_ids=None): """ Return a set of all label-values occurring in this corpus. Args: label_list_ids (list): If not None, only labels from label-lists with an id contained in this list are considered. Returns: set: A set of distinct label-values. """ values = set() for utterance in self.utterances.values(): values = values.union(utterance.all_label_values(label_list_ids=label_list_ids)) return values
[docs] def label_count(self, label_list_ids=None): """ Return a dictionary containing the number of times, every label-value in this corpus is occurring. Args: label_list_ids (list): If not None, only labels from label-lists with an id contained in this list are considered. Returns: dict: A dictionary containing the number of occurrences with the label-value as key. """ count = collections.defaultdict(int) for utterance in self.utterances.values(): for label_value, utt_count in utterance.label_count(label_list_ids=label_list_ids).items(): count[label_value] += utt_count return count
[docs] def label_durations(self, label_list_ids=None): """ Return a dictionary containing the total duration, every label-value in this corpus is occurring. Args: label_list_ids (list): If not None, only labels from label-lists with an id contained in this list are considered. Returns: dict: A dictionary containing the total duration with the label-value as key. """ duration = collections.defaultdict(int) for utterance in self.utterances.values(): for label_value, utt_count in utterance.label_total_duration(label_list_ids=label_list_ids).items(): duration[label_value] += utt_count return duration
# # Data # @property def total_duration(self): """ Return the total amount of audio summed over all utterances in the corpus in seconds. """ duration = 0 for utterance in self.utterances.values(): duration += utterance.duration return duration
[docs] def stats(self): """ Return statistics calculated overall samples of all utterances in the corpus. Returns: DataStats: A DataStats object containing statistics overall samples in the corpus. """ per_utt_stats = self.stats_per_utterance() return stats.DataStats.concatenate(per_utt_stats.values())
[docs] def stats_per_utterance(self): """ Return statistics calculated for all samples of each utterance in the corpus. Returns: dict: A dictionary containing a DataStats object for each utt. """ all_stats = {} for utterance in self.utterances.values(): data = utterance.read_samples() all_stats[utterance.idx] = stats.DataStats(float(np.mean(data)), float(np.var(data)), np.min(data), np.max(data), data.size) return all_stats