# Whistle : reconnaissance vocale open source en 16,9 Mo

> Whistle transcrit la voix en texte sur l'appareil, sans cloud, avec un seul fichier de 16,9 Mo, en sept langues dont le français.

- Type : actu de l'IA
- Famille : Modèles · Modèle de reconnaissance vocale
- Habitat : Sur l'appareil · CPU · C++
- Niveau : intermédiaire
- Source : https://cactuscompute.com/blog/whistle
- Publié le : 9 octobre 2026
- Page : https://geekus.fr/projets/whistle/

Whistle est un modèle de reconnaissance vocale publié par Cactus Compute, conçu pour tourner sur des mobiles, des objets connectés, des robots ou des microcontrôleurs. Il tient dans un fichier de 16,9 Mo, s'exécute sur le CPU sans dépendance et transcrit sept langues, dont le français, sans que l'audio quitte l'appareil. Voici ce qu'il fait, comment il est construit et comment l'essayer.

## En bref

- Un seul fichier de 16,9 Mo, exécuté sur le CPU, sans dépendance
- Transcription en anglais, allemand, français, espagnol, italien, néerlandais et polonais
- Horodatage de chaque mot et extraction d'embeddings audio
- Premier token en 11,1 ms pour 10 secondes d'audio sur un Apple M4 Pro
- Installation Python avec pip install cactus-needle

## Whistle, un modèle de transcription qui tient dans 16,9 Mo

Whistle transforme de la parole en texte directement sur l'appareil. L'annonce de Cactus Compute le destine aux mobiles, objets portés, robots, maisons connectées, automobiles et microcontrôleurs. Le modèle est un fichier unique de 16,9 Mo, qui tourne sur le CPU et ne demande aucune dépendance.

Il se charge dans le même moteur C++ que Needle, un autre modèle du même éditeur, avec le même conteneur et la même quantisation. Le bac à sable de la page d'annonce télécharge le modèle au premier appui sur le micro, puis transcrit dans l'onglet, sans que l'audio sorte de l'appareil.

## Ce que Whistle sait faire : transcrire, horodater les mots, produire des embeddings

La transcription accepte de l'audio mono à 16 kHz, jusqu'à 30 secondes en un seul passage. Les langues prises en charge sont l'anglais, l'allemand, le français, l'espagnol, l'italien, le néerlandais et le polonais. La langue est détectée automatiquement, sauf si tu la précises.

Le modèle remplit trois fonctions, toutes sur l'appareil :

- la transcription du texte, avec la langue détectée
- l'horodatage des mots : début, fin et probabilité de chacun, calculés à partir de l'attention du décodeur
- l'embedding de la parole : la sortie de l'encodeur, une ligne par tranche de 80 ms, sans produire de transcription

## Comment fonctionne Whistle

L'audio est découpé en fenêtres de 25 ms, avancées de 10 ms, puis converti en 80 bandes de fréquences, limitées à 250-3500 Hz. Trente secondes donnent 3 000 trames, ramenées à 375 par un petit étage convolutif, soit une trame toutes les 80 ms. L'encodeur compte huit blocs d'attention, qui regardent l'ensemble du clip : une trame à 3 secondes peut se rapporter à une trame à 12 secondes.

Le décodeur compte aussi huit blocs, reprend la structure de Needle et ajoute à chaque couche une attention croisée qui lit l'encodeur. Ces calculs sont faits une fois à l'arrivée du clip, puis conservés pendant tout le décodage. Cinq faisceaux de recherche (beams) coûtent donc cinq petits caches de transcription, et non cinq passages sur l'audio.

Le modèle peut aussi favoriser certains mots, comme des noms propres, en relevant leur probabilité pendant la recherche. Le moteur mesure en outre le volume du clip avant le décodage : sous un seuil, il renvoie une transcription vide sans lancer la recherche. La transcription est limitée à 320 tokens.

## Les chiffres annoncés : taille, vitesse, taux d'erreur

Cactus Compute compare Whistle à Whisper base et à Moonshine tiny v2, chacun sur son moteur officiel et avec ses réglages par défaut, sur 10 secondes d'audio et un CPU Apple M4 Pro. Whistle pèse 16,9 Mo, contre 145,3 Mo pour Whisper base et 41,9 Mo pour Moonshine tiny v2. Le premier token arrive en 11,1 ms, contre 73,2 ms et 22,8 ms.

Le décodage atteint 1 319 tokens par seconde pour Whistle, un débit supérieur à celui des deux autres modèles testés. Le temps avant le premier token suit la durée du clip : 5,9 ms pour 5 secondes, 11,1 ms pour 10 secondes et 36,3 ms pour 30 secondes. Whisper, lui, complète toute entrée à 30 secondes, et son temps reste donc le même quelle que soit la durée.

