39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""STT-модуль: речь → текст.
|
|
|
|
Использование из других модулей:
|
|
|
|
from modules.stt import get_provider
|
|
|
|
stt = get_provider("faster-whisper", model_size="small")
|
|
result = stt.transcribe("phrase.wav")
|
|
print(result.text)
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from .base import SAMPLE_RATE, AudioInput, SttProvider, TranscriptResult
|
|
from .provider_faster_whisper import FasterWhisperProvider
|
|
|
|
__all__ = [
|
|
"SAMPLE_RATE",
|
|
"AudioInput",
|
|
"SttProvider",
|
|
"TranscriptResult",
|
|
"FasterWhisperProvider",
|
|
"get_provider",
|
|
]
|
|
|
|
_PROVIDERS = {
|
|
FasterWhisperProvider.name: FasterWhisperProvider,
|
|
# "vosk" добавим, если faster-whisper окажется тяжёлым для ПК отца (замер в Модуле 1)
|
|
}
|
|
|
|
|
|
def get_provider(name: str, **kwargs) -> SttProvider:
|
|
"""Фабрика провайдеров по имени (выбор из конфига)."""
|
|
try:
|
|
provider_cls = _PROVIDERS[name]
|
|
except KeyError:
|
|
raise ValueError(
|
|
f"Неизвестный STT-провайдер: {name!r}. Доступны: {sorted(_PROVIDERS)}"
|
|
) from None
|
|
return provider_cls(**kwargs) |