Перейти к основному контенту

Как запускать локальное распознавание речи на CPU с VibeASR.cpp

Узнайте, как запускать быстрое, точное, многоязычное распознавание речи локально на CPU с помощью Microsoft VibeASR.cpp: транскрибация файлов, потоковая обработка в реальном времени и веб-интерфейс Gradio в Windows, Linux и macOS.
Обновлено 10 авг. 2026 г.  · 9 мин читать

Изучить с помощью AI

Открыть в ChatGPTОткрыть в ClaudeОткрыть в Perplexity

Системы автоматического распознавания речи заметно продвинулись за последние годы. Модели speech-to-text, которым раньше требовались мощные GPU и которые давали нестабильные результаты, теперь обеспечивают точные транскрибации на обычных компьютерах. 

Одновременно с этим модели стали компактнее, инференс на CPU стал быстрее, а многоязычная поддержка расширилась. В результате пользователи получают более удачное сочетание качества транскрибации, скорости, доступности и приватности.

Хороший пример этого прогресса — Microsoft VibeVoice-ASR-BitNet. 

Оптимизированный рантайм VibeASR.cpp позволяет запускать многоязычное speech-to-text локально на компьютерах под управлением Windows, Linux или macOS без выделенного GPU и без отправки записей в облако.

В этом руководстве вы узнаете, как установить и собрать VibeASR.cpp, скачать квантизированную модель, транскрибировать аудиофайлы из командной строки, запустить постоянный потоковый сервер и использовать веб-интерфейс Gradio для загрузки или записи речи. 

Что такое Microsoft VibeASR.cpp? 

VibeASR.cpp — официальный C++-рантайм для инференса от Microsoft для VibeVoice-ASR-BitNet — сжатой многоязычной модели распознавания речи, рассчитанной на эффективный локальный инференс на CPU. 

VibeASR.cpp — это не отдельная модель речи, а оптимизированный движок для её запуска, обеспечивающий транскрибацию в реальном времени без выделенного GPU или облачного сервиса распознавания. 

Благодаря этому решение подходит для ноутбуков, настольных ПК, edge-устройств и других систем с ограниченными вычислительными ресурсами. 

Диаграмма архитектуры VibeVoice-ASR-BitNet

Источник: microsoft/VibeVoice-ASR-BitNet

Чтобы сделать развёртывание на CPU практичным, Microsoft заменила языковую модель Qwen2.5-7B, использовавшуюся в исходной архитектуре VibeVoice-ASR, на гораздо более компактную Qwen2.5-1.5B. 

Также к двум основным компонентам применены разные методы квантизации:

  • I8_S для аудиокодера VAE
  • I2_S для языковой модели, с эмбеддингами повышенной точности

Эти оптимизации уменьшают общий размер модели приблизительно с 4,62 ГБ до 1,58 ГБ, что делает её реалистичной для запуска на ноутбуках и настольных ПК. 

Несмотря на значительное уменьшение размера, сжатая модель демонстрирует лишь относительно небольшой рост на 1–4 процентных пункта в показателе ошибок по словам по сравнению с более крупной архитектурой. 

VibeASR.cpp использует фреймворк ggml, кастомные инструкции CPU и слияние операторов для ускорения инференса. 

Согласно бенчмаркам Microsoft, он работает в 1,6–2,3 раза быстрее, чем Whisper.cpp при сопоставимых размерах моделей и может достигать скорости выше реального времени на поддерживаемых CPU при достаточном количестве потоков.

В CPU-бенчмарках Microsoft модель достигала RTF 0,63 на четырёх потоках и 0,42 на восьми потоках, что соответствует примерно 1,59× и 2,38× скорости реального времени

Сообщаемые значения WER включают 8,25% на MLC English, 21,36% на аудио с гарнитуры AMI, 25,87% на аудио с удалённого микрофона AMI и 2,41% на LibriSpeech clean, что демонстрирует удачный баланс точности, размера модели и производительности на CPU. 

1. Установите необходимые инструменты сборки

VibeASR.cpp полностью работает на CPU, поэтому выделенный GPU не требуется. Вам нужен лишь поддерживаемый компьютер с Windows, Linux или macOS, Python 3.9 или новее, Git, компилятор C++ и около 4 ГБ свободного дискового пространства для исходников, файлов сборки и модели.