Côté taux d'erreur de mots, Whistle devance les deux autres sur LibriSpeech (test-clean et test-other), SPGISpeech, Earnings-22 et la moyenne FLEURS. Whisper base reste devant sur TED-LIUM, AMI et la moyenne MLS. Les scores de Whistle sont mesurés sur 86 174 énoncés. Ceux de Whisper et de Moonshine sont les chiffres publiés par leurs auteurs, et Moonshine ne couvre que l'anglais. L'éditeur affirme avoir vérifié qu'aucun audio de test ne figure dans les données d'entraînement ou de validation.

## Installer Whistle et transcrire un fichier en Python

L'installation passe par pip. Un fichier WAV à 16 kHz, ou des échantillons bruts, ne demande rien de plus. Les autres fréquences d'échantillonnage et la capture au micro nécessitent l'option `[mic]`, qui ajoute `soxr` et `sounddevice`.

Chaque appel renvoie le texte, la langue, le temps avant le premier token et le débit du décodeur. L'option `word_timestamps=True` ajoute les mots avec leurs temps et leur probabilité. `keywords=["Siobhan", "Krzysztof"]` favorise des expressions précises, et `language="de"` force la langue au lieu de la détecter. Deux commandes complètent l'ensemble : `needle whistle playground` transcrit depuis le micro dans le terminal, et `needle whistle compare` passe le même clip dans Whistle, Whisper et Moonshine avec leurs durées.

```python
pip install cactus-needle
import needle
```

## Déployer Whistle sur mobile, robot ou navigateur

Le moteur est fourni précompilé pour dix-sept cibles : macOS, Linux, Android, iOS, watchOS, Windows sur ARM, RISC-V, MIPS, le navigateur et un composant WASI. Chaque dossier contient un binaire `needle`, la bibliothèque `libneedle.a` et l'en-tête `needle.h`. L'API C dédiée à la parole se limite à trois fonctions : `needle_load`, `needle_transcribe` et `needle_embed`. Le moteur ne lit aucune variable d'environnement.

Le même binaire peut combiner Whistle et un modèle de texte. Avec Needle et un fichier d'outils, il transcrit un clip, puis répond à la transcription en renvoyant un objet JSON avec les appels de fonctions et les champs de parole, préfixés `audio_`. L'exemple de l'annonce transforme « turn off the kitchen lights » en un appel `set_lights`, ce qui rejoint le cas de la commande vocale pour objets connectés ou robots.

## Quelques repères

- **CPU** : Le processeur principal d'un appareil. L'exécuter sur le CPU signifie qu'aucune carte graphique ni puce spécialisée n'est nécessaire.
- **Taux d'erreur de mots** : Mesure de la qualité d'une transcription : la part de mots erronés, manquants ou ajoutés par rapport à un texte de référence. Plus il est bas, meilleure est la transcription.
- **Embedding** : Représentation numérique d'un contenu, ici un son, sous forme de listes de nombres. Elle sert à comparer ou à analyser ce contenu sans passer par du texte.

## Questions fréquentes

### Whistle fonctionne-t-il hors ligne, sans cloud ?

Oui. Whistle s'exécute sur l'appareil, sur le CPU, et selon Cactus Compute l'audio ne le quitte pas. Le bac à sable de la page d'annonce télécharge le modèle une première fois, puis transcrit dans l'onglet.

### Whistle comprend-il le français ?

Oui. Whistle transcrit l'anglais, l'allemand, le français, l'espagnol, l'italien, le néerlandais et le polonais. La langue est détectée automatiquement, ou imposée avec l'option `language`.

### Comment installer Whistle en Python ?

Avec la commande `pip install cactus-needle`, puis `needle.transcribe("clip.wav")`. Un WAV à 16 kHz ne demande rien de plus ; les autres fréquences et le micro nécessitent l'option `[mic]`.

### Whistle peut-il donner l'heure de chaque mot d'une transcription ?

Oui. Avec `word_timestamps=True`, chaque mot est renvoyé avec son début, sa fin et sa probabilité. Dans le moteur en ligne de commande, l'option équivalente est `--audio-word-timestamps`.

## À retenir

Whistle est un modèle de transcription de 16,9 Mo qui tourne sur le CPU, en sept langues, avec horodatage des mots et embeddings audio. Selon les mesures de son éditeur, il devance Whisper base sur plusieurs jeux de test mais reste derrière sur TED-LIUM, AMI et la moyenne MLS.

Sources :

- [cactuscompute.com](https://cactuscompute.com/blog/whistle) (page citée sur Hacker News)

Mots-clés : voix, transcription, hors ligne, cpu, multilingue

---

Fiche publiée par Geekus : https://geekus.fr/projets/whistle/
