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)
tiny39M~1 GBБыстроПлохое
base74M~1 GBБыстроСреднее
small244M~2 GBСреднеХорошее
medium769M~5 GBМедленноОчень хорошее
large-v31.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

© 2026 Terminal Notes. Built with SvelteKit.