Как сделать свой сервис распознавания голоса вместо PLAUD и закрытых ИИ-диктофонов

от автора

Картинка для привлечения внимания. Генерация ChatGPT

Картинка для привлечения внимания. Генерация ChatGPT

Звук сегодня является важным интерфейсом. Работа с чат-ботом своей «ИИшечки» упрощается в разы. Кроме того, помимо вайб-кодинга — есть еще и обычная жизнь — с совещаниями, лекциями, собраниями, которых столько, что не успеваешь фиксировать все, о чем было обсуждение. С этими мыслями, а также увидев потрясающий по своей внешней эстетике приборчик — был заказан ИИ-диктофон PLAUD. Но. Ограничения для России такие, что заплатить за сервис (ок 20 тыс. руб.) — не получилось. Но, уже появилось желание и даже потребность в удобном цифровом распознавании. Конечно, были установлены все простые приложения на телефон, а также распознавание в Telegram, но все это было не то. Сформилировал требования, которые у меня есть:

  1. Уметь работать с длинными аудиофайлами — до нескольких часов

  2. Поддерживать русский язык на приемлемом уровне.

  3. Не зависеть от зарубежной оплаты и подписок.

  4. Иметь обычные файлы на выходе: Markdown, папки, Obsidian.

Сначала я хотел решить задачу готовым устройством.

1. Купить другой ИИ-диктофон

Стал смотреть аналоги на маркетплейсах. Сейчас таких устройств уже много: отдельные диктофоны с ИИ, мини-рекордеры, гаджеты с приложениями, устройства в разных форм-факторах.

По ценам встречаются разные уровни:

Тип устройства

Ориентир по цене

Что смущает

Простые ИИ-диктофоны

6–8 тыс. руб.

закрытое приложение, непонятное качество распознавания

Более продвинутые модели

12–15 тыс. руб.

всё равно закрытая экосистема

PLAUD и близкие устройства

около 20 тыс. руб. и выше

подписка, облако, ограничения по оплате

Но по мере погружения в этот мир стало понятно, что дело даже не в стоимости гаджета, а в логике организации работы: устройство + приложение + облачный сервис. Что именно происходит с аудио, какие модели используются, можно ли забрать данные в удобном формате, можно ли заменить модель распознавания — обычно неизвестно или невозможно.

Для бытовых заметок это может быть нормально. Для лекций, рабочих встреч и длинных записей мне хотелось больше контроля.

2. Решение сделать свой сервис на VDS

У меня уже был небольшой VDS. Поэтому я решил проверить, можно ли собрать собственный конвейер:

телефон → аудиофайл → VDS → распознавание → Markdown → постобработка → Obsidian

Железо сервера не специализированное: 12 CPU, без GPU. Большие модели на таком сервере либо не запускаются, либо работают слишком медленно для регулярного использования.

Важным также представлялся вопрос качества русского языка. Мне нужно было не просто получить любой транскрипт, а получить качественный текст, который потом можно читать и использовать.

Аппаратная часть

Вместо отдельного диктофона я купил компактный микрофон-петлички с подключением к телефону через USB Type-C. Цена — примерно 1500 рублей.

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

Для моих задач это оказалось практичнее, чем отдельный ИИ-диктофон. Одно из важных решений была установка, что само устройство записи не обязано быть «умным». Умной должна быть обработка. И, конечно, ориентир на open sources. Никаких закрытых и платных систем.

Выбор модели распознавания

Дальше началась основная техническая часть: выбрать STT-модель, которая нормально работает на русском и не убивает мой VDS.

Wisper — Популярная экосистема, хорошее качество русского языка, можно запускать локально, но на CPU длинные записи обрабатываются настолько медленно, что каждая втора сессия падала.

Vosk — это очень легкая open-source-библиотека для распознавания мультиязычной речи, которая работает полностью офлайн. Скорость высочайшая! Для английского — лучше и не придумать, но качество русского языка не просто проигрывает, а, на мой личный взгляд, не выдерживает критики. Короткие рубленные предложения, потеря контекста, маленький словарный запас.

