Pular para o conteúdo principal

Como rodar reconhecimento de voz local (speech-to-text) na CPU com VibeASR.cpp

Aprenda a executar, localmente e só com CPU, um sistema de speech-to-text rápido, preciso e multilíngue usando o Microsoft VibeASR.cpp — com transcrição de arquivos, streaming em tempo real e interface web em Gradio no Windows, Linux e macOS.
Atualizado 10 de ago. de 2026  · 9 min lido

Explorar com IA

Abrir no ChatGPTAbrir no ClaudeAbrir no Perplexity

O reconhecimento automático de fala evoluiu muito nos últimos anos. Modelos de speech-to-text que antes exigiam GPUs potentes e entregavam resultados inconsistentes hoje já conseguem gerar transcrições precisas em computadores comuns. 

Ao mesmo tempo, os modelos ficaram menores, a inferência em CPU ficou mais rápida e o suporte multilíngue se expandiu — entregando uma combinação melhor de qualidade de transcrição, velocidade, acessibilidade e privacidade.

O VibeVoice-ASR-BitNet, da Microsoft, é um ótimo exemplo desse avanço. 

Seu runtime otimizado, VibeASR.cpp, torna possível rodar speech-to-text multilíngue localmente em computadores Windows, Linux ou macOS, sem depender de GPU dedicada ou enviar gravações para a nuvem.

Neste guia, você vai aprender a instalar e compilar o VibeASR.cpp, baixar o modelo quantizado, transcrever arquivos de áudio via linha de comando, rodar o servidor de streaming persistente e usar a interface web em Gradio para enviar ou gravar áudio. 

O que é o Microsoft VibeASR.cpp? 

VibeASR.cpp é o runtime oficial em C++ da Microsoft para o VibeVoice-ASR-BitNet, um modelo multilíngue de reconhecimento automático de fala comprimido, projetado para inferência local eficiente em CPUs. 

Em vez de ser um modelo de fala separado, o VibeASR.cpp fornece o mecanismo otimizado necessário para executar o modelo, permitindo transcrição em tempo real sem GPU dedicada ou serviços de fala na nuvem. 

Isso o torna adequado para notebooks, desktops, dispositivos de borda e outros sistemas com recursos computacionais limitados. 

Diagrama de arquitetura do VibeVoice-ASR-BitNet

Fonte: microsoft/VibeVoice-ASR-BitNet

Para viabilizar o uso em CPU, a Microsoft substituiu o componente de linguagem Qwen2.5-7B usado na arquitetura original do VibeVoice-ASR pelo modelo bem menor Qwen2.5-1.5B. 

Ela também aplica diferentes métodos de quantização aos dois componentes principais:

  • I8_S para o codificador de áudio VAE
  • I2_S para o modelo de linguagem, com embeddings de maior precisão

Essas otimizações reduzem o tamanho total do modelo de aproximadamente 4,62 GB para 1,58 GB, tornando prático rodá-lo em notebooks e desktops. 

Apesar da redução substancial, o modelo comprimido apresenta apenas um aumento relativamente pequeno, de cerca de 1–4 pontos percentuais na taxa de erro de palavras em comparação com a arquitetura maior. 

O VibeASR.cpp usa o framework ggml, instruções de CPU customizadas e fusão de operadores para aumentar a velocidade de inferência. 

Segundo os benchmarks da Microsoft, ele pode rodar entre 1,6 e 2,3 vezes mais rápido que o Whisper.cpp em tamanhos de modelo comparáveis e alcançar transcrição mais rápida que o tempo real em CPUs compatíveis quando há threads suficientes.

Nos testes em CPU da Microsoft, o modelo alcançou um RTF de 0,63 com quatro threads e 0,42 com oito threads, equivalentes a cerca de 1,59× e 2,38× a velocidade em tempo real

A WER informada inclui 8,25% no MLC English, 21,36% em áudio de headset AMI, 25,87% em áudio AMI com microfone distante e 2,41% no LibriSpeech clean, mostrando um bom equilíbrio entre acurácia, tamanho do modelo e desempenho em CPU. 

1. Instale as ferramentas de compilação necessárias

O VibeASR.cpp roda totalmente na CPU, então você não precisa de GPU dedicada. Você só precisa de um computador Windows, Linux ou macOS compatível, Python 3.9 ou superior, Git, um compilador C++ e cerca de 4 GB de espaço livre em disco para o código-fonte, arquivos de build e modelo.

O processo de build também requer CMake e Ninja. 

No Windows, a forma mais simples é usar o w64devkit, que fornece compilador e ferramentas de build em um terminal pré-configurado. 

No Linux, os pacotes necessários podem ser instalados diretamente pelo gerenciador de pacotes do sistema.

