Как стать автором
Обновить

Как создать голосового помощника без облаков: локальная обработка речи на Android и ПК в 2025 году

Уровень сложностиСредний

Большинство голосовых помощников сегодня завязаны на облачные сервисы. Это удобно, но влечёт за собой проблемы: риски утечки данных, задержки при плохом интернете и полную зависимость от сторонних серверов. В некоторых задачах — например, при управлении локальными устройствами — такая архитектура избыточна.

Я покажу, как собрать голосового помощника, который работает полностью локально. Без облаков, без постоянного подключения к сети, с сохранением всех данных на устройстве. Для этого будем использовать проверенные инструменты с открытым исходным кодом — Vosk и Whisper.

 Сравнение характеристик движков Vosk и Whisper для локальной обработки речи.
Сравнение характеристик движков Vosk и Whisper для локальной обработки речи.

Лёгкий движок Vosk хорошо подходит для реального времени. Его модели занимают от 40 до 150 МБ, поддерживают русский язык и работают даже на Raspberry Pi. Но стоит учитывать чувствительность к фоновым шумам. Whisper от OpenAI даёт лучшую точность, особенно на зашумленных записях, но требует больше памяти и процессорного времени. Для мобильных устройств лучше брать tiny-модель.

Кроме этих решений стоит упомянуть Coqui STT — развитие проекта DeepSpeech от Mozilla. Хотя Coqui и поддерживает распознавание речи на локальных устройствах, по качеству и удобству интеграции он уступает Vosk и Whisper. Сам DeepSpeech проект фактически заброшен, и его модели в 2025 году считаются устаревшими.

Минимальная архитектура голосового помощника выглядит просто: микрофон — буферизация — распознавание — интерпретация текста — выполнение команды.

На практике важно контролировать шумы, не держать запись активной без необходимости, правильно работать с Bluetooth-гарнитурами и ограничивать длительность сессий.

Вот минимальный пример на Python с Vosk:

import sounddevice as sd
import vosk
import queue
import json

model = vosk.Model("model")
q = queue.Queue()

def callback(indata, frames, time, status):
    q.put(bytes(indata))

with sd.RawInputStream(samplerate=16000, blocksize=8000, dtype='int16',
                       channels=1, callback=callback):
    rec = vosk.KaldiRecognizer(model, 16000)
    while True:
        data = q.get()
        if rec.AcceptWaveform(data):
            result = json.loads(rec.Result())
            print(result['text'])

На Android подключение Vosk-Android или сборка Whisper через JNI позволяют добиться аналогичного эффекта. Распознавание запускается в отдельном потоке, результат обрабатывается в слушателе.

По производительности:

 Производительность моделей Vosk и Whisper на различных устройствах.
Производительность моделей Vosk и Whisper на различных устройствах.
  • Vosk с малой моделью на Raspberry Pi 4 справляется с распознаванием речи в реальном времени (скорость обработки близка к 1х относительно длины аудио).

  • Whisper tiny на ноутбуке с процессором Intel i5 десятого поколения требует около 1.5 ГБ оперативной памяти и обрабатывает речь примерно в 0.8 раза быстрее реального времени.

  • Whisper base на ноутбуке с процессором i7 двенадцатого поколения показывает скорость около 0.6x и требует порядка 3–4 ГБ оперативной памяти.

Для мобильных устройств рекомендуется использовать только модели класса tiny, иначе время обработки становится заметным на фоне длительности команды.

Локальные голосовые помощники больше не фантастика. При аккуратной настройке можно добиться высокой скорости отклика, надёжности и полного контроля над данными.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.