Transcription en temps réel d'un flux audio

À l'écoute des ondes, il arrive qu'on capte un signal vocal audio dont la langue nous est inconnue. Je cherchais une solution logicielle libre afin de faire de la transcription live de ce flux audio, voire soyons fous, d'une traduction ?

audioWhisper

Je découvre le projet audioWhisper qui semble correspondre à mes attentes. Pas très confiant car les captures d'écran sont sous Windows, ça parle de driver NVidia et je suis sous MacOS et sans carte graphique dédiée. Comme le projet est en python, essayons quand même !

Tout d'abord, nous aurons besoin de l'interpréteur python (v3) et pip (gestionnaire de dépendances). Sous MacOS avec homebrew :

1brew install python3

Ensuite, toujours à l'aide du terminal clonons le dépôt git et allons dans le répertoire :

1git clone https://github.com/Awexander/audioWhisper

Installons les dépendances python avec pip (le binaire s'appelle pip3 chez moi)

1% pip3 install -r requirements.txt

Comme indiqué dans le README, listons les interfaces audios de notre machine et relevons l'index du périphérique à utiliser

1% python3 audioWhisper.py --devices true
2  0 SAMSUNG, Core Audio (0 in, 2 out)
3> 1 ezcap U3 capture, Core Audio (2 in, 0 out)
4< 2 Écouteurs externes, Core Audio (0 in, 2 out)
5  3 Haut-parleurs Mac mini, Core Audio (0 in, 2 out)
6  4 Loopback Audio, Core Audio (2 in, 0 out)

Mon projet est de démoduler un signal radio avec le logiciel de réception radio SDR GQRX, d'envoyer le flux audio vers le routeur logiciel Loopback (soft payant mais tellement pratique), et enfin envoyer le signal de Loopback vers audioWhisper.

Le récepteur radio logiciel GQRX

Le routeur audio loopback, alimenté par GQRX

Lancement d'une transcription

Pour cet exemple, je me suis syntonisé sur 98.0 FM qui correspond à IDFM, radio FM associative francilienne.

La première exécution du programme nécessite le téléchargement d'un bon 1/2 gigaoctet de données (le modèle ?).

 1% python3 audioWhisper.py --device_index 4 2>/dev/null
 2 transcribed text:  et puis ça demande tout simplement un accès à internet, tout cela.
 3time: 0:00:03.604427
 4
 5 transcribed text:  et pris en charge notamment par l'association que vous dirigez. Complètement. Et puis ce que vous soulignez...
 6time: 0:00:04.227874
 7
 8 transcribed text:  la question d'accès à internet est fondamentale puisque lorsque nous sommes dans les murs, on ne peut pas accéder à internet.
 9time: 0:00:14.983006
10
11 transcribed text:  Vous voulez préparer un parcours un petit peu en amont, ne serait-ce que pour activer les démarches, d'avoir dû airer ça à haute ?
12time: 0:00:04.811982
13
14 transcribed text:  Et du coup, sur ce stress. On va continuer à parler de cette question, de la réinsertion sociale.
15time: 0:00:04.125576

Lancement d'une traduction

Par défaut le script fait une transcription simple dans la langue d'origine (paramètre --task transcribe). On peut aussi préciser --task translate et il fera la transcription en anglais.

 1% python3 audioWhisper.py --device_index 4 --task translate 2>/dev/null
 2 translated text:  2021, tried to clarify the criteria. So theoretically, now, a detainee
 3time: 0:00:03.789617
 4
 5 translated text:  in a quasi-automatic way, to be, what we call, classified to work.
 6time: 0:00:03.993650
 7
 8 translated text:  to be added on a list of candidates who will potentially
 9time: 0:00:03.492797
10
11 translated text:  to access employment. But the only criteria today is the criteria of the good
12time: 0:00:03.734032

Bilan

  • Il y a un décalage de 2/3 secondes entre l'audio et l'affichage textuel, quelques erreurs orthographiques, mais ça reste assez impressionant. Je précise qu'aucun compte n'a été nécessaire pour le bon fonctionnement.
  • À la base je voulais m'en servir pour au moins reconnaître une langue d'un signal audio pirate que je recevais (il se fait que j'ai compris qu'il s'agissait de portugais :D), mais même pour la langue française ça peut être très utile pour transcrire textuellement un audio (pour raison d'accessibilité #a11y, pour faire des analyses ...)
  • la possibilité de traduire en temps réel est une bonne surprise
  • à confirmer qu'il n'y a pas d'accès réseau nécessaire (une analyse rapide de Whireshark n'a rien donné)
  • à étudier si la traduction peut se faire en autre chose que l'anglais
  • audioWhisper se base sur Whisper d'OpenAI

Ressources

comments powered by Disqus