add methods to load and save preprocessing config

This commit is contained in:
mbsantiago 2024-07-16 01:31:02 +01:00
parent 4973cfcc5f
commit bc821835f1

View File

@ -1,6 +1,7 @@
"""Module containing functions for preprocessing audio clips.""" """Module containing functions for preprocessing audio clips."""
from typing import Optional from typing import Optional, Union
from pathlib import Path
import librosa import librosa
import librosa.core.spectrum import librosa.core.spectrum
@ -60,6 +61,46 @@ class PreprocessingConfig(BaseModel):
spec_time_period: float = SPEC_TIME_PERIOD spec_time_period: float = SPEC_TIME_PERIOD
@classmethod
def from_file(
cls,
path: Union[str, Path],
) -> "PreprocessingConfig":
"""Load configuration from a file.
Parameters
----------
path
Path to the configuration file.
Returns
-------
PreprocessingConfig
The configuration loaded from the file.
Raises
------
FileNotFoundError
If the configuration file does not exist.
pydantic.ValidationError
If the configuration file is invalid.
"""
path = Path(path)
if not path.is_file():
raise FileNotFoundError(f"Config file not found: {path}")
return cls.model_validate_json(path.read_text())
def to_file(self, path: Union[str, Path]) -> None:
"""Save configuration to a file."""
path = Path(path)
if not path.parent.exists():
path.parent.mkdir(parents=True)
path.write_text(self.model_dump_json())
def preprocess_audio_clip( def preprocess_audio_clip(
clip: data.Clip, clip: data.Clip,
@ -105,6 +146,7 @@ def preprocess_audio_clip(
spec, spec,
time=int(np.ceil(duration / config.spec_time_period)), time=int(np.ceil(duration / config.spec_time_period)),
frequency=config.spec_height, frequency=config.spec_height,
dtype=np.float32,
) )