Windows

Baixe o arquivo .exe x64 mais recente na página de releases do w64devkit.

página com os últimos releases do w64devkit

O arquivo baixado é um autoextrator. Execute-o e extraia a pasta em um local simples, como:

C:\w64devkit

Depois, abra:

C:\w64devkit\w64devkit.exe

Isso inicia um terminal pronto para uso com GCC, CMake, Make e Ninja. Você pode usar esse terminal para o restante dos passos no Windows sem precisar configurar variáveis de ambiente manualmente.

Linux

No Ubuntu, Debian e distribuições relacionadas, o compilador e as ferramentas de build necessárias podem ser instalados com um único comando:

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

Isso instala o compilador GCC, CMake, Ninja, Git, Python e o pacote necessário para criar um ambiente virtual Python.

macOS

No macOS, instale as ferramentas de desenvolvimento via linha de comando da Apple:

xcode-select --install

Você também vai precisar de Git, Python 3.9 ou superior, CMake e Ninja. A forma mais simples de instalar o restante é via Homebrew:

brew install git python cmake ninja

2. Clone o VibeASR.cpp e configure o ambiente Python

O processo a seguir é o mesmo para Windows, Linux e macOS

A única diferença por sistema operacional é o comando para ativar o ambiente virtual do Python.

Abra o terminal, vá até a pasta onde quer armazenar o projeto e clone o repositório do VibeASR.cpp:

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

Clonando o microsoft/VibeASR.cpp

--recursive também baixa o submódulo llama.cpp necessário. Sem ele, faltariam arquivos para compilar o runtime de inferência.

Crie um ambiente virtual Python dentro da pasta do projeto. 

python -m venv .venv

Ative-o com o comando do seu sistema operacional.

Windows usando o terminal do w64devkit:

. .venv/Scripts/activate

Linux e macOS:

source .venv/bin/activate

Após ativar, o terminal deve exibir (.venv) antes do prompt. Confirme se o Python está disponível: 

python --version

Atualize o pip e instale as dependências do projeto: 

python -m pip install --upgrade pip

pip install -r requirements.txt

Elas incluem os pacotes Python usados pelo script de setup, pelo processo de download do modelo e pela interface web local em Gradio. 

3. Compile o VibeASR.cpp e baixe o modelo

O VibeASR.cpp inclui um script de configuração que realiza tanto a compilação em C++ quanto o download do modelo.

Ele compila os executáveis de linha de comando e de streaming, instala o pacote GGUF necessário e baixa os arquivos do modelo pré-quantizado para o diretório do projeto.

Antes de rodar o script, garanta que o ambiente virtual do Python esteja ativo.

No Linux e macOS, execute:

python setup_env.py

No Windows, rode o seguinte comando dentro do terminal do w64devkit:

CMAKE_GENERATOR=Ninja python setup_env.py

Definir CMAKE_GENERATOR=Ninja garante que o CMake use o Ninja em vez de tentar usar o Microsoft Visual C++, que não está disponível no ambiente do w64devkit.

O script fará:

  • A instalação do pacote Python gguf.
  • A configuração e compilação do VibeASR.cpp.
  • A construção dos executáveis de inferência e streaming.
  • O download dos arquivos do modelo VibeASR pré-quantizados.
  • O salvamento dos modelos em models/vibeasr.

Depois que o processo terminar, o executável principal de inferência estará no seguinte local.

No Windows:

build/bin/asr_infer.exe

No Linux e macOS:

build/bin/asr_infer

Verifique se o executável foi criado com sucesso exibindo as opções disponíveis na linha de comando.

No Windows:

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

No Linux e macOS:

./build/bin/asr_infer --help

Menu de ajuda do VibeASR.cpp

4. Teste a transcrição de arquivo e por streaming

Com o runtime e o modelo prontos, você pode testar dois modos de transcrição. 

O executável padrão processa um arquivo de áudio e retorna a transcrição completa, enquanto o servidor de streaming mantém o modelo carregado e exibe a transcrição progressivamente conforme os tokens são gerados.

Primeiro, baixe uma gravação de exemplo curta dentro da pasta do projeto VibeASR.cpp:

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

O arquivo de áudio será salvo como recording.wav no diretório atual do projeto.

Transcreva um arquivo de áudio

O comando de inferência padrão carrega o codificador de áudio e o modelo de linguagem, processa a gravação e imprime a transcrição completa.

No Windows, execute:

./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

No Linux e macOS, use o mesmo comando sem a extensão .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

Transcrevendo um arquivo de áudio com VibeASR.cpp

A opção -t 6 atribui seis threads de CPU à inferência. Você pode aumentar ou reduzir esse número conforme o seu processador. 