GigaSTT — из всех найденных моделей, неожиданно, GigaSTT показала очень хорошую скорость при приемлемом качестве распознавании! Файл в 15 минут распознается (на моем оборудовании) те же 15 минут.

Но оказалось, что аппетит приходит во время еды. GigaSTT — это транскрибатор. Он решает первый слой задачи — превращает аудио в текст. Но хотелось и короткого конспекта, и как то мочь настраивать логику распознавания, раз уж замахнулся на собственную систему.

Поэтому поверх распознавания я сделал ещё несколько слоёв, которые позволяю запускать и переработку текстов, и синхронизировать работу с файлами, удобным для меня образом. Cursor мне в помощь и поехали.

Общий воркфлоу ИИ-распознавателя. Сгенерировано DeepSeek

Общий воркфлоу ИИ-распознавателя. Сгенерировано DeepSeek

Что глобально хотелось достичь?

  1. Умение работать с существующими файлами, а не только записанными с помощью системы

  2. Работа с файлами любого объема

  3. Формат Markdown и возможность не просто увдиеть файлы в папке, а иметь интерфейс для быстрой их оценки

  4. Работа на том оборудовании, которое мне доступно

  5. Простота — без сложной многодневной разработки и настроек.

    Сейчас система состоит из четырёх слоёв.

1. Распознавание речи2. Постобработка текста3. Управление моделями и скиллами4. Файловый обмен и Markdown-база

Слой 1. Распознавание речи

На вход подаётся аудиофайл. Это может быть новая запись с телефона или уже существующий файл. Вход — это «положить в папку файл». У меня их много, и поэтому решение было именно такое, без организации сложной загрузки.

Как организовано распознавание речи. Сгенерировано DeepSeek

Как организовано распознавание речи. Сгенерировано DeepSeek

Слой 2. Постобработка

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

Поэтому после распознавания запускается второй слой с постобработкой.

Как организована постобработка. Сгенерировано DeepSeek

Как организована постобработка. Сгенерировано DeepSeek

Решение простое — добавлять к существующей расшифровке — еще два файла. С коротким резюме (abstract) и файл со структурированными блоками (executive)

Пример создания нескольких файлов (интерфейс Obsidian). Сгенерировано DeepSeek

Пример создания нескольких файлов (интерфейс Obsidian). Сгенерировано DeepSeek

После нескольких проб добавил несколько проходов через LLM-рецензента (локальная Ollama, qwen 2.5). Скрипт берёт распознанный Markdown, отправляет его в модель, получает результат, затем прогоняет его через проверку качества и при необходимости переписывает.

Это не идеальная редактура, но результат уже полезнее сырого транскрипта.

Слой 3. Модели и скиллы

На моём сервере нельзя гонять тяжёлые модели. Поэтому сделал возможность выбирать модель и режим обработки, поскольку разные задачи требуют разных профилей. И скиллы, конечно.

Принцип "переключения". Сгенерировано DeepSeek

Принцип «переключения». Сгенерировано DeepSeek

Команды можно добавлять прямо в текст записи. После распознавания система видит эти маркеры и выбирает нужный режим постобработки. Это требует определенной концентрации перед записью — надо про это явно сказать, но, думаю, что лично для меня — это посильная задача.

Слой 4. Файлы, синхронизация и Obsidian

Я не хотел делать отдельное большое приложение. Мне нужен был понятный интерфейс, который уже есть в моём рабочем процессе. Мне привычно и удобно работать с Markdown. Ну и конечно, Obsidian. Организовал обмен файлами между устройствами с помощью Syncthing

Принцип работы с Obsidian. Генерация DeepSeek

Принцип работы с Obsidian. Генерация DeepSeek

