Ejemplo n.º 1
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        if not self.can_parse():
            raise IOError("unable to parse the ComParE 2020 USOMS-e dataset at {}".format(self._basedir))

        meta_list = []

        metadata = self._metadata()

        for file in sorted(self._audio_dir.glob("*.*")):
			#use the following line in order to attach the categorical arousal labels
			#label_nominal = metadata.loc[metadata["filename_audio"] == file.name]["A_cat"]

			#use the following line in order to attach the categorical valence labels
			label_nominal = metadata.loc[metadata["filename_audio"] == file.name]["V_cat"]

            # test labels are '?'
            if all(l != '?' for l in label_nominal):
                label_nominal = label_nominal.iloc[0]
            else:
                label_nominal = None

            instance_metadata = _InstanceMetadata(
                path=file,
                filename=file.name,
                label_nominal=label_nominal,
                label_numeric=None,  # inferred from label map
                cv_folds=[],
                partition=Partition.TRAIN if file.name.startswith("train") else Partition.DEVEL if file.name.startswith(
                    "devel") else Partition.TEST
            )

            self.log.debug("parsed instance %s: label = %s", file.name, label_nominal)
            meta_list.append(instance_metadata)
    def parse(self) -> Sequence[_InstanceMetadata]:
        if not self.can_parse():
            raise IOError(
                "unable to parse the ComParE 2020 Mask dataset at {}".format(
                    self._basedir))

        meta_list = []

        metadata = self._metadata()

        for file in sorted(self._audio_dir.glob("*.wav")):
            label_nominal = metadata.loc[metadata["file_name"] ==
                                         file.name]["label"]

            # test labels are '?'
            if all(l != '?' for l in label_nominal):
                label_nominal = label_nominal.iloc[0]
            else:
                label_nominal = None

            instance_metadata = _InstanceMetadata(
                path=file,
                filename=file.name,
                label_nominal=str(label_nominal),
                label_numeric=None,  # inferred from label map
                cv_folds=[],
                partition=Partition.TRAIN
                if file.name.startswith("train") else Partition.DEVEL
                if file.name.startswith("devel") else Partition.TEST)

            self.log.debug("parsed instance %s: label = %s", file.name,
                           label_nominal)
            meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 3
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        if not self.can_parse():
            raise IOError("unable to parse dataset at {}".format(self._basedir))

        meta_list = []

        metadata = self._metadata()
        inverse_label_map = dict(map(reversed, self.label_map.items()))

        for file in sorted(self._audio_dir.glob("*.*")):
            label_numeric = float(metadata.loc[metadata["file_name"] == file.name]["label"])

            # test labels are missing and parsed as NaN
            if not math.isnan(label_numeric):
                label_numeric = int(label_numeric)
            else:
                label_numeric = None

            instance_metadata = _InstanceMetadata(
                path=file,
                filename=file.name,
                label_nominal=None if label_numeric is None else inverse_label_map[label_numeric],
                label_numeric=None,  # inferred from label map
                cv_folds=[],
                partition=Partition.TRAIN if file.name.startswith("train") else Partition.TEST
            )

            self.log.debug("parsed instance %s: label = %s", file.name, label_numeric)
            meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 4
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        """
        Parses the instances contained in this data set.
        
        Returns
        -------
        list of _InstanceMetadata
            A list of _InstanceMetadata containing one entry for each parsed audio file
        """
        meta_list = []

        for file in self._basedir.rglob("*.wav"):  # type: Path
            filename = str(file.relative_to(self._basedir))

            instance_metadata = _InstanceMetadata(path=file,
                                                  filename=filename,
                                                  label_nominal=None,
                                                  label_numeric=None,
                                                  cv_folds=[],
                                                  partition=None)

            self.log.debug("parsed instance %s", filename)
            meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 5
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        """
        Parses the instances contained in this data set.

        For each instance, metadata is computed and stored in an _InstanceMetadata object. Instances are parsed in the
        order in which they appear in the meta.txt file.

        Returns
        -------
        list of _InstanceMetadata
            A list of _InstanceMetadata containing one entry for each parsed audio file
        
        Raises
        ------
        IOError
            If the data set cannot be parsed
        """
        if not self.can_parse():
            raise IOError("unable to parse DCASE dataset at {}".format(
                self._basedir))

        metadata = self._metadata()
        cv_setup = self._cv_setup()

        meta_list = []

        for index, row in metadata.iterrows():
            filename = row[0]
            label_nominal = row[1]

            if label_nominal not in _DCASE_LABEL_MAP:
                raise IOError(
                    "invalid label for DCASE data: {}".format(label_nominal))

            cv_folds = []

            for fold_metadata in cv_setup:
                cv_folds.append(Split.TRAIN if filename in
                                fold_metadata.iloc[:,
                                                   0].values else Split.VALID)

            instance_metadata = _InstanceMetadata(
                path=self._basedir / filename,
                filename=str(Path(filename).name),
                label_nominal=label_nominal,
                label_numeric=None,
                cv_folds=cv_folds,
                partition=None)

            self.log.debug("parsed instance %s: label = %s", filename,
                           label_nominal)
            meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 6