A opção --greedy seleciona o token mais provável a cada etapa de decodificação, gerando resultados consistentes.

No meu computador, a gravação de 14,085 segundos levou cerca de 13,7 segundos para ser processada:

RTF: 0.9726
Speed: approximately 1.03× real time

O real-time factor (RTF) compara o tempo de processamento com a duração do áudio. 

Um RTF abaixo de 1,0 significa que a gravação foi transcrita mais rápido do que seu tempo de reprodução. O desempenho pode variar conforme processador, sistema operacional, número de threads e duração do áudio.

Teste o streaming token a token

O VibeASR.cpp também inclui um servidor de streaming persistente. Ele carrega os dois arquivos de modelo uma única vez e permanece ativo, permitindo enviar várias gravações sem reiniciar e recarregar o modelo a cada vez.

A saída funciona de forma semelhante ao streaming de um modelo de linguagem grande. 

Em vez de esperar toda a transcrição terminar, você começa a ver o texto conforme o decodificador gera cada token. 

Alguns tokens podem representar palavras completas; outros, partes de palavras ou pontuação — mas todos são exibidos progressivamente até concluir a transcrição.

No Windows, inicie o servidor com:

./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

No Linux e macOS, rode:

./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

Streaming token a token: modelo pronto.

Espere o servidor terminar de carregar os modelos e exibir:

---READY---

Digite o caminho do arquivo de áudio e pressione Enter:

recording.wav

A transcrição começará a aparecer token por token. Quando a gravação for totalmente processada, o servidor exibirá:

---END---

Streaming token a token com VibeASR.cpp

Você pode então informar outro caminho de arquivo de áudio sem recarregar os modelos. Para encerrar o servidor, digite:

exit

Esse fluxo persistente é especialmente útil ao transcrever várias gravações ou ao conectar o VibeASR.cpp a outro aplicativo que precise de saída progressiva.

5. Inicie e teste a interface web

O VibeASR.cpp inclui uma interface web local em Gradio para enviar arquivos de áudio ou gravar fala pelo microfone. O processo é o mesmo no Windows, Linux e macOS, embora o Windows use executáveis com extensão .exe.

As dependências necessárias para a interface — incluindo Gradio, SoundFile e NumPy — já foram instaladas via requirements.txt.

Primeiro, garanta que o ambiente virtual esteja ativo.

Windows usando o terminal do w64devkit:

. .venv/Scripts/activate

Linux e macOS:

source .venv/bin/activate

No Windows, inicie a interface com:

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

No Linux e macOS, os caminhos padrão dos executáveis são detectados automaticamente:

python demo/gradio_asr_demo.py --port 7860

Os caminhos dos modelos já estão configurados no script do Gradio para todos os sistemas, então você não precisa incluí-los no comando. 

O script também suporta caminhos separados para o executável padrão de inferência e para o servidor de streaming.

Abra o seguinte endereço no seu navegador:

http://127.0.0.1:7860

Explore a interface

A interface permite:

  • Selecionar o modelo para CPU.
  • Definir o número de threads de CPU.
  • Alternar entre processamento Online e Offline.
  • Habilitar decodificação greedy ou ajustar temperatura e Top-p.
  • Enviar um arquivo de áudio ou gravar direto do microfone.
  • Adicionar hotwords opcionais, como nomes ou termos técnicos.
  • Ver a transcrição, duração do áudio e o real-time factor.

Aqui, modo Online não significa que seu áudio é enviado para um serviço na internet.

Ele processa gravações longas progressivamente em blocos e usa o asr_stream_server quando disponível. 

O modo Offline processa o arquivo completo antes de exibir o resultado.

Interface WebUI do VibASR.cpp

Teste uma gravação curta

No primeiro teste, gravei uma frase curta diretamente pelo microfone e selecionei o modo Offline com quatro threads de CPU.

Testando gravação curta no WebUI do VibASR.cpp no modo offline

Um RTF de 0,9584 indica que o modelo levou cerca de 0,96 s para processar cada segundo de áudio. 

Isso equivale a aproximadamente 1,04× o tempo real, então a transcrição terminou um pouco antes da duração da gravação.

Teste uma gravação mais longa

Também testei a interface com uma gravação mais longa, com cerca de 109,7 segundos de fala. O modelo gerou a transcrição completa e informou:

RTF: 0.5305
Audio: 109.7s

WebUI do VibASR.cpp transcrevendo áudio longo na opção offline

Ou seja, o modelo precisou de aproximadamente 0,53 s para processar cada segundo de áudio. A gravação completa levou cerca de 58 segundos para ser transcrita, com velocidade de aproximadamente 1,88× o tempo real.

Considerações finais

Fiquei impressionado com o quanto o reconhecimento de fala local se tornou viável. 