Файлы синхронизируются между:

  • телефоном;

  • сервером;

  • настольным компьютером;

  • Obsidian.

    Применяемые системы

    Система

    Где используется

    Роль

    Источник

    Fossify Voice Recorder

    Android

    Запись WAV/MP3/M4A в локальную папку

    GitHub

    Syncthing

    Android, сервер, Windows/ПК

    Двусторонняя и односторонняя синхронизация папок

    GitHub

    Syncthing-Fork

    Android

    Android-обёртка Syncthing с фоновым режимом

    GitHub

    GigaSTT

    Сервер, Docker

    Локальное русское STT через REST API

    GitHub

    Docker

    Сервер

    Изоляция GigaSTT, локальный порт 127.0.0.1:9876

    GitHub

    FFmpeg

    Сервер

    Нарезка и нормализация длинных аудиофайлов

    GitHub

    jq

    Сервер

    Разбор JSON-ответов GigaSTT

    GitHub

    incron

    Сервер

    Автозапуск обработки при появлении Markdown-файла

    GitHub

    Ollama

    Сервер

    Локальная LLM-постобработка расшифровок

    GitHub

    Qwen 2.5 3B

    Сервер, Ollama

    Быстрая лёгкая модель для CPU-режима

    Ollama

    Vikhr-YandexGPT-5-Lite-8B-it GGUF

    Сервер, Ollama

    Более крупная русскоязычная модель для сравнения качества

    Hugging Face

    Obsidian

    Android, Windows/ПК

    Чтение и ведение синхронизированных Markdown-заметок

    Официальный сайт

    Markor

    Android

    Лёгкий Markdown-ридер/редактор для папки расшифровок

    GitHub

    Ключевые папки:

audio_in  → входящие аудиофайлыaudio_out → транскрипты и обработанные заметки

В таком виде это не «коробочный» UX, но для меня он удобен: я могу читать, править, связывать заметки, добавлять теги и использовать всё это как часть своей базы знаний.

Что получилось

Репозиторий лежит здесь:

https://github.com/voodoo2serg/recognition

Сейчас система умеет:

  • принимать аудиофайлы;

  • работать с длинными записями;

  • распознавать русскую речь через GigaSTT;

  • сохранять результат в Markdown;

  • делать abstract и расширенный конспект;

  • использовать разные модели постобработки;

  • переключать режимы через текстовые/голосовые команды;

  • синхронизировать результаты через обычные папки;

  • работать с Obsidian и Markdown-редакторами.

Быстрый старт

На сервере:

git clone https://github.com/voodoo2serg/recognition.gitcd recognition./scripts/install-server.sh

Проверка:

curl http://127.0.0.1:9876/health./scripts/healthcheck.sh

Я использую связку с Syncthing и Obsidian/Markor, но это не обязательное требование. Главное — чтобы аудиофайлы попадали во входную папку, а Markdown-результаты возвращались обратно.

Ограничения

Это не коробочный продукт. Но зато систему можно адаптировать под свои папки, устройства и привычки.

Что сейчас не идеально:

  1. На CPU всё работает медленнее, чем хотелось бы.

  2. Интерфейс файловый, без красивой веб-панели.

  3. Постобработка зависит от качества локальной LLM.

Что стоит улучшить

Сейчас делаю Телеграм-бота. Дальше него не пойду, но, очевидно, что если появится веб-интерфейс, позволяющий загрузить аудио, открыть транскрипт, запустить повторную постобработку и в принципе реализовать LoRa -конечно, будет хорошо.

Еще очередь задач — сейчас логика сделана максимально просто. Для одного пользователя этого хватает. Если подключать несколько телефонов или несколько преподавателей, нужна нормальная очередь — Redis, RQ, Celery, отдельные статусы задач и настройка работы при повторных попытках при ошибках.

Плюс «коробочность» — полноценный самодостаточный файл для установки, без сложных настроек целого зоопарка.

Вывод

Я хотел использовать PLAUD, но не смог оплатить сервис и поэтому магей вайб-кодинга я сделал свое. Это рабочая лошадка, которая уже помогает мне с протоколами совещаний и, главное, с голосовыми заметками. Проект открыт, код лежит на GitHub.

Репозиторий:

https://github.com/voodoo2serg/recognition

ссылка на оригинал статьи https://habr.com/ru/articles/1045154/