2023-07-29 15:30 Temps de lecture : 22 min

Comment créer votre propre application de transcription Windows avec Whisper et AutoHotkey

Whisper, développé par OpenAI, est reconnu comme une solution de premier plan pour la conversion de la parole en texte. Toutefois, son utilisation peut s'avérer fastidieuse, car elle nécessite la saisie de commandes pour effectuer une transcription. Pourquoi cette complexité quand AutoHotkey offre une alternative plus conviviale ?

En utilisant AutoHotkey, nous avons la possibilité de concevoir une interface graphique simple pour les applications en ligne de commande, comme Whisper. Explorons ensemble cette approche en associant les capacités d'AutoHotkey en matière d'interface utilisateur à la puissance de transcription de Whisper d'OpenAI. Cette combinaison permettra une interaction plus intuitive.

Préparation de l'environnement : Whisper et AutoHotkey

AutoHotkey ne se limite pas à la création de scripts, il peut également être utilisé pour la conception d'interfaces graphiques. Dans ce projet, nous allons l'exploiter pour bâtir une interface pour Whisper. Cette approche nous permettra d'interagir avec l'outil de reconnaissance vocale d'OpenAI de manière visuelle, en utilisant des boutons et des menus pour personnaliser ses fonctionnalités, au lieu de recourir à des commandes textuelles.

Pour suivre ce guide, il sera nécessaire d'installer à la fois AutoHotkey et Whisper.

Pour ce qui est d'AutoHotkey, vous pouvez le télécharger directement depuis le site officiel. Il suffira ensuite d'exécuter le programme d'installation et de suivre les instructions.

Il est important de préciser que nous utiliserons la version « v1 » du langage de script, et non la version v2, plus récente. Les deux versions ont une syntaxe légèrement différente, et les instructions de ce guide pourraient ne pas être valables si vous utilisez la v2.

L'installation de Whisper est un peu plus complexe. Nous vous recommandons de consulter notre article dédié à la transformation de la voix en texte avec Whisper d'OpenAI sous Windows pour obtenir les informations nécessaires.

Une fois les deux outils installés, voici notre plan d'action :

  • Créer une interface graphique avec des éléments pour définir les variables et les options de Whisper.
  • Développer des fonctions pour récupérer les valeurs de l'interface, sélectionner les fichiers et dossiers, et assembler ces informations dans une commande Whisper exécutable.
  • Exécuter la commande Whisper pour obtenir les résultats.

Il est toujours possible d'utiliser la fonction de saisie vocale intégrée à Windows, comme nous l'avons détaillé dans notre article sur le lancement de la saisie vocale sous Windows 11. Cependant, comme vous le constaterez, Whisper est bien plus précis, bien que plus lent.

Il est important de préciser que je ne suis pas un développeur professionnel et que ce projet est une adaptation d'une solution que j'ai mise au point pour mon usage personnel.

Création d'un nouveau script AutoHotkey

La première étape consiste à créer un nouveau fichier de script. Nous vous recommandons de le placer dans un dossier dédié, afin de faciliter les modifications ou les développements ultérieurs.

  • Ouvrez votre explorateur de fichiers (ou utilisez le raccourci Windows + E) et créez un dossier pour votre application de transcription.
  • Faites un clic droit dans une zone vide de ce dossier et sélectionnez Nouveau > Script AutoHotkey pour créer un fichier de script vide.
  • Faites Maj + clic droit sur le fichier pour afficher le menu contextuel étendu et choisissez l'ouvrir avec votre éditeur de code ou de texte. Le Bloc-notes de Windows fera parfaitement l'affaire.
  • Bien qu'il soit « vide », votre fichier AHK contiendra déjà du code. Il s'agit de variables et d'instructions AutoHotkey utiles qui définissent le fonctionnement du script. Vous pouvez les ignorer pour l'instant et écrire votre propre code en dessous.

Découverte des options de Whisper

Comme nous créons une interface pour une application en ligne de commande, il est utile d'avoir une liste des variables et options principales de Whisper. Vous pouvez consulter cette liste dans la documentation de Whisper, sur la page GitHub officielle, ou en exécutant l'application dans votre terminal.

