- Framework de reconhecimento de fala em tempo real com todo o processamento feito on-device
- Por meio de uma arquitetura de modelo baseada em streaming, gera texto em tempo real enquanto o usuário fala e atinge taxa de erro menor que o Whisper Large v3 (WER de 6,65%)
- Funciona com a mesma API em várias plataformas, como Python, iOS, Android, MacOS, Linux, Windows e Raspberry Pi, com otimização baseada em núcleo C++ e OnnxRuntime
- Inclui modelos por idioma (inglês, coreano, japonês, espanhol etc.) e recurso de reconhecimento de comandos (Intent Recognition), permitindo que desenvolvedores criem interfaces de voz com facilidade
- Melhora as limitações do Whisper em entrada fixa de 30 segundos, ausência de cache e precisão por idioma, destacando-se como uma alternativa adequada para implementar interfaces de voz de baixa latência em ambientes de borda
Visão geral do Moonshine Voice
- Moonshine Voice é um toolkit de IA open source para desenvolvimento de aplicações de voz em tempo real
- Todo o processamento é feito no dispositivo local, garantindo resposta rápida e privacidade
- Com processamento em streaming, o texto pode ser atualizado enquanto o usuário ainda está falando
- O modelo foi treinado do zero com base em pesquisa própria e oferece precisão superior à do Whisper Large v3
- Há opções de vários tamanhos, de modelo ultracompacto de 26 MB até modelo médio com 245M de parâmetros
- Suporta vários idiomas, incluindo inglês, coreano, japonês, chinês, espanhol, vietnamita, árabe e ucraniano
Principais melhorias em relação ao Whisper
- Remove a janela de entrada fixa de 30 segundos do Whisper e passa a suportar entradas de comprimento variável
- Adiciona cache para reduzir cálculos redundantes durante o streaming e diminuir drasticamente a latência
- Com treinamento de modelo único por idioma, obtém maior precisão para o mesmo porte de modelo
- Por meio de uma biblioteca central C++ multiplataforma, a mesma API pode ser usada em Python, Swift, Java etc.
- Com um modelo de 245M de parâmetros, menor que o Whisper Large v3 (1,5B de parâmetros), alcança taxa de erro mais baixa
Principais recursos e estrutura da API
- Integra o pipeline de reconhecimento de fala em uma única biblioteca para processar de forma unificada entrada de microfone, detecção de voz (VAD), conversão em texto, identificação de locutor e reconhecimento de comandos
- Classes principais:
- Transcriber: converte entrada de áudio em texto
- MicTranscriber: processa automaticamente a entrada do microfone
- IntentRecognizer: reconhecimento de comandos com base em linguagem natural
- Estrutura orientada a eventos, permitindo detectar em tempo real mudanças de estado como LineStarted / LineUpdated / LineCompleted
Modelos e desempenho
- Moonshine Medium Streaming (245M): WER de 6,65%, melhor que o Whisper Large v3 (7,44%)
- Moonshine Small Streaming (123M): WER de 7,84%
- Moonshine Tiny Streaming (34M): WER de 12,00%
- O modelo Tiny em coreano foi avaliado com WER de 6,46%
- Todos os modelos são fornecidos no formato .ort baseado em OnnxRuntime, com quantização de 8 bits para reduzir o tamanho
Desenvolvimento e implantação
- Pode ser instalado nos principais ambientes, como Python (
pip install moonshine-voice), Swift (SPM), Android (Maven) e Windows (headers C++)
- Oferece pacote otimizado para Raspberry Pi, com reconhecimento em tempo real via microfone USB
- Disponível sob licença MIT (modelos em inglês) e Moonshine Community License (modelos de outros idiomas)
- Roadmap futuro: redução de binários para mobile, idiomas adicionais, identificação de locutor aprimorada e customização por domínio
Benchmark e usos
- Velocidade de processamento mais de 5 vezes maior que a do Whisper, adequada para interfaces de voz em tempo real
- Projetado com meta de latência de resposta abaixo de 200 ms, podendo ser usado em aplicações conversacionais
- Com o exemplo de reconhecimento de comandos, também reconhece comandos em linguagem natural com variações, como “Turn on the lights”
- Desempenho validado publicamente no HuggingFace OpenASR Leaderboard
1 comentários
Opiniões no Hacker News
Segundo o OpenASR Leaderboard, Parakeet V2/V3 e Canary-Qwen (versão ajustada do Qwen) têm desempenho melhor que o Moonshine
Os três modelos são open source, mas o Parakeet é o menor modelo
Estou usando o Parakeet V3 localmente com o Handy, e ele funciona muito bem
Então acho difícil fazer uma comparação direta
É surpreendente que o leaderboard não mostre informações sobre o tamanho dos modelos
Estou até escrevendo este post falando com o Handy agora
A pontuação automática é perfeita e, como ele transforma voz em texto localmente na hora, é muito mais prático que o Google Docs
Antes eu tinha até instalado o navegador Orion para usar entrada de voz baseada em Chrome, mas agora só o Handy já basta
Eu digitava a 100~120 WPM, e isso é mais rápido que isso
É realmente uma ferramenta que melhora a qualidade de vida
Ao usar codex-cli com o Handy no macOS, o atalho padrão (Option+Space) tem o problema de inserir espaços no meio da fala
Em vez disso, a combinação Left Ctrl + Fn funciona de forma limpa
Fico curioso para saber quais atalhos outras pessoas usam
Testei por conta própria e ele é realmente excelente
Agora pretendo usá-lo como app padrão em todo trabalho com clientes
Parabéns pelos resultados
Pessoalmente, o recurso de streaming é o que mais me interessa
Eu criei o app de ditado para macOS LocalVoxtral, baseado em Voxtral Realtime, e a diferença de UX entre streaming e STT offline é enorme
Quando as palavras aparecem imediatamente enquanto você fala, o ciclo de feedback muda completamente
Você consegue corrigir erros e ajustar a frase em tempo real, então tudo parece muito mais natural
Tenho curiosidade sobre qual é, na prática, a latência de streaming do Moonshine
Também gostaria de saber se existe um endpoint WebSocket compatível com OpenAI Realtime
O motivo de eu deixar o Moonshine como padrão é que ele tem o melhor equilíbrio entre precisão e latência
No futuro, pretendo adicionar um benchmark objetivo que compare vários modelos com os mesmos dados de áudio
Também tenho um servidor WebSocket customizado (rift-local), feito com base na API do Sherpa-onnx
Ele é otimizado para uma única conexão, então não é adequado para múltiplas conexões
Tenho ajudado vários streamers da Twitch a adicionar transcrição e tradução às transmissões usando o obs-localvocal
O uso principal era converter fala em alemão para legendas em inglês
Precisamos de uma alternativa mais rápida e precisa que o Whisper, mas os streamers preferem o formato de plugin instalável para OBS
O Moonshine não tem recurso de tradução e também não oferece detecção automática multilíngue, então isso é uma limitação para streamers que alternam muito entre idiomas
Se houvesse uma função para detectar automaticamente o idioma e trocar de modelo, seria o ideal
Afirmar precisão superior ao Whisper Large v3 é uma aposta ousada
Fico curioso se, na avaliação, foi considerado o problema de loop de alucinação (hallucination loop) do Whisper
Também gostaria de saber se, ao implantar em edge devices, o uso de VRAM cabe em um Mac de 8 GB
Se rodar sem quantização, isso já seria bastante significativo
Em ambiente de streaming, a estabilidade parcial (partial stability) é mais importante do que um WER simples
No caso de assistentes de voz, se a transcrição parcial mudar a cada poucas centenas de ms, a UX vai por água abaixo
Acho que métricas como latência até o primeiro token, razão de tempo real, e taxa de tokens corrigidos após 1 s/3 s seriam muito mais úteis para comparação
Se esses números forem bons, isso parece muito promissor para pipelines de assistentes locais
Eu também já tive a experiência de reinterpretar retroativamente o que estava dizendo, e parece algo que deve acontecer com frequência mesmo no nível inconsciente
Nesse caso, talvez essa taxa nem precise ser tão baixa assim
Os idiomas atualmente suportados são inglês, árabe, japonês, coreano, chinês, espanhol, ucraniano e vietnamita, e a maioria está no tamanho Base (58M parâmetros)
Não entendo por que o guia de instalação para Raspberry Pi recomenda
'sudo pip install --break-system-packages moonshine-voice'Ainda assim, a documentação também apresenta uma alternativa usando uv
Se você usar
uv run, não é necessário executar separadamente um comando sourceNão está claro se o “ganho de precisão” é com base no inglês ou em vários idiomas
No mínimo, deveria haver uma tabela de WER por idioma para que a comparação fosse possível
Gostaria de saber se há planos para suporte em JavaScript no navegador
Antigamente havia uma demo, mas agora ela sumiu
Já chegou a funcionar localmente, mas em algum momento quebrou sem motivo aparente
Também há um documento comparativo que reúne soluções de transcrição offline no navegador
Há ainda uma demo separada do Moonshine baseada em transformers.js (com WebGPU e fallback para WASM)
Para testar o Moonshine com uma GUI no navegador, basta executar o comando abaixo
Isso abrirá o frontend web de transcrição local RIFT, que também inclui um botão de copiar
Também é possível compará-lo com a Web Speech API e outros modelos (incluindo APIs em nuvem)
Links relacionados: rift-local, demo do RIFT