Для сборки также требуются CMake и Ninja. 

В Windows самый простой вариант — использовать w64devkit, который предоставляет компилятор и инструменты сборки в преднастроенном терминале. 

В Linux необходимые пакеты можно установить напрямую через менеджер пакетов системы.

Windows

Скачайте последнюю x64 .exe с страницы релизов w64devkit.

последняя страница релизов w64devkit

Загруженный файл — самораспаковывающийся архив. Запустите его и распакуйте папку куда-нибудь в простое место, например:

C:\w64devkit

Затем откройте:

C:\w64devkit\w64devkit.exe

Откроется готовый к работе терминал с GCC, CMake, Make и Ninja. Используйте его для последующих шагов в Windows без ручной настройки переменных окружения.

Linux

В Ubuntu, Debian и родственных дистрибутивах Linux необходимые компилятор и инструменты сборки можно установить одной командой:

sudo apt update
sudo apt install build-essential cmake ninja-build git python3 python3-venv

Это установит компилятор GCC, CMake, Ninja, Git, Python и пакет для создания виртуального окружения Python.

macOS

В macOS установите инструменты разработки командной строки от Apple:

xcode-select --install

Также понадобятся Git, Python 3.9 или новее, CMake и Ninja. Проще всего установить их через Homebrew:

brew install git python cmake ninja

2. Клонируйте VibeASR.cpp и настройте окружение Python

Дальнейшие шаги по настройке одинаковы для Windows, Linux и macOS

Единственное отличие — команда для активации виртуального окружения Python в зависимости от ОС.

Откройте терминал, перейдите в папку, где хотите разместить проект, и клонируйте репозиторий VibeASR.cpp:

git clone --recursive https://github.com/microsoft/VibeASR.cpp.git
cd VibeASR.cpp

Клонирование microsoft/VibeASR.cpp

Опция --recursive также скачивает необходимый подмодуль llama.cpp. Без него часть файлов, нужных для сборки рантайма, будет отсутствовать.

Создайте виртуальное окружение Python в папке проекта. 

python -m venv .venv

Активируйте его командой для вашей ОС.

Windows (терминал w64devkit):

. .venv/Scripts/activate

Linux и macOS:

source .venv/bin/activate

После активации в терминале перед приглашением должна появиться метка (.venv). Проверьте доступность Python: 

python --version

Обновите pip и установите зависимости проекта: 

python -m pip install --upgrade pip

pip install -r requirements.txt

В зависимости входят пакеты Python, используемые скриптом настройки, для загрузки модели и для локального веб-интерфейса Gradio. 

3. Соберите VibeASR.cpp и скачайте модель

VibeASR.cpp включает скрипт, который выполняет сборку C++ и загрузку модели.

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

Перед запуском скрипта убедитесь, что виртуальное окружение Python активно.

В Linux и macOS выполните:

python setup_env.py

В Windows запустите следующую команду в терминале w64devkit:

CMAKE_GENERATOR=Ninja python setup_env.py

Установка CMAKE_GENERATOR=Ninja гарантирует использование CMake вместе с Ninja вместо попытки задействовать Microsoft Visual C++, который недоступен в среде w64devkit.

Скрипт настройки выполнит:

  • Установку необходимого Python-пакета gguf.
  • Конфигурирование и компиляцию VibeASR.cpp.
  • Сборку исполняемых файлов для инференса и потоковой обработки.
  • Загрузку предварительно квантизированных файлов модели VibeASR.
  • Сохранение загруженных моделей в models/vibeasr.

По завершении основной исполняемый файл инференса будет доступен по следующему пути.

Windows:

build/bin/asr_infer.exe

Linux и macOS:

build/bin/asr_infer

Проверьте успешность сборки, выведя доступные параметры командной строки.

Windows:

./build/bin/asr_infer.exe --help

Linux и macOS:

./build/bin/asr_infer --help

Меню справки VibeASR.cpp

4. Проверьте транскрибацию файлов и потоковую обработку

Теперь, когда рантайм и модель готовы, можно протестировать два метода транскрибации. 

Стандартный исполняемый файл обрабатывает один аудиофайл и возвращает готовую транскрибацию, а потоковый сервер удерживает модель в памяти и показывает прогресс транскрибации по мере генерации токенов.