Nous allons énumérer les options que nous utiliserons dans ce projet. Nous vous suggérons de les ajouter à votre script sous forme de commentaires, chaque ligne commençant par « ; » suivi d'un espace.

 ; Options Whisper:; 

Création de l'interface graphique avec AutoHotkey

Pour une meilleure organisation, nous vous conseillons de diviser votre script en sections en utilisant des commentaires. Nous allons commencer par définir des variables, puis créer l'interface graphique et terminer par la définition de ses fonctions.

Définition des variables cachées

Dans cette première section, nous définirons des variables que nous pourrons être amenés à modifier occasionnellement, sans vouloir les afficher dans l'interface graphique, ce qui la rendrait trop complexe. Vous pouvez définir une variable en utilisant la syntaxe : « Nom_Variable = Contenu ou valeur de la variable », une variable par ligne.

Pour ce projet, nous avons défini une variable `OutputFormat` à la valeur « txt » et une variable `WhisperExecutable` qui contient le nom du fichier exécutable de Whisper. Ainsi, si nous voulons par la suite utiliser cette solution pour générer des fichiers de sous-titres SRT au lieu de TXT, ou pour mettre à jour Whisper, il suffira de modifier ces variables dans cette section, au lieu de parcourir tout le script.

 OutputFormat = txtWhisperExecutable = whisper 

Configuration des options utilisateur

Lors de l'utilisation de Whisper en ligne de commande, trois options permettent de définir :

  • Si la tâche est une traduction ou une transcription.
  • La langue du fichier audio.
  • Le modèle de langage à utiliser (différentes tailles sont disponibles, chaque taille impactant les performances et la qualité des résultats).

La façon la plus simple de proposer ces options dans une interface graphique est d'utiliser des listes déroulantes. La syntaxe pour ajouter une liste déroulante dans une interface AutoHotkey est la suivante :

 Gui, Add, DropDownList, xPosition yPosition wWidth hHeight vVariable_that_will_hold_selected_value, optionA|optionB|default_optionC||optionD| 

En nous basant sur cette syntaxe, ajoutons trois listes déroulantes à notre script pour sélectionner la langue de Whisper (entre anglais/en et grec/el), le modèle (tiny, base, small, medium, large) et le type de tâche (transcrire ou traduire).

 Gui, Add, DropDownList, x5 y5 w165 h50 vSelectedLanguage, en||el
Gui, Add, DropDownList, x175 y5 w165 h100 vSelectedModel, tiny|base|small||medium|large|
Gui, Add, DropDownList, x345 y5 w165 h100 vTaskType, transcribe||translate|

Pour définir une option comme valeur par défaut, il faut utiliser deux barres verticales (« || ») après celle-ci. Dans notre exemple, nous avons configuré la langue par défaut à `en`, `SelectedModel` à `small` et `TaskType` à `transcribe`.

Comment guider Whisper

Whisper étant basé sur l'IA, il n'est pas possible d'avoir un contrôle total sur la façon dont il transcrit l'audio. L'outil est libre de faire ses propres choix considérés comme les plus pertinents.

Cependant, comme d'autres solutions d'IA, Whisper peut accepter des invites de l'utilisateur. En créant une invite, il est possible d'orienter la façon dont l'audio sera transcrit.

Si la solution proposée n'a pas réussi à transcrire correctement un élément, vous pouvez tenter d'expliquer à Whisper de quoi parle le fichier vocal, en précisant la syntaxe des mots, acronymes et phrases dans votre invite, de la manière dont vous souhaitez qu'ils apparaissent dans la transcription. Pour ce faire, nous allons ajouter un champ de texte AutoHotkey.

La syntaxe est similaire à celle utilisée pour l'ajout des listes déroulantes :

 Gui, Add, Edit, x5 w505 h400 vPromptText, %PromptText% 

