Whisper + TTS: распознавание и синтез речи локально
whisperttsaiself-hosting
Голосовые API от OpenAI и Google работают хорошо, но стоят денег и отправляют аудио на чужие серверы. Whisper и Piper TTS решают обе проблемы — всё работает локально.

Whisper: речь → текст
OpenAI Whisper — open-source модель для распознавания речи. Поддерживает 99 языков, включая русский.
Установка
pip install openai-whisper
# Или через faster-whisper (в 4 раза быстрее)
pip install faster-whisper Размеры моделей
| Модель | Параметры | VRAM | Скорость (CPU) | Качество (RU) |
|---|---|---|---|---|
| tiny | 39M | ~1 GB | Быстро | Плохое |
| base | 74M | ~1 GB | Быстро | Среднее |
| small | 244M | ~2 GB | Средне | Хорошее |
| medium | 769M | ~5 GB | Медленно | Очень хорошее |
| large-v3 | 1.5B | ~10 GB | Очень медленно | Отличное |
Для русского языка — минимум small, оптимально medium.
Использование
from faster_whisper import WhisperModel
model = WhisperModel("medium", device="cuda", compute_type="float16")
segments, info = model.transcribe("meeting.mp3", language="ru")
print(f"Язык: {info.language}, вероятность: {info.language_probability:.2f}")
for segment in segments:
print(f"[{segment.start:.1f}s → {segment.end:.1f}s] {segment.text}") Вывод:
Язык: ru, вероятность: 0.98
[0.0s → 3.2s] Давайте обсудим результаты последнего спринта.
[3.2s → 7.8s] Мы закрыли 15 из 18 задач, три перенесли на следующий. REST API с faster-whisper-server
services:
whisper:
image: fedirz/faster-whisper-server:latest
ports:
- "8001:8000"
environment:
- WHISPER__MODEL=medium
- WHISPER__DEVICE=cuda
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu] # OpenAI-совместимый API
curl -X POST http://localhost:8001/v1/audio/transcriptions
-F file=@meeting.mp3
-F model=medium
-F language=ru Piper TTS: текст → речь
Piper — быстрый, локальный синтезатор речи. Поддерживает русский с несколькими голосами.
Установка
pip install piper-tts
# Или через Docker
docker run -p 5000:5000 rhasspy/piper --voice ru_RU-irina-medium Использование
import subprocess
text = "Привет! Это синтезированная речь с помощью Piper TTS."
subprocess.run([
"piper",
"--model", "ru_RU-irina-medium.onnx",
"--output_file", "output.wav"
], input=text.encode()) Или через Python API:
from piper import PiperVoice
voice = PiperVoice.load("ru_RU-irina-medium.onnx")
with open("output.wav", "wb") as f:
voice.synthesize("Добро пожаловать в Terminal Notes!", f) Доступные русские голоса
| Голос | Качество | Скорость | Описание |
|---|---|---|---|
ru_RU-irina-medium | Хорошее | Быстро | Женский, нейтральный |
ru_RU-denis-medium | Хорошее | Быстро | Мужской, нейтральный |
ru_RU-dmitri-medium | Среднее | Быстро | Мужской, ровный |

Собираем голосовой пайплайн
Whisper + LLM + Piper = голосовой ассистент:
from faster_whisper import WhisperModel
from piper import PiperVoice
import ollama
import sounddevice as sd
import numpy as np
whisper = WhisperModel("small", device="cpu")
tts = PiperVoice.load("ru_RU-irina-medium.onnx")
def listen() -> str:
"""Записываем аудио и транскрибируем."""
print("Слушаю...")
audio = sd.rec(int(5 * 16000), samplerate=16000, channels=1)
sd.wait()
# Сохраняем во временный файл
import soundfile as sf
sf.write("/tmp/input.wav", audio, 16000)
segments, _ = whisper.transcribe("/tmp/input.wav", language="ru")
return " ".join(s.text for s in segments)
def think(question: str) -> str:
"""Отвечаем через LLM."""
response = ollama.chat(
model="llama3.1:8b",
messages=[{"role": "user", "content": question}]
)
return response["message"]["content"]
def speak(text: str):
"""Озвучиваем ответ."""
with open("/tmp/output.wav", "wb") as f:
tts.synthesize(text, f)
# Проигрываем
import soundfile as sf
data, sr = sf.read("/tmp/output.wav")
sd.play(data, sr)
sd.wait()
# Цикл
while True:
question = listen()
print(f"Вы: {question}")
answer = think(question)
print(f"AI: {answer}")
speak(answer) Итого
- Whisper — лучшая open-source модель для STT,
mediumоптимален для русского - Piper TTS — быстрый и качественный синтез, работает на CPU
- Вместе — полноценный голосовой ассистент без облаков
- Для продакшена: faster-whisper-server + Piper через Docker