Accueil / Comment ça marche

Comment fonctionne la transcription dans votre navigateur

Chaîne de traitement, mesures de vitesse, taux d’erreur réels et limites assumées : le détail technique de l’outil, avec les chiffres que nous avons mesurés nous-mêmes.

Vue d’ensemble

Faire tourner Whisper dans un navigateur

Presque tous les services de transcription fonctionnent de la même façon : le fichier est téléversé, un serveur équipé de cartes graphiques fait le calcul, puis le texte revient. C’est efficace, mais l’audio quitte l’appareil de l’utilisateur.

Cet outil prend l’autre chemin. Le modèle de reconnaissance vocale est téléchargé une fois dans le navigateur, puis toute l’analyse se déroule sur la machine du visiteur. Aucune donnée audio ne transite par un serveur. Cette page décrit comment cela fonctionne, ce que cela coûte en performance, et ce que valent réellement les résultats.

La chaîne repose sur deux briques open source : le modèle Whisper d’OpenAI, converti au format ONNX, et la bibliothèque Transformers.js, qui sait exécuter ces modèles dans un navigateur via WebGPU ou WebAssembly.

Chaîne de traitement

Du fichier au texte, étape par étape

  1. Décodage. Le fichier est décodé par l’API Web Audio, puis ramené à 16 000 échantillons par seconde en mono, le format attendu par Whisper. Les pistes stéréo sont mélangées ; pour une vidéo, seule la piste audio est lue.
  2. Découpage. L’audio est coupé en fenêtres de 30 secondes qui se chevauchent de 5 secondes de chaque côté. Ce recouvrement évite de couper un mot en deux à la frontière de deux fenêtres.
  3. Inférence. Chaque fenêtre passe dans l’encodeur puis le décodeur du modèle, qui produit des jetons de texte et des marqueurs temporels.
  4. Recollage. Les fenêtres sont fusionnées en supprimant les répétitions dues au recouvrement, ce qui donne une transcription continue et horodatée.
  5. Restitution. Le texte est affiché au fur et à mesure, puis exportable en TXT ou en SRT, les horodatages servant de repères de sous-titres.

Le calcul tourne dans un « web worker », un fil d’exécution séparé : l’interface reste réactive pendant que le modèle travaille, et la barre de progression compte les fenêtres réellement traitées plutôt qu’une estimation de durée.

Performance

Ce que coûte le calcul local, chiffres à l’appui

Nous avons mesuré le même extrait de 30 secondes dans trois configurations, sur un ordinateur de bureau sans accélération graphique disponible pour le navigateur.

ConfigurationDurée de traitementRapport au temps réel
WebAssembly, un seul fil32 senviron 1×
WebAssembly, isolation d’origine activée19 senviron 1,6×
WebAssembly, 8 fils14 senviron 2,1×

Le gain vient d’un détail d’infrastructure : le multithread WebAssembly exige que la page soit en « isolation d’origine », c’est-à-dire servie avec les en-têtes Cross-Origin-Opener-Policy et Cross-Origin-Embedder-Policy. Sans eux, le navigateur refuse la mémoire partagée et le modèle tourne sur un seul cœur.

Sur un fichier plus long, l’ordre de grandeur se confirme : un message vocal de 12 minutes au format OPUS, transcrit avec le modèle rapide, prend environ 3 minutes 54 secondes. Autrement dit, comptez à peu près un tiers de la durée de l’enregistrement sur une machine correcte sans carte graphique exploitable.

Précision

Mesurer le taux d’erreur, sans se mentir

Annoncer « 99 % de précision » ne coûte rien. Nous avons préféré mesurer. Le protocole est reproductible : un livre audio du domaine public lu par un humain, et le texte d’origine comme référence.

  • Matériel : premier chapitre du « Tour du monde en quatre-vingts jours », lu par un bénévole de LibriVox, 12 minutes.
  • Référence : le même chapitre, texte du Projet Gutenberg, environ 1 700 mots.
  • Calcul : distance d’édition au niveau des mots, après passage en minuscules, suppression de la ponctuation et normalisation des apostrophes.
ModèleTaille du téléchargementTaux d’erreur sur les mots
Whisper base, quantifiéenviron 74 Mo25,5 %
Whisper small, quantifiéenviron 250 Mo16,8 %

Ces chiffres paraissent élevés parce qu’ils comptent tout : un « 80 » écrit à la place de « quatre-vingts » compte comme une erreur, de même qu’un nom propre mal orthographié. À la lecture, le texte du modèle small reste parfaitement compréhensible ; ce sont surtout les noms propres qui demandent une relecture.