Mesmo em uma CPU mais antiga, o VibeASR.cpp consegue transcrever perto ou acima da velocidade em tempo real sem exigir GPU, muita memória ou grande espaço em disco. 

O executável compilado também pode ser integrado a uma aplicação Python, encapsulado em um endpoint FastAPI ou usado como motor de transcrição em uma ferramenta local maior.

A principal configuração a considerar é o número de threads de CPU atribuídas ao processo. 

Você também precisa escolher entre o modo online, que transmite a transcrição progressivamente, e o modo offline, que retorna o texto completo após processar o áudio.

A configuração ainda poderia ser mais simples, especialmente no Windows, Linux e macOS. 

Como o projeto ainda está evoluindo, espero que a instalação e o suporte a binários prontos melhorem com o tempo. Quando houver um binário standalone estável, me vejo usando este modelo em muitos outros projetos locais de speech-to-text.

Aproveite também para conferir nosso tutorial da GPT Live Transcribe API.

FAQs

Quais idiomas o modelo VibeASR realmente suporta?

O modelo VibeVoice-ASR oferece suporte nativo a mais de 50 idiomas. Entre eles: inglês, chinês, francês, italiano, coreano, português e vietnamita. Ele não exige configuração explícita de idioma e consegue lidar automaticamente com "code-switching" (quando o falante mistura idiomas na mesma sentença).

Preciso converter meus arquivos MP3 ou de vídeo antes de transcrever?

Se você estiver usando o executável de linha de comando asr_infer diretamente, ele espera arquivos .wav (tipicamente 16 kHz, 16-bit mono). Se você tiver áudio em outros formatos como MP3, M4A ou FLAC, será preciso convertê-los para WAV antes, usando uma ferramenta como o FFmpeg, para então passá-los ao CLI.

O modelo consegue identificar diferentes falantes ou gerar timestamps por palavra?

A arquitetura base do VibeVoice-ASR foi projetada para gerar saídas estruturadas com "Quem" (diarização de falantes), "Quando" (timestamps) e "O quê" (conteúdo) em uma única passada. Porém, o executável C++ leve (VibeASR.cpp) atualmente foca na transcrição bruta progressiva. Para obter o JSON estruturado completo com IDs de falantes e timestamps, normalmente é preciso rodar o modelo usando a biblioteca Python transformers.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.

Tópicos

Principais cursos da DataCamp

Curso

Processamento de Linguagem Falada em Python

4 h
9.1K
Aprenda a carregar, transformar e transcrever fala de arquivos de áudio brutos em Python.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado
An avian AI exits its cage

blog

12 Alternativas de código aberto ao GPT-4

GPT-4 alternativas de código aberto que podem oferecer desempenho semelhante e exigem menos recursos computacionais para serem executadas. Esses projetos vêm com instruções, fontes de código, pesos de modelos, conjuntos de dados e interface de usuário do chatbot.
Abid Ali Awan's photo

Abid Ali Awan

9 min

blog

Os 7 melhores geradores de vídeo com IA para 2026, com vídeos de exemplo

Conheça os melhores geradores de vídeo com IA disponíveis hoje, incluindo RunwayML, Synthesia, Colossyan, Pictory, DeepBrain AI, Invideo e os super esperados Sora e Veo da DeepMind.
Dr Ana Rojo-Echeburúa's photo

Dr Ana Rojo-Echeburúa

9 min

Tutorial

Como usar a API de conversão de texto em fala da OpenAI

A API TTS da OpenAI é um ponto de extremidade que permite que os usuários interajam com seu modelo de IA TTS que converte texto em linguagem falada com som natural.
Kurtis Pykes 's photo

Kurtis Pykes

cursor ai code editor

Tutorial

AI do cursor: Um guia com 10 exemplos práticos

Saiba como instalar o Cursor AI no Windows, macOS e Linux e descubra como usá-lo em 10 casos de uso diferentes.

Tutorial

DeepSeek-Coder-V2 Tutorial: Exemplos, instalação, padrões de referência

O DeepSeek-Coder-V2 é um modelo de linguagem de código de código aberto que rivaliza com o desempenho do GPT-4, Gemini 1.5 Pro, Claude 3 Opus, Llama 3 70B ou Codestral.
Dimitri Didmanidze's photo

Dimitri Didmanidze

Tutorial

Como fazer o ajuste fino do GPT 3.5: Liberando todo o potencial da IA

Explore o GPT-3.5 Turbo e descubra o potencial transformador do ajuste fino. Saiba como personalizar esse modelo de linguagem avançado para aplicativos de nicho, aprimorar seu desempenho e entender os custos associados, a segurança e as considerações de privacidade.
Moez Ali's photo

Moez Ali

Ver MaisVer Mais