Spaces:
Running
Running
| """Configuration, phrase banks and default catalogs for the dataset creator.""" | |
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from typing import List | |
| # --------------------------------------------------------------------------- # | |
| # Default phrase banks (target phrase: "Hey Android") | |
| # --------------------------------------------------------------------------- # | |
| DEFAULT_WAKE_PHRASES: List[str] = [ | |
| "Hey Android", | |
| "Hey, Android", | |
| "Hello Android", | |
| "Okay Android", | |
| "OK Android", | |
| "Android", | |
| ] | |
| DEFAULT_UNKNOWN_PHRASES: List[str] = [ | |
| "Hey Andrew", | |
| "Hey Adrian", | |
| "Hey Andrea", | |
| "Hello phone", | |
| "Open settings", | |
| "Start recording", | |
| "Stop recording", | |
| "Good morning", | |
| "Where is my phone", | |
| "Androids are useful", | |
| "This is a test", | |
| "Turn on the light", | |
| "Turn off the light", | |
| "Increase volume", | |
| "Decrease volume", | |
| "Play music", | |
| "Pause music", | |
| ] | |
| # The three primary keyword-spotting classes. | |
| WAKE_LABEL = "hey_android" | |
| UNKNOWN_LABEL = "unknown" | |
| NOISE_LABEL = "background_noise" | |
| NOISE_TYPES: List[str] = ["white", "pink", "brown", "hum", "fan", "cafe", "street"] | |
| # --------------------------------------------------------------------------- # | |
| # Piper voice catalog (free, downloaded from rhasspy/piper-voices on the Hub) | |
| # --------------------------------------------------------------------------- # | |
| class PiperVoice: | |
| """A downloadable Piper voice model on the Hugging Face Hub.""" | |
| voice_id: str | |
| repo_path: str # path inside rhasspy/piper-voices (without extension) | |
| locale: str | |
| description: str | |
| PIPER_VOICES: List[PiperVoice] = [ | |
| PiperVoice( | |
| "en_US-lessac-medium", | |
| "en/en_US/lessac/medium/en_US-lessac-medium", | |
| "en-US", | |
| "English US", | |
| ), | |
| PiperVoice( | |
| "en_GB-alba-medium", | |
| "en/en_GB/alba/medium/en_GB-alba-medium", | |
| "en-GB", | |
| "English GB", | |
| ), | |
| PiperVoice( | |
| "en_GB-northern_english_male-medium", | |
| "en/en_GB/northern_english_male/medium/en_GB-northern_english_male-medium", | |
| "en-GB", | |
| "English GB Northern male", | |
| ), | |
| PiperVoice( | |
| "nl_NL-mls-medium", | |
| "nl/nl_NL/mls/medium/nl_NL-mls-medium", | |
| "nl-NL", | |
| "Dutch NL", | |
| ), | |
| PiperVoice( | |
| "de_DE-thorsten-medium", | |
| "de/de_DE/thorsten/medium/de_DE-thorsten-medium", | |
| "de-DE", | |
| "German", | |
| ), | |
| PiperVoice( | |
| "fr_FR-siwis-medium", | |
| "fr/fr_FR/siwis/medium/fr_FR-siwis-medium", | |
| "fr-FR", | |
| "French", | |
| ), | |
| PiperVoice( | |
| "es_ES-sharvard-medium", | |
| "es/es_ES/sharvard/medium/es_ES-sharvard-medium", | |
| "es-ES", | |
| "Spanish", | |
| ), | |
| ] | |
| # --------------------------------------------------------------------------- # | |
| # Dataset generation config | |
| # --------------------------------------------------------------------------- # | |
| class DatasetConfig: | |
| """All knobs controlling a single dataset build.""" | |
| # Output | |
| out_dir: str = "output" | |
| dataset_name: str = "hey_android" | |
| # Audio | |
| sample_rate_hz: int = 16000 | |
| duration_seconds: float = 2.0 | |
| # Classes / phrases | |
| wake_label: str = WAKE_LABEL | |
| unknown_label: str = UNKNOWN_LABEL | |
| noise_label: str = NOISE_LABEL | |
| wake_phrases: List[str] = field(default_factory=lambda: list(DEFAULT_WAKE_PHRASES)) | |
| unknown_phrases: List[str] = field(default_factory=lambda: list(DEFAULT_UNKNOWN_PHRASES)) | |
| # Size controls | |
| base_repeats_per_phrase_per_voice: int = 1 | |
| augmentations_per_speech_clip: int = 8 | |
| background_noise_samples: int = 200 | |
| max_piper_voices: int = 7 | |
| max_gcp_voices_per_locale: int = 3 | |
| # GCP voice selection | |
| gcp_language_prefixes: List[str] = field( | |
| default_factory=lambda: ["en", "nl", "de", "fr", "es"] | |
| ) | |
| # Split | |
| test_ratio: float = 0.2 | |
| # Reproducibility | |
| seed: int = 1337 | |
| def target_samples(self) -> int: | |
| return int(self.sample_rate_hz * self.duration_seconds) | |