Un piège nous a coûté une mesure fausse au passage : pour comparer, il faut aligner le texte transcrit sur la référence, en retirant l’annonce d’ouverture du livre audio. Notre première version cherchait la fin de la référence dans tout le texte transcrit, et tombait sur une occurrence située au début du chapitre. Résultat : un taux d’erreur de 60 % au lieu de 25 %. Chercher le repère de fin uniquement dans le dernier tiers du texte a corrigé le problème. Toute mesure de ce type doit être vérifiée sur un exemple connu avant d’être publiée.

Arbitrages

Trois décisions et leurs raisons

Ne pas embarquer le modèle large. Une version quantifiée de large-v3-turbo tient dans environ un gigaoctet, ce qui est jouable pour un navigateur moderne. Mais imposer ce téléchargement à la première visite ferait partir la majorité des visiteurs avant le premier résultat. Le modèle small offre un bien meilleur compromis entre attente et qualité.

Charger la bibliothèque depuis un réseau de diffusion. Le moteur WebAssembly d’inférence pèse à lui seul près de 28 Mo, au-delà de la limite par fichier de notre hébergeur statique. Il est donc servi depuis un CDN public, tout comme les poids du modèle, hébergés chez Hugging Face.

Afficher une progression réelle. Plusieurs services concurrents animent une barre de progression calculée à partir d’une durée estimée : elle avance même quand rien ne se passe. Ici, la barre compte les fenêtres de 30 secondes effectivement transcrites, et le texte partiel s’affiche au fur et à mesure. C’est moins flatteur sur les fichiers lents, mais honnête.

Limites

Ce que cette approche ne résout pas

  • Pas d’identification des interlocuteurs. La séparation des voix demande un second modèle, trop lourd pour le navigateur aujourd’hui.
  • Dépendance à l’appareil. Un téléphone d’entrée de gamme mettra plusieurs fois plus de temps qu’un ordinateur récent, pour un résultat identique.
  • Premier chargement. Le modèle doit être téléchargé une fois ; sur un réseau mobile lent, l’attente initiale est notable.
  • Formats exotiques. Le décodage s’appuie sur le navigateur : un conteneur ancien ou rare peut être refusé et doit être converti en MP3 au préalable.

En contrepartie, l’approche locale offre trois choses qu’un service en ligne ne peut pas promettre : aucun envoi de fichier, aucun compte, et aucune limite de durée imposée par un quota serveur.

Vérification

Comment vérifier que rien n’est envoyé

Deux méthodes, sans compétence technique particulière pour la première.

  1. Le test hors ligne. Lancez une première transcription pour charger le modèle. Coupez ensuite le Wi-Fi ou passez en mode avion, puis transcrivez un autre fichier. Le texte s’affiche quand même.
  2. L’inspecteur réseau. Ouvrez les outils de développement de votre navigateur, onglet Réseau, puis lancez une transcription. Vous verrez le téléchargement de la bibliothèque et du modèle, et aucune requête contenant votre audio.

Les composants utilisés sont publics : le modèle Whisper est diffusé sous licence MIT, la bibliothèque Transformers.js sous licence Apache 2.0. Toute personne souhaitant refaire ces mesures dispose donc du même matériel que nous.

FAQ

Questions fréquentes

Quel modèle de reconnaissance vocale est utilisé ?

Whisper, publié en open source par OpenAI, dans ses versions base et small converties au format ONNX. Le mode Rapide charge la version base (environ 74 Mo), le mode Précis la version small (environ 250 Mo). Le choix automatique dépend de la présence de WebGPU.

Pourquoi ne pas utiliser le modèle large, plus précis ?

Ce n’est pas impossible techniquement : une version quantifiée de large-v3-turbo pèse environ un gigaoctet. Mais un tel téléchargement au premier lancement ferait fuir la plupart des visiteurs. C’est un arbitrage produit, pas une limite physique.

Comment le taux d’erreur a-t-il été mesuré ?

Sur le premier chapitre du « Tour du monde en quatre-vingts jours » lu par un bénévole de LibriVox (domaine public), comparé au texte du Projet Gutenberg. Le calcul est une distance d’édition au niveau des mots après normalisation, en excluant l’annonce d’ouverture et de clôture de l’enregistrement.

Le traitement est-il vraiment local ?

Oui. Les seules requêtes réseau servent à charger la bibliothèque et le modèle. Une fois le modèle en cache, la transcription fonctionne hors connexion : c’est le test le plus simple pour le vérifier.

Peut-on reproduire ces mesures ?

Oui. Les modèles sont publics sur Hugging Face, la bibliothèque Transformers.js est open source, et le livre audio comme le texte de référence sont dans le domaine public. La méthode est décrite ci-dessus.

Essayez l’outil

La théorie, c’est bien. Déposez un fichier et jugez le résultat par vous-même : gratuit, sans compte, sans envoi.

Transcrire un audio en texte