- Framework de reconnaissance vocale en temps réel entièrement exécuté on-device
- Grâce à une architecture de modèle orientée streaming, le texte est généré en temps réel pendant que l’utilisateur parle, avec un taux d’erreur (WER 6,65 %) inférieur à celui de Whisper Large v3
- Fonctionne avec la même API sur Python, iOS, Android, MacOS, Linux, Windows, Raspberry Pi et d’autres plateformes, avec une optimisation fondée sur un cœur C++ et OnnxRuntime
- Inclut des modèles par langue (anglais, coréen, japonais, espagnol, etc.) ainsi que la reconnaissance de commandes (Intent Recognition), afin de permettre aux développeurs de créer facilement des interfaces vocales
- Corrige les limites de Whisper liées à l’entrée fixe de 30 secondes, à l’absence de cache et à la précision selon les langues, et attire l’attention comme alternative adaptée à la mise en œuvre d’interfaces vocales à faible latence dans des environnements edge
Présentation de Moonshine Voice
- Moonshine Voice est une boîte à outils IA open source pour le développement d’applications vocales en temps réel
- Tous les calculs sont effectués sur l’appareil local, garantissant une réponse rapide et la protection de la vie privée
- Le traitement en streaming permet de mettre à jour le texte pendant que l’utilisateur parle
- Les modèles reposent sur une recherche interne et sur une architecture entraînée from scratch, avec une précision supérieure à Whisper Large v3
- Plusieurs tailles sont proposées, du modèle ultra-compact de 26 MB au modèle intermédiaire de 245M de paramètres
- Prise en charge multilingue de l’anglais, du coréen, du japonais, du chinois, de l’espagnol, du vietnamien, de l’arabe, de l’ukrainien et d’autres langues
Principales améliorations par rapport à Whisper
- Suppression de la fenêtre d’entrée fixe de 30 secondes de Whisper, avec prise en charge d’entrées de longueur variable
- Ajout d’une fonction de cache pour réduire les calculs redondants en streaming et réduire fortement la latence
- Entraînement de modèles monolingues pour obtenir une précision supérieure à taille égale
- Une bibliothèque cœur C++ multiplateforme permet d’utiliser la même API depuis Python, Swift, Java, etc.
- Un modèle de 245M de paramètres, plus petit que Whisper Large v3 (1.5B de paramètres), obtient un taux d’erreur plus faible
Fonctionnalités principales et structure de l’API
- Le pipeline de reconnaissance vocale est unifié dans une seule bibliothèque pour gérer l’entrée micro, la détection vocale (VAD), la conversion en texte, l’identification du locuteur et la reconnaissance de commandes
- Classes principales :
- Transcriber : convertit l’entrée audio en texte
- MicTranscriber : traite automatiquement l’entrée microphone
- IntentRecognizer : reconnaissance de commandes en langage naturel
- Architecture orientée événements, permettant de détecter en temps réel les changements d’état tels que LineStarted / LineUpdated / LineCompleted
Modèles et performances
- Moonshine Medium Streaming (245M) : WER 6,65 %, meilleur que Whisper Large v3 (7,44 %)
- Moonshine Small Streaming (123M) : WER 7,84 %
- Moonshine Tiny Streaming (34M) : WER 12,00 %
- Le modèle Tiny coréen a été évalué à un WER de 6,46 %
- Tous les modèles sont fournis au format .ort basé sur OnnxRuntime, avec une quantification 8 bits pour les alléger
Développement et déploiement
- Installation possible sur les principaux environnements comme Python (pip install moonshine-voice), Swift (SPM), Android (Maven) et Windows (en-têtes C++)
- Un package optimisé pour Raspberry Pi est proposé, avec reconnaissance en temps réel via microphone USB
- Publication sous licence MIT (modèles anglais) et Moonshine Community License (modèles dans les autres langues)
- Feuille de route à venir : allégement des binaires mobiles, ajout de langues, amélioration de l’identification du locuteur, personnalisation par domaine
Benchmarks et usages
- Une vitesse de traitement plus de 5 fois supérieure à Whisper, adaptée aux interfaces vocales en temps réel
- Conçu avec un objectif de latence de réponse inférieur à 200 ms, pour une utilisation dans des applications conversationnelles
- Les exemples de reconnaissance de commandes montrent aussi la prise en charge de variantes en langage naturel comme “Turn on the lights”
- Performances publiques validées sur le HuggingFace OpenASR Leaderboard
1 commentaires
Avis Hacker News
Selon le OpenASR Leaderboard, Parakeet V2/V3 et Canary-Qwen (version fine-tunée de Qwen) offrent de meilleures performances que Moonshine
Les trois modèles sont open source, mais Parakeet est le plus petit modèle
J’utilise Parakeet V3 en local avec Handy, et ça fonctionne extrêmement bien
Donc je pense qu’une comparaison directe est difficile
Je trouve surprenant que le leaderboard n’indique pas la taille des modèles
J’écris même ce message en le dictant avec Handy en ce moment
La ponctuation automatique est parfaite, et le fait qu’il transforme directement la voix en texte en local le rend bien plus pratique que Google Docs
Avant, j’avais même installé le navigateur Orion juste pour utiliser la saisie vocale basée sur Chrome, mais maintenant Handy me suffit largement
Je tapais à 100–120 WPM, mais ça va encore plus vite
C’est vraiment un outil qui améliore la qualité de vie
Sur macOS, quand on utilise codex-cli et Handy ensemble, le raccourci par défaut (Option+Space) a le problème d’insérer un espace en plein milieu d’une phrase
À la place, la combinaison Ctrl gauche + Fn fonctionne proprement
Je suis curieux de savoir quels raccourcis utilisent les autres
Après l’avoir testé moi-même, je le trouve vraiment excellent
Je vais désormais l’utiliser comme application par défaut pour tous mes travaux clients
Félicitations pour le résultat
Personnellement, c’est surtout la fonction de streaming qui m’intéresse
J’ai créé LocalVoxtral, une app de dictée pour macOS basée sur Voxtral Realtime, et la différence d’UX entre le streaming et le STT hors ligne est énorme
Le fait de voir les mots apparaître immédiatement pendant qu’on parle change complètement la boucle de feedback
On peut corriger les erreurs et ajuster les phrases en temps réel, ce qui est beaucoup plus naturel
Je me demande quelle est réellement la latence de streaming de Moonshine
J’aimerais aussi savoir s’il existe un endpoint WebSocket compatible avec OpenAI Realtime
Si j’ai choisi Moonshine par défaut, c’est parce qu’il offre le meilleur équilibre entre précision et latence
J’ajouterai plus tard un benchmark objectif pour comparer plusieurs modèles sur les mêmes données audio
J’ai aussi un serveur WebSocket custom (rift-local) inspiré de l’API Sherpa-onnx
Il est optimisé pour une connexion unique, donc peu adapté aux connexions multiples
J’ai aidé plusieurs streamers Twitch à ajouter des fonctions de transcription et de traduction à leurs streams via obs-localvocal
C’était surtout utilisé pour transformer de la voix allemande en sous-titres anglais
Il faut une alternative plus rapide et plus précise que Whisper, mais les streamers préfèrent une installation sous forme de plugin OBS
Moonshine n’a pas de fonction de traduction et ne prend pas non plus en charge la détection automatique multilingue, ce qui le limite pour les streamers qui font souvent du code-switching
Une fonction capable de détecter automatiquement la langue et de changer de modèle serait idéale
Revendiquer une précision supérieure à Whisper Large v3 est une affirmation audacieuse
Je me demande si l’évaluation a pris en compte le problème de boucle d’hallucination (hallucination loop) de Whisper
J’aimerais aussi savoir si l’utilisation de VRAM en déploiement sur edge devices convient à un Mac 8 Go
Si ça tourne sans quantification, ce serait assez significatif
En contexte de streaming, la stabilité partielle (partial stability) est plus importante qu’un simple WER
Pour un assistant vocal, si la transcription partielle change toutes les quelques centaines de ms, l’UX est ruinée
Des métriques comme la latence du premier token, le ratio temps réel, et le taux de tokens corrigés après 1 s / 3 s rendraient la comparaison bien plus utile en pratique
Si ces chiffres sont bons, c’est très prometteur pour les pipelines d’assistants locaux
Il m’arrive moi aussi, en parlant, de réinterpréter rétroactivement ce que je suis en train de dire, et j’imagine que cela arrive souvent de façon inconsciente
Dans ce cas, il n’est peut-être pas nécessaire que ce taux soit trop bas
Les langues actuellement prises en charge sont l’anglais, l’arabe, le japonais, le coréen, le chinois, l’espagnol, l’ukrainien et le vietnamien, la plupart en taille Base (58M paramètres)
Je ne comprends pas pourquoi le guide d’installation Raspberry Pi recommande
'sudo pip install --break-system-packages moonshine-voice'Cela dit, la documentation propose aussi une alternative avec uv
Avec uv run, il n’est pas nécessaire d’exécuter séparément une commande source
On ne sait pas clairement si l’« amélioration de précision » concerne l’anglais ou le multilingue
Il faudrait au minimum fournir un tableau de WER par langue pour permettre une comparaison
Je me demande s’il existe un plan de support JavaScript dans le navigateur
Il y avait autrefois une démo, mais elle a disparu
Ça fonctionnait en local à une époque, puis ça s’est cassé sans raison apparente
Il y a aussi un document comparatif qui recense les solutions de transcription hors ligne dans le navigateur
Il existe également une démo Moonshine distincte basée sur transformers.js (avec WebGPU, repli WASM)
Pour essayer Moonshine avec une interface graphique dans le navigateur, il suffit d’exécuter la commande suivante
Cela ouvre RIFT, un frontend web pour la transcription locale, avec un bouton de copie
On peut aussi le comparer à Web Speech API et à d’autres modèles (y compris des API cloud)
Liens associés : rift-local, démo RIFT