Сначала скачайте короткий образец записи из папки проекта VibeASR.cpp:

curl -L "https://homepages.inf.ed.ac.uk/htang2/notes/speech-samples/103-1240-0000.wav" -o recording.wav

Аудиофайл будет сохранён как recording.wav в текущем каталоге проекта.

Транскрибируйте аудиофайл

Стандартная команда инференса загружает аудиокодер и языковую модель, обрабатывает запись и выводит готовую транскрибацию.

В Windows выполните:

./build/bin/asr_infer.exe \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  --audio recording.wav \
  -t 6 \
  --greedy

В Linux и macOS используйте ту же команду без расширения .exe:

./build/bin/asr_infer \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  --audio recording.wav \
  -t 6 \
  --greedy

Транскрибация аудиофайла с помощью VibeASR.cpp

Опция -t 6 назначает инференсу шесть потоков CPU. Вы можете увеличить или уменьшить это значение в зависимости от вашего процессора. 

Опция --greedy выбирает на каждом шаге декодирования наиболее вероятный токен, обеспечивая стабильные результаты транскрибации.

На моём компьютере запись длительностью 14,085 секунды обрабатывалась примерно 13,7 секунды:

RTF: 0.9726
Speed: approximately 1.03× real time

Коэффициент реального времени (RTF) сравнивает время обработки с длительностью аудио. 

RTF ниже 1.0 означает, что запись была транскрибирована быстрее её фактической продолжительности. Производительность зависит от процессора, операционной системы, числа потоков и длительности записи.

Проверьте потоковую обработку токен за токеном

VibeASR.cpp также включает постоянный потоковый сервер. Он загружает два файла модели один раз и остаётся активным, позволяя отправлять несколько записей без повторного запуска и перезагрузки модели каждый раз.

Вывод работает аналогично потоковой генерации в больших языковых моделях. 

Вместо ожидания завершения всей транскрибации вы начинаете видеть текст по мере генерации каждого токена декодером. 

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

В Windows запустите сервер командой:

./build/bin/asr_stream_server.exe \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  -t 6 \
  --greedy

В Linux и macOS выполните:

./build/bin/asr_stream_server \
  --vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
  --lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
  -t 6 \
  --greedy

Потоковая обработка токен за токеном — модель готова.

Подождите, пока сервер загрузит модели и выведет:

---READY---

Введите путь к аудиофайлу и нажмите Enter:

recording.wav

Транскрибация начнёт появляться токен за токеном. После полной обработки записи сервер выведет:

---END---

Потоковая обработка токен за токеном с VibeASR.cpp

Затем можно ввести путь к другому аудио без перезагрузки моделей. Чтобы остановить сервер, введите:

exit

Такой постоянный режим особенно полезен при транскрибации нескольких записей или при подключении VibeASR.cpp к другому приложению, которому нужен прогрессивный вывод транскрибации.

5. Запустите и протестируйте веб-интерфейс

VibeASR.cpp включает локальный веб-интерфейс Gradio для загрузки аудиофайлов или записи речи с микрофона. Процесс одинаков для Windows, Linux и macOS, хотя в Windows исполняемые файлы имеют расширение .exe.

Зависимости для интерфейса, включая Gradio, SoundFile и NumPy, уже установлены через requirements.txt.

Сначала убедитесь, что виртуальное окружение активно.

Windows (терминал w64devkit):

. .venv/Scripts/activate

Linux и macOS:

source .venv/bin/activate

В Windows запустите интерфейс так:

python demo/gradio_asr_demo.py \
  --port 7860 \
  --bin build/bin/asr_infer.exe \
  --server-bin build/bin/asr_stream_server.exe

В Linux и macOS пути к исполняемым файлам по умолчанию определяются автоматически:

python demo/gradio_asr_demo.py --port 7860

Пути к моделям уже настроены внутри скрипта Gradio для всех ОС, поэтому указывать их в команде не нужно. 

Скрипт также поддерживает отдельные пути для стандартного исполняемого файла инференса и потокового сервера.

Откройте в браузере следующий адрес:

http://127.0.0.1:7860

Изучите интерфейс

Интерфейс позволяет:

  • Выбрать модель для CPU.
  • Задать число потоков CPU.
  • Переключаться между режимами Online и Offline.
  • Включать жадное декодирование или настраивать Temperature и Top-p.
  • Загружать аудиофайл или записывать напрямую с микрофона.
  • Добавлять необязательные «горячие слова» (имена, термины).
  • Просматривать транскрибацию, длительность аудио и коэффициент RTF.

Здесь Online-режим не означает отправку вашего аудио в онлайн-сервис.

Он прогрессивно обрабатывает длинные записи по блокам и использует asr_stream_server при наличии. 

Offline-режим обрабатывает весь аудиофайл целиком перед отображением результата.

Интерфейс VibASR.cpp WebUI

Проверьте короткую запись

Для первого теста я записал короткое предложение через микрофон и выбрал режим Offline с четырьмя потоками CPU.

VibASR.cpp WebUI — тест короткой записи в офлайн-режиме

RTF 0,9584 означает, что на обработку одной секунды аудио модели требовалось около 0,96 секунды. 

Это примерно 1,04× реального времени, поэтому транскрибация завершилась чуть быстрее фактической длительности записи.

Проверьте длинную запись

Я также протестировал интерфейс на более длинной записи примерно с 109,7 секундами речи. Модель успешно выдала полную транскрибацию и сообщила:

RTF: 0.5305
Audio: 109.7s

VibASR.cpp WebUI — транскрибация длинного аудио в офлайн-режиме

Это означает, что на обработку одной секунды аудио модели требовалось примерно 0,53 секунды. Вся запись транскрибировалась около 58 секунд, что соответствует скорости примерно 1,88× реального времени.

Заключение

Меня впечатлило, насколько практичным стало локальное распознавание речи. 

Даже на старом CPU VibeASR.cpp способен транскрибировать аудио почти в реальном времени или быстрее — без необходимости в GPU, большом объёме памяти или значительном дисковом пространстве. 

Скомпилированный исполняемый файл можно интегрировать в приложение на Python, обернуть в конечную точку FastAPI или использовать как движок транскрибации в более крупном локальном инструменте.

Главный параметр, на который стоит обратить внимание, — количество потоков CPU, выделенных процессу. 

Также нужно выбрать между online-режимом, который отображает транскрипт по мере обработки, и offline-режимом, который возвращает полную транскрибацию после завершения.

Настройка могла бы быть ещё проще, особенно в Windows, Linux и macOS. 

Поскольку проект активно развивается, ожидаю, что установка и поддержка готовых бинарников со временем улучшатся. Когда появится стабильный автономный бинарный файл, я смогу использовать эту модель во многих локальных проектах speech-to-text.

Также рекомендую ознакомиться с нашим руководством по GPT Live Transcribe API.

FAQs

Какие языки на самом деле поддерживает модель VibeASR?

Модель VibeVoice-ASR нативно поддерживает более 50 языков. Сюда входят английский, китайский, французский, итальянский, корейский, португальский и вьетнамский. Модель не требует явной установки языка и автоматически обрабатывает «code-switching» (когда говорящий естественным образом смешивает несколько языков в одном предложении).

Нужно ли конвертировать мои MP3 или видеофайлы перед транскрибацией?

Если вы используете напрямую консольный исполняемый файл asr_infer, он ожидает файлы .wav (обычно 16 кГц, 16-бит, моно). Если у вас аудио в других форматах — MP3, M4A или FLAC, — их нужно предварительно конвертировать в WAV с помощью, например, FFmpeg, прежде чем передавать в CLI.

Может ли модель определять разных спикеров или выдавать пометки времени на уровне слов?

Базовая архитектура VibeVoice-ASR специально разработана для генерации структурированных выходных данных, содержащих «Кто» (диаризация спикеров), «Когда» (метки времени) и «Что» (содержание) за один проход. Однако лёгкий C++-исполняемый файл инференса (VibeASR.cpp) в настоящий момент ориентирован на прогрессивную транскрибацию «сырого» текста. Чтобы получить полный структурированный JSON-вывод с идентификаторами говорящих и метками времени, обычно нужно запускать модель через Python-библиотеку transformers.

Темы

Топ-курсы DataCamp

Course

Обработка устной речи на Python

4 ч
9.1K
Научитесь загружать, преобразовывать и расшифровывать речь из необработанных аудиофайлов в Python.
ПодробнееRight Arrow
Начать Курс
Смотрите большеRight Arrow