Тишина, Wi-Fi пропал, а ваш Alexa умер. Пора собирать свою колонку
Каждый раз, когда вы просите у Google погоду, кусочек вашей приватности уплывает в дата-центр. Каждая команда для Алисы - это пинг в чужое облако. Задержки, подписки, внезапные отключения сервисов. Это бесит? Меня - да.
Решение лежит не в магазине, а на вашем столе. Raspberry Pi 5, пара локальных нейросетей и немного питоновской магии превращаются в устройство, которое работает когда угодно и никому ничего не передает. Никаких API-ключей, никаких лимитов на запросы, никакого шпионажа.
Да, это сложнее, чем купить готовую колонку. Да, первый запуск займет полдня. Но после настройки вы получите устройство, которое слушает только вас и отвечает даже когда интернет отрубили.
1 Что купить, а что лучше выбросить сразу
Начнем с железа. Базовый набор на 2026 год выглядит так:
- Raspberry Pi 5 с 8GB RAM - меньше не берите. 4GB хватит только на слезы и swapping. Модель Pi 5B - оптимальна. (Купить можно по партнерской ссылке).
- Качественный USB-микрофон - не тот, что за 300 рублей из Китая. Любой фоновый шум убьет точность распознавания. Ищите что-то с шумоподавлением. (Вариант - эта модель).
- Активные колонки или усилитель + пассивные - Pi не потянет наушниковый выход.
- Блок питания на 5V/5A - стандартный на 3А не справится под нагрузкой.
- Карта microSD на 64GB класса A2 - скорость записи критична. Или лучше SSD через USB.
2 Подготовка Pi: от прошивки до первого писка
Ставим Raspberry Pi OS (64-bit, не Lite). Последняя версия на март 2026 - "Bookworm". После установки - сразу апдейт:
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv git build-essential portaudio19-dev libopenblas-dev
Теперь настроим аудио. Самая частая ошибка - неправильный выбор устройства ввода/вывода.
# Смотрим доступные аудиоустройства
arecord -l
aplay -l
# Создаем конфиг для ALSA
sudo nano /etc/asound.conf
В файл добавляем (замените card numbers на свои):
pcm.!default {
type asym
playback.pcm "hw:1,0" # ваша колонка
capture.pcm "hw:2,0" # ваш микрофон
}
Если после перезагрузки звук не работает, проверьте вывод команд arecord -L и aplay -L. Чаще всего проблема в том, что система "видит" HDMI-аудио как устройство по умолчанию. Придется повозиться.
3 Ollama: мозги колонки, которые работают без интернета
Ollama на март 2026 - версия 0.5.x с поддержкой новых моделей. Устанавливаем:
curl -fsSL https://ollama.ai/install.sh | sh
ollama serve &
Какую модель качать? Gemma3-4B (релиз 2025 года) или Moondream2 (специально для edge-устройств). Qwen2.5-3B тоже отлично работает. Забудьте про Llama 3.1 - она слишком тяжелая.
# Качаем оптимальную модель для Pi 5
ollama pull moondream:1.8b-v2-fp16
# Проверяем
ollama run moondream:1.8b-v2-fp16 "Привет!"
Ответ должен прийти за 3-5 секунд. Если дольше 10 - что-то не так. В моей статье Запуск LLM на Raspberry Pi есть детали по оптимизации.
4 Whisper: заставляем колонку понимать русскую речь
OpenAI Whisper - эталон. Но нам нужна C++ реализация, иначе Pi не потянет. Берем whisper.cpp:
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
make -j4
# Качаем маленькую, но эффективную модель для русского
./models/download-ggml-model.sh ggml-small.bin
Теперь тест. Запишите голосовой файл test.wav и проверьте:
./main -f ./samples/test.wav -l ru -m ./models/ggml-small.bin -otxt
Если распознало хоть что-то - отлично. Для реального использования нужен скрипт на Python, который слушает микрофон и запускает whisper.cpp при обнаружении речи. Используйте pyaudio и пороговое значение энергии сигнала.
Если нужна сверхнизкая задержка, посмотрите Voxtral-Mini 4B Realtime. Но для колонки обычный Whisper хватает.
5 Silero TTS: говорим без акцента и облаков
Силеро - единственная нормальная TTS для русского, которая работает локально. На 2026 год актуальна версия v4 с улучшенной интонацией.
python3 -m venv tts_venv
source tts_venv/bin/activate
pip install silero torch torchaudio --index-url https://download.pytorch.org/whl/cpu
Тестовый скрипт:
import torch
import sounddevice as sd
device = torch.device('cpu')
torch.set_num_threads(4)
model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
model='silero_tts',
language='ru',
speaker='v4_ru')
model.to(device)
audio = model.apply_tts(text="Привет, я ваша локальная колонка!",
speaker='random',
sample_rate=48000,
put_accent=True,
put_yo=True)
sd.play(audio.numpy(), 48000)
sd.wait()
Голос будет механическим, но понятным. Лучше, чем у облачных сервисов 5-летней давности.
6 Скрипт-оркестратор: связываем всё в один пайплайн
Теперь самое интересное - написать мозг, который координирует работу компонентов. Основная логика:
- Постоянно слушать микрофон, детектировать голос (VAD).
- Когда речь обнаружена, записать аудио в буфер.
- Отправить аудио в Whisper для транскрипции.
- Текст передать в Ollama.
- Ответ от Ollama отдать в Silero.
- Воспроизвести результат через колонки.
Код-заготовка (упрощенная):
import subprocess
import json
import sounddevice as sd
import numpy as np
from scipy.io.wavfile import write
import torch
# 1. Запись с микрофона
def record_audio(duration=5, fs=16000):
recording = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='float32')
sd.wait()
return recording, fs
# 2. Транскрибация через whisper.cpp
def transcribe(audio_path):
cmd = f"./whisper.cpp/main -f {audio_path} -l ru -m ./whisper.cpp/models/ggml-small.bin -oj"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
data = json.loads(result.stdout)
return data['transcription']
# 3. Запрос к Ollama
def ask_llm(prompt):
cmd = f"ollama run moondream:1.8b-v2-fp16 '{prompt}'"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
return result.stdout.strip()
# 4. Синтез речи
def synthesize(text):
# ... код Silero TTS ...
return audio_array
# Главный цикл
while True:
print("Слушаю...")
audio, fs = record_audio()
write("temp.wav", fs, audio)
text = transcribe("temp.wav")
print(f"Вы сказали: {text}")
if text.strip():
response = ask_llm(text)
print(f"Ответ: {response}")
speech = synthesize(response)
sd.play(speech, 48000)
sd.wait()
Это сырая основа. В реальности нужно добавить VAD (например, webrtcvad), обработку фонового шума, кэширование частых запросов.
7 Интеграция с Home Assistant: колонка как центр умного дома
Самое мощное преимущество локальной колонки - прямая интеграция с домашней автоматизацией. Не через облако, а по локальной сети.
Устанавливаем MQTT-брокер (Mosquitto) на Pi или на отдельный сервер. Наш скрипт-оркестратор публикует распознанные команды в топик, например, home/assistant/command. Home Assistant подписан на этот топик и выполняет действия.
Пример: вы говорите "Включи свет на кухне". Скрипт распознает, передает в Ollama, который преобразует в структурированную команду JSON: {"device": "light", "room": "kitchen", "action": "turn_on"}. Эта команда публикуется в MQTT, а Home Assistant ее обрабатывает.
Никаких навыков, никаких облачных платформ. Все работает даже если провайдер лег.
8 То, что сломается первым: типичные ошибки и как их чинить
| Проблема | Причина | Решение |
|---|---|---|
| Whisper не распознает речь | Фоноговор, неправильная частота дискретизации | Добавить шумоподавление (noise suppression), конвертировать аудио в 16kHz |
| Ollama отвечает 30+ секунд | Слишком тяжелая модель, нехватка RAM | Перейти на Moondream или Qwen2.5-1.5B, настроить zram |
| Звук с микрофона тихий | Низкий уровень усиления ALSA | amixer set 'Capture' 100%, проверить настройки alsamixer |
| Карта microSD умерла через месяц | Постоянная запись логов и временных файлов | Перенести /tmp и /var/log на RAM-disk, использовать SSD |
Самое важное - мониторить температуру. Под полной нагрузкой Pi 5 греется до 80°C. Без активного охлаждения процессор начнет троттлить, и Whisper будет работать в 10 раз медленнее.
# Установите вентилятор и мониторьте температуру
vcgencmd measure_temp
# Если выше 70°C - срочно ставите радиатор или кулер
И что в итоге?
У вас получилась коробка, которая:
- Работает без интернета. Вообще.
- Никуда не отправляет ваши голосовые запросы.
- Управляет умным домом через локальную сеть.
- Отвечает на русском с задержкой 2-4 секунды (да, быстрее, чем Alexa в 2020 году).
- Стоит в 3-4 раза дешевле готовых аналогов (если не считать времени, которое вы потратили).
Это не идеальная замена Google Home. Распознавание иногда ошибается, голос роботизированный, а на сложные вопросы система отвечает ерундой. Но она ваша. Вы контролируете каждый байт. Вы можете заменить любую часть стека. Whisper надоел? Поставьте Qwen3-ASR. Ollama кажется медленной? Перейдите на ChatLLM.cpp.
Следующий шаг - добавить локальную мультимодальность. Поставить Moondream (она уже в Ollama) и подключить камеру. Теперь можете спрашивать "что лежит на столе?" и получать ответ от нейросети, которая видит мир через объектив. Но это уже другая история.