0
 def parse(self) -> Sequence[_InstanceMetadata]:
     meta_list = []
     for file in _get_audio_paths(self._filelist):
         instance_metadata = _InstanceMetadata(path=file,
                                               filename=file.stem,
                                               label_nominal=None,
                                               label_numeric=None,
                                               cv_folds=[],
                                               partition=None)
         meta_list.append(instance_metadata)
     return meta_list
Ejemplo n.º 7
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        """
        Parses the instances contained in this data set.
        
        For each instance, metadata is computed and stored in an _InstanceMetadata object. Instances are parsed in order
        of train partition, development partition, test partition, and in alphabetical order by nominal label and 
        filename within partitions.
        
        Returns
        -------
        list of _InstanceMetadata
            A list of _InstanceMetadata containing one entry for each parsed audio file
        
        Raises
        ------
        IOError
            If the data set cannot be parsed
        """
        if not self.can_parse():
            raise IOError("unable to parse dataset at {}".format(
                self._basedir))

        meta_list = []

        existing_dirs = [(partition, partition_dir)
                         for (partition,
                              partition_dir) in list(self._dirs.items())
                         if partition_dir.exists()]

        for partition, partition_dir in sorted(existing_dirs,
                                               key=lambda x: x[1]):
            for class_dir in sorted(partition_dir.glob("*")):
                for file in sorted(class_dir.glob("*.*")):
                    filename = "{}/{}/{}".format(partition_dir.name,
                                                 class_dir.name, file.name)

                    instance_metadata = _InstanceMetadata(
                        path=file,
                        filename=filename,
                        label_nominal=class_dir.name,
                        label_numeric=None,
                        cv_folds=[],
                        partition=partition)

                    self.log.debug("parsed instance %s: label = %s", filename,
                                   class_dir.name)
                    meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 8
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        """
        Parses the instances contained in this data set.
        
        For each instance, metadata is computed and stored in an _InstanceMetadata object. Instances are parsed in order
        of increasing fold number, and in alphabetical order by nominal label and filename within folds.
        
        Returns
        -------
        list of _InstanceMetadata
            A list of _InstanceMetadata containing one entry for each parsed audio file
        
        Raises
        ------
        IOError
            If the data set cannot be parsed
        """
        if not self.can_parse():
            raise IOError("unable to parse dataset at {}".format(
                self._basedir))

        meta_list = []

        for fold in range(self.num_folds):
            fold_dir = self._basedir / ("fold_%d" % (fold + 1))

            cv_folds = [Split.TRAIN] * self.num_folds
            cv_folds[fold] = Split.VALID

            for class_dir in sorted(fold_dir.glob("*")):
                for file in sorted(class_dir.glob("*.*")):
                    filename = "{}/{}/{}".format(fold_dir.name, class_dir.name,
                                                 file.name)

                    instance_metadata = _InstanceMetadata(
                        path=file,
                        filename=filename,
                        label_nominal=class_dir.name,
                        label_numeric=None,
                        cv_folds=cv_folds,
                        partition=None)

                    self.log.debug("parsed instance %s: label = %s", filename,
                                   class_dir.name)
                    meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 9
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        """
        Parses the instances contained in this data set.

        For each instance, metadata is computed and stored in an _InstanceMetadata object. Instances are parsed in the
        order of the class directories, and in alphabetical order within class directories.

        Returns
        -------
        list of _InstanceMetadata
            A list of _InstanceMetadata containing one entry for each parsed audio file
        
        Raises
        ------
        IOError
            If the data set cannot be parsed
        """
        if not self.can_parse():
            raise IOError("unable to parse ESC dataset at {}".format(
                self._basedir))

        meta_list = []

        for class_dir in self._class_dirs:
            label_nominal = class_dir.name[6:]

            for ogg_file in class_dir.glob("*.ogg"):
                cv_folds = [Split.TRAIN] * self.num_folds
                index = int(ogg_file.name[-5]) - 1

                if index >= self.num_folds:
                    continue

                cv_folds[index] = Split.VALID

                instance_metadata = _InstanceMetadata(
                    path=ogg_file,
                    filename=str(ogg_file.name),
                    label_nominal=label_nominal,
                    label_numeric=None,
                    cv_folds=cv_folds,
                    partition=None)

                meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 10
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        """
        Parses the instances contained in this data set.

        For each instance, metadata is computed and stored in an _InstanceMetadata object. Instances are parsed in the
        order in which they appear in the metadata/UrbanSound8K.csv file.

        Returns
        -------
        list of _InstanceMetadata
            A list of _InstanceMetadata containing one entry for each parsed audio file
        
        Raises
        ------
        IOError
            If the data set cannot be parsed
        """
        if not self.can_parse():
            raise IOError("Unable to parse UrbanSound8K data set at {}".format(
                self._basedir))

        meta_list = []

        for _, row in self._metadata().iterrows():
            filename = row.loc[_ColumnNames.FILENAME]
            path = self._basedir / "audio" / (
                "fold%d" % row.loc[_ColumnNames.CV_FOLD]) / filename

            cv_folds = [Split.TRAIN] * 10
            cv_folds[row.loc[_ColumnNames.CV_FOLD] - 1] = Split.VALID

            label_nominal = row.loc[_ColumnNames.LABEL_NOMINAL]

            instance_metadata = _InstanceMetadata(path=path,
                                                  filename=filename,
                                                  label_nominal=label_nominal,
                                                  label_numeric=None,
                                                  cv_folds=cv_folds,
                                                  partition=None)

            self.log.debug("parsed instance %s: label = %s", filename,
                           label_nominal)
            meta_list.append(instance_metadata)

        return meta_list
Ejemplo n.º 11
0
    def parse(self) -> Sequence[_InstanceMetadata]:
        """
        Parses the instances contained in this data set.

        For each instance, metadata is computed and stored in an _InstanceMetadata object. Instances are parsed in the
        order of the class directories, and in alphabetical order within class directories.

        Returns
        -------
        list of _InstanceMetadata
            A list of _InstanceMetadata containing one entry for each parsed audio file

        Raises
        ------
        IOError
            If the data set cannot be parsed
        """
        if not self.can_parse():
            raise IOError("unable to parse Koe dataset at {}".format(self._basedir))

        meta_list = []

        for sid, filename, label, label_enum, fold in self._data:
            filepath = Path(os.path.join(self._basedir, filename))
            cv_folds = [Split.TRAIN] * self._numfolds
            cv_folds[fold] = Split.VALID

            instance_metadata = _InstanceMetadata(path=filepath,
                                                  filename=str(filename),
                                                  label_nominal=label,
                                                  label_numeric=label_enum,
                                                  cv_folds=cv_folds,
                                                  partition=None)
            meta_list.append(instance_metadata)

        return meta_list