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 et pip son 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
2cd audioWhisper
Dans un environnement python virtuel, installons les dépendances python avec pip (le binaire peut s'appeller pip3) :
1python3 -m venv venv
2. ./venv/bin/activate
3pip3 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 Microphone MacBook Air, Core Audio (1 in, 0 out)
3< 1 Haut-parleurs MacBook Air, Core Audio (0 in, 2 out)
4 2 Microsoft Teams Audio, Core Audio (1 in, 1 out)
5 3 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++, d'envoyer le flux audio vers le routeur logiciel Loopback (soft payant mais tellement pratique), et enfin envoyer le signal de Loopback vers audioWhisper. On note donc qu'on utilisera l'index 3.
Aidé d'une antenne ML30+ et d'un AirSpy HF+, scannons la bande HF à la recherche d'une fréquence audible. 9840 kHz est un bon candidat, assez stable, je reconnais la langue de Goethe 🇩🇪.
On peut s'aider du site short-wave.info pour avoir des informations sur la station qui diffuse actuellement sur cette fréquence ainsi que la localisation de son émetteur. C'est Voice of Turkey, en langue Allemande. L'azimut à 310° suggère que la radio s'adresse globalement à la communauté turque vivant en Allemagne.
Lancement d'une transcription
La première exécution du programme est un peu longue et peu verbeuse. Je constate un trafic réseau descendant d'un bon 1/2 gigaoctet de données, sans doute le modèle.
1% python3 audioWhisper.py --device_index 3 2>/dev/null
Le résultat s'affiche au fil de l'eau, voici un condensé :
1Auch im Volleyball geht es heiß her, die Tür schwar...
2Nationalmannschaft setzt ihre Erfolgstheorie in der Nations League-Port. Beim Heim sind wir nicht damit...
3aus dem Südkorea klar mit 3-0 und 2 hatte damit den 17. Sieg im 17. Sieg.
4Im 80-Bildem Brasilien musste man sich da allerdings mit 1 zu 3 gestorben geben.
5Das ist die erste Niederlage im Dorf im Wettbewerb. Die Begegnung gegen Brasilien schrieb der noch Geschichte.
6Mit 17.000 Zuschauern weiß das meist besucht das Spiel in der Geschichte der Frauennähen.
7Die beste Skorin war Anna-Christina Ostfrasilien mit 26 Stunden.
8Die Türke etzite Ebrar Karakurt 17 Punkte. Die Türke in Wolleballaren treffen am 9 Juli.
9in den Niederland auf das Oranjo Team.
Pour cet extrait, j'ai utilisé Google Translate pour le traduire en français, ce qui donne :
1L'ambiance s'échauffe également en volley-ball, la porte est fermée…
2L'équipe nationale met en œuvre sa stratégie pour réussir en Ligue des Nations. À domicile, on n'est pas satisfait…
3La Corée du Sud s'est imposée 3-0 et 2-0, obtenant ainsi sa 17e victoire en 17e match.
4Lors de la série de 80 matchs contre le Brésil, elle a dû s'incliner 1-3.
5Il s'agit de la première défaite dans la compétition. Le match contre le Brésil est entré dans l'histoire.
6Avec 17 000 spectateurs, ce fut le match le plus fréquenté de l'histoire du volley-ball féminin.
7La meilleure marqueuse a été Anna-Christina Ostfrasilien avec 26 points.
8Le Turc Ebrar Karakurt a marqué 17 points. Les Turcs affronteront l'équipe des Oranjos aux Pays-Bas le 9 juillet à Wolleballaren.
Un petit flash sportif sur le volleyball 🏐 !
Lancement d'une traduction
Par défaut audioWhisper 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 3 --task translate 2>/dev/null
Résultat (partiel) :
1That means 4000 national teams have succeeded in reaching a nation-side team.
2The first landing in the open is occupied. The visitors to Brazil are still writing history.
3with 17000 viewers, because it is the first time the game is visited in the history of the throne.
4The best score was Anna-Christina from Brazil with 26 points.
5Turkey will meet the Turkish volleyball players at the new July 17.
6in the Netherlands on the Orange Team.
Voici l'extrait sonore d'une minute utilisé pour cet article, si vous voulez reproduire l'expérience. Oui la bande passante est très réduite et le niveau fluctue, mais c'est le charme de la modulation d'amplitude 📻. Souvenez-vous juste que l'émetteur est à plus de 2000km du lieu de réception !
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.
- Aucun compte n'a été nécessaire pour le bon fonctionnement de l'outil
- 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