La partie « %PromptText% » indique à AHK d'afficher le contenu de la variable `PromptText` (si une valeur lui a déjà été assignée) dans le champ de texte. Dans le script que nous créons, cela n'affichera rien, mais il faut le considérer comme un espace réservé pour la modification future du script, par exemple, pour enregistrer et charger les invites !

Vous préférez assigner une valeur par défaut à la variable `PromptText` ? Il vous suffit d'ajouter une ligne comme celle-ci dans la section Variables du script. N'oubliez pas de remplacer « Votre nom » par votre nom réel.

 PromptText = Transcription des notes de Votre nom 

Configuration des boutons d'action

Pour sélectionner des fichiers, des dossiers et exécuter Whisper après avoir tout configuré, il est préférable d'utiliser des boutons. Pour ajouter des boutons dans une interface créée par AHK, il faut utiliser la syntaxe suivante :

 Gui, Add, Button, xPosition yPosition wWidth hHeight gFunction_To_Perform, Texte du bouton 

Contrairement aux variables, dont les noms commencent par la lettre « v », les noms de fonction commencent par « g », pour « Aller ». Cela indique à AHK qu'il faut aller à l'endroit spécifié dans le script.

Un bouton particulier peut être désigné comme « bouton par défaut », activé si on ne clique nulle part sur l'interface et qu'on appuie sur la touche Entrée. Pour cela, il faut ajouter « Default » dans la section des coordonnées et de la fonction. C'est ce que nous avons fait pour le bouton « OK » :

 Gui, Add, Button, x5 w505 h50 gSelectFile, Charger le fichierGui, Add, Button, x5 w505 h50 gSelectFolder, Choisir le dossier de sortie
​​​​​​​Gui, Add, Button, Default x5 w505 h50 gButtonSubmit, OK

Avec les instructions ci-dessus, nous définissons trois boutons :

  • Un bouton intitulé « Charger le fichier » qui, lorsqu'on clique dessus, exécutera la fonction `SelectFile`.
  • Un bouton intitulé « Choisir le dossier de sortie », qui exécutera la fonction `SelectFolder`.
  • Un bouton intitulé « OK », sélectionné par défaut, qui « appelle » la fonction `ButtonSubmit`.

Affichage de l'interface graphique

L'interface graphique est prête, mais elle n'apparaîtra pas tant que nous n'aurons pas indiqué à AutoHotkey de l'afficher, et tant que nous n'aurons pas défini ce que chaque bouton doit faire.

Pour cela, ajoutez les deux lignes suivantes après celles qui définissent l'interface graphique :

 Gui, ShowReturn 

La première ligne indique à AHK d'afficher la fenêtre de l'interface graphique, tandis que la seconde marque la fin de la section.

Fonctions et fonctionnalités de notre application

Bien que la section de l'interface graphique soit terminée, si vous tentez d'exécuter le script, il plantera car nous faisons référence à des fonctions qui n'existent pas. La prochaine étape consiste donc à créer ces fonctions.

Nous aurons besoin de trois fonctions :

  • Sélection d'un fichier d'entrée.
  • Sélection du dossier de sortie où sera stocké le fichier transcrit.
  • Création d'une commande qui assemblera toutes les variables dans une commande Whisper exécutable, similaire à ce que nous taperions dans un terminal, puis exécution de cette commande.

Sélection du fichier d'entrée

La première fonction, que nous avons nommée `SelectFile` lors de l'ajout de son bouton dans l'interface graphique, est la suivante :

 SelectFile:FileSelectFile, SelectedFileReturn 

`FileSelectFile` est une fonction AutoHotkey qui affiche un sélecteur de fichiers standard, permettant à l'utilisateur de choisir un fichier. La variable `SelectedFile` contiendra le chemin d'accès du fichier sélectionné par l'utilisateur.

Comme vous pouvez le voir sur nos captures d'écran, nous avons également ajouté la ligne suivante juste avant la ligne « Return » de fin de fonction :

 MsgBox, %SelectedFile% 

Cela permettra à AHK d'afficher une boîte de dialogue avec le fichier sélectionné, ce qui est utile lors du débogage de votre script. Si cette boîte de dialogue affiche correctement le chemin d'accès et le nom du fichier sélectionné, cela indique que le problème ne provient pas de cette fonction ou de ce bouton.

Sélection du dossier de sortie

La fonction de sélection de dossier est presque identique à la précédente. Seuls le nom de la fonction et la variable de la commande changent, pour indiquer que nous gérons des dossiers et non des fichiers :

 SelectFolder:FileSelectFolder, SelectedFolderMsgBox, %SelectedFolder%Return 

La fonction finale

La dernière fonction sera la plus complexe. Elle est liée au bouton OK et a pour rôle de récupérer les valeurs des variables de l'interface, de les transformer en une commande exécutable et de lancer cette commande.

Nous commençons par indiquer le début et la fin de la fonction :

 ButtonSubmit:Return 

Pour récupérer les valeurs de toutes les variables de l'interface graphique, ajoutez ce qui suit après la ligne `ButtonSubmit` :

 Gui Submit, nohide 

La ligne suivante crée une nouvelle variable, appelée `WhisperFlags`. Elle y ajoute les valeurs des variables de l'interface graphique en tant qu'options de la commande Whisper.

 WhisperFlags = --initial_prompt "%PromptText%" --task %TaskType% --model %SelectedModel% --language %SelectedLanguage% --output_format %OutputFormat% -o "%SelectedFolder%" "%SelectedFile%" 

Ensuite, nous allons indiquer à AHK d'utiliser le terminal par défaut (CMD.exe) pour exécuter l'exécutable de Whisper (défini dans la variable `WhisperExecutable`) avec les variables de l'interface graphique (assemblées dans la variable `WhisperFlags`).

 RunWait, cmd.exe /c %WhisperExecutable% %WhisperFlags% 

Pour faciliter le débogage, nous avons ajouté, comme précédemment, une boîte de dialogue ainsi que la ligne suivante :

 Clipboard = %WhisperExecutable% %WhisperFlags% 

Cela copiera la commande complète envoyée à CMD dans le presse-papiers. Ainsi, si une erreur se produit, vous pourrez facilement consulter la commande dans le presse-papiers au lieu de uniquement dans la boîte de message d'AHK.

Ouvrez un terminal, collez la commande depuis le presse-papiers et analysez les erreurs affichées pour identifier les éventuels problèmes.

Par exemple, en travaillant sur le script, j'ai oublié de mettre l'invite entre guillemets, ce qui a entraîné une erreur car Whisper a tenté d'analyser l'invite comme des options.

Tests et ajustements finaux

C'est tout ! Nous venons de créer une application de transcription en exploitant les capacités de création d'interface d'AutoHotkey et une solution de transcription basée sur l'IA.

Testez votre script (en double-cliquant sur le fichier) et votre interface graphique devrait apparaître.

  • Modifiez les paramètres de Whisper en utilisant les listes déroulantes.
  • Saisissez une courte description de votre transcription (ainsi que quelques termes clés) dans le champ Invite.
  • Cliquez sur le bouton Charger le fichier et choisissez le fichier audio à transcrire.
  • Cliquez sur le bouton Choisir le dossier de sortie et sélectionnez l'emplacement où sera stocké le fichier texte généré.
  • Cliquez sur OK pour exécuter Whisper, configuré à partir de votre interface, sur votre fichier audio et enregistrez la transcription sous forme de fichier texte à l'emplacement choisi.

Si tout fonctionne, vous pouvez revenir dans votre script et supprimer ou commenter (en ajoutant un « ; » au début de la ligne) toutes les fonctionnalités de débogage (boîtes de message et copie dans le presse-papiers).

Aller plus loin avec Whisper et AutoHotkey

En définissant correctement les valeurs par défaut de votre interface graphique et en ajoutant éventuellement une invite générique, vous pouvez transformer Whisper en une solution de transcription en trois clics : plus besoin de payer pour des solutions commerciales, d'utiliser des services tiers, des interfaces compliquées, ou encore de saisir des commandes dans un terminal.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.