Hur man gör din egen Windows-transkriptionsapp med Whisper och AutoHotkey

OpenAIs Whisper är en av de mest kraftfulla lösningarna för att förvandla din röst till text. Men Whisper kan också vara irriterande att använda, eftersom du måste skriva kommandon för att transkribera en ljudfil till text. Men varför göra det när vi har AutoHotkey?

Med AutoHotkey kan vi enkelt skapa ett grundläggande GUI för kommandoradsappar som Whisper. Så låt oss göra det och se hur du kan skapa din egen transkriptionsapp genom att kombinera AutoHotkeys superkrafter som skapar GUI med OpenAIs Whisper som ”hjärnan” bakom knapparna.

Att lägga grunden för Whisper och AutoHotkey

Du kan göra coola skript med AutoHotkey, men det är inte allt det kan göra. För det här projektet kommer vi att använda AutoHotkey för att skapa ett GUI för Whisper. Detta gör att vi kan använda OpenAIs AI-verktyg för röstigenkänning genom att klicka på knappar och anpassa dess funktionalitet med hjälp av menyer istället för att skriva kommandon.

Detta betyder dock att du måste ha både AutoHotkey och Whisper installerade för att följa med.

För den första delen av ekvationen kan du ladda ner AutoHotkey från dess officiella webbplatskör sedan dess installationsprogram och följ de presenterade stegen.

Observera att vi kommer att använda den äldre versionen ”v1” av skriptspråket, inte den nya v2. Det är viktigt eftersom de två versionerna använder en något annorlunda syntax. Det vi ser här kanske inte fungerar om du använder den nya v2.

Den andra delen är mer komplicerad, men du kan lära dig hur du gör det genom att läsa vår artikel om hur du förvandlar din röst till text med OpenAI:s Whisper för Windows.

Med båda installerade är vår handlingsplan som följer:

  • Skapa ett GUI med element för Whispers variabler och värden.
  • Skapa funktioner för att hämta värden från gränssnittet, välj filer och mappar och sätt ihop allt till ett användbart Whisper-kommando.
  • Kör kommandot Whisper för att få resultat.
  • Naturligtvis kan du alltid använda Windows inbyggt stöd för röstinmatning, som vi såg i vår artikel om hur du startar röstinmatning i Windows 11. Fortfarande, som du kommer att se när du använder det, är Whisper mycket mer exakt (men också långsammare).

    På ett mer personligt sätt borde jag förklara att jag inte är en programmerare, och det här projektet är en ”remix” av en lösning gjord för personligt bruk.

    Hur man gör ett nytt AutoHotkey-skript

    Det första steget är att skapa en ny tom skriptfil. Behåll den i sin egen mapp, ifall du bestämmer dig för att finjustera eller bygga på den och skapa fler filer.

  • Kör din favoritfilhanterare (eller tryck på Windows Key + E för att starta Windows Explorer) och skapa en mapp för din transkriptionsapp var du vill.
  • Högerklicka på en tom plats i fönstret och välj New > AutoHotkey Script för att skapa en tom skriptfil.
  • Skift + Högerklicka på filen för att komma åt hela sammanhangsmenyn och välj att öppna den med din favoritkod eller textredigerare. Windows eget Anteckningsblock duger.
  • Trots att det är ”ett tomt skript” kommer din AHK-fil redan att vara förfylld med några ”grejer”. Det är användbara AutoHotkey-variabler och flaggor som definierar hur det ska fungera på ditt skrivbord. Ignorera dem, lämna dem som de är och gör alla dina framtida skrivningar under dem.
  • Lär känna Whispers flaggor

    Eftersom vi gör ett GUI för en kommandoradsapp är det praktiskt att ha en referens till dess viktigaste variabler och flaggor som vi kommer att använda i vårt projekt. Du kan kolla in dem genom att läsa Whispers dokumentation, besöka dess officiella Github-sidaoch kör den i din terminal.

    Vi listar de vi kommer att använda i det här projektet för enkelhets skull. Vi föreslår att du lägger till dem i ditt skript som kommentarer (på separata rader, var och en börjar med ett ”;”-tecken följt av ett mellanslag).

     ; Whisper Flags:;  

    Skapa GUI med AutoHotkey

    Vi föreslår att du delar upp ditt skript i sektioner genom att använda kommentarer som vi gjorde för att hålla det organiserat. Vi börjar med att definiera några variabler, fortsätter till det faktiska GUI och avslutar med att definiera dess funktioner.

    Etablering av dolda variabler

    Vi börjar med ett avsnitt där vi kommer att definiera variabler som vi kanske vill ändra i framtiden, men inte så ofta att vi skulle vilja exponera dem genom GUI, vilket överkomplicerar det. Du kan skriva ”Variable_Name = Variabelns innehåll eller värde” med en variabel och ett värdepar per rad.

    För det här projektet har vi definierat en OutputFormat-variabel som vi ställer in på ”txt”-värdet och en WhisperExecutable-variabel som anger Whispers körbara filnamn. På det här sättet, om vi vill använda samma lösning i framtiden för att skapa SRT-undertextfiler istället för TXT-dokument eller uppgradera Whisper/switch till en alternativ app, kan vi justera värdena för dessa variabler på den enda platsen istället för genom hela skriptet .

     OutputFormat = txtWhisperExecutable = whisper 

    Ställa in användaralternativ

    När du använder Whisper på kommandoraden låter tre av dess flaggor dig definiera:

    • Om du gör översättning eller transkription
    • Ljudfilens språk
    • Språkmodellen du vill använda (olika storlekar finns tillgängliga, var och en påverkar prestanda VS kvalitet på resultaten).

    Det enklaste sättet att erbjuda samma funktionalitet genom ett grafiskt användargränssnitt är genom beprövade rullgardinslistor. Syntaxen för att lägga till en rullgardinslista till ett AutoHotkey GUI är följande:

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

    Baserat på det, låt oss lägga till tre rullgardinslistor till vårt skript för att välja Whispers språk (mellan engelska/sv och grekiska/el), modell (liten, bas, liten, medelstor, stor) och uppgiftstyp (transkribera eller översätt) .

     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|

    För att ställa in ett alternativ som standardval, använd en dubbelpipsymbol (“|”) efter det. Du kan se att i vårt exempel har vi ställt in vårt språk till en, SelectedModel till small och TaskType för att transkribera.

    Hur man guidar Whisper

    Eftersom Whisper är AI-baserat, finns det inget sätt att ha absolut kontroll över hur Whisper transkriberar ljud. Det är fritt att välja vad det anser vara optimalt.

    Men precis som andra AI-lösningar kan Whisper acceptera användaruppmaningar. Genom att skapa en prompt kan du ”vägleda” hur den transkriberar ditt ljud.

    Har lösningen vi gör misslyckats med att transkribera något korrekt? Du kan försöka ”förklara” för Whisper ”vad röstfilen handlar om”, inklusive syntaxen för ord, akronymer och fraser i din prompt som du vill att de ska visas i transkriptionen. För det lägger vi till ett AutoHotkey-textredigeringsfält.

    Syntaxen är inte alltför annorlunda än vad vi använde för att lägga till rullgardinslistor ovan:

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

    ”%PromptText%” i slutet ”berättar” till AHK att visa PromptText-variabelns innehåll (om den redan har tilldelats ett värde) i textfältet. Det kommer inte att visa något i skriptet vi gör, men betrakta det som en platshållare för när du så småningom justerar skriptet i framtiden också för att spara och ladda uppmaningar!

    Föredrar du att tilldela ett fördefinierat värde till variabeln PromptText? Lägg till något i stil med följande i avsnittet Variabler i skriptet. Kom ihåg att ersätta ”Ditt namn” med ditt faktiska namn.

     PromptText = Transcription of Your Name's notes 

    Ställa in åtgärdsknapparna

    För att välja filer, mappar och köra Whisper efter att vi har ställt in allt, är det bättre att använda knappar. Du kan lägga till knappar till ett AHK-tillverkat gränssnitt med följande:

     Gui, Add, Button, xPosition yPosition wWidth hHeight gFunction_To_Perform, Button Text 

    Lägg märke till att till skillnad från variabler i GUI-element, som börjar med bokstaven ”v”, börjar funktionsnamn med ”g”, för ”Gå (till denna plats i skriptet)”.

    En enda knapp i ett AHK-gränssnitt kan också betraktas som ”standard” som kommer att aktiveras om du inte klickar någonstans på GUI och trycker på Enter. Detta definieras genom att lägga till ”standard” i avsnittet koordinater och funktion, som du kommer att märka i vår ”OK”-knapp:

     Gui, Add, Button, x5 w505 h50 gSelectFile, Load FileGui, Add, Button, x5 w505 h50 gSelectFolder, Choose Output Folder
    ​​​​​​​Gui, Add, Button, Default x5 w505 h50 gButtonSubmit, OK

    Med ovanstående definierar vi tre knappar:

    • En märkt ”Ladda fil” som, när den klickas, kör funktionen SelectFile.
    • En märkt ”Choose Output Folder”, som kommer att köra SelectFolder-funktionen.
    • En märkt ”OK”, vald som standard, ”anropar” funktionen ButtonSubmit.

    Hur du visar ditt GUI

    Vårt GUI är klart men kommer inte att visas på vår skärm eftersom vi inte har ”sagt” AutoHotkey att visa det eller vad varje knapp ska göra.

    För det, lägg till följande två rader under de som definierar ditt GUI:

     Gui, ShowReturn 

    Den första raden ”berättar” till AHK att visa GUI:s fönster, medan den andra markerar avsnittets slut.

    Funktionerna och funktionaliteten i vår app

    Även om vi har slutfört avsnittet GUI, kommer det att krascha om du försöker köra skriptet. Det beror på att vi refererar till icke-existerande funktioner i den. Så vårt nästa steg är att skapa dessa funktioner.

    De tre funktionerna vi vill ha är:

    • Välj en indatafil.
    • Välj utdatamappen där den transkriberade filen ska lagras.
    • Skapa ett kommando som kommer att ”sätta ihop” alla variabler till ett användbart Whisper-kommando, liknande vad vi skulle skriva själva i en terminal, och sedan köra det.

    Val av indatafil

    Den första funktionen, som vi redan har döpt till ”SelectFile” när vi la till dess knapp i GUI, är:

     SelectFile:FileSelectFile, SelectedFileReturn 

    FileSelectFile är en AutoHotkey-funktion som visar en typisk filbegärare, så att användaren kan välja en fil. SelectedFile är variabeln i vårt skript som kommer att ”hålla” sökvägen till filen som användaren valde.

    Men som du ser i våra skärmdumpar har vi också lagt till följande rad precis ovanför den funktionsslutande ”return”:

     MsgBox, %SelectedFile% 

    Detta kommer att få AHK att visa en meddelanderuta med den valda filen efter att vi har valt den, vilket är användbart när du felsöker ditt skript. Om den här meddelanderutan visar sökvägen och namnet till den valda filen, är det inte din filvalsknapp eller funktion som behöver fixas.

    Val av utdatamapp

    Funktionen för att välja en mapp är nästan identisk, med bara kommandots namn och variabel som ändras, för att visa att vi har att göra med mappar istället för filer:

     SelectFolder:FileSelectFolder, SelectedFolderMsgBox, %SelectedFolder%Return 

    Den sista funktionen

    Den slutliga funktionen kommer att vara den mest komplicerade. Mappad till OK-knappen kommer detta att ”samla” alla variabelvärden från GUI, omvandla dem till ett användbart kommando och sedan köra det.

    Vi börjar med att ange funktionens början och slut:

     ButtonSubmit:Return 

    För att ”ta” alla GUI:s värden, lägg till följande under ButtonSubmit-raden:

     Gui Submit, nohide 

    Följande rad skapar en ny variabel som heter ”WhisperFlags”. Den lägger sedan till alla GUI:s variabler som flaggor för kommandot Whisper.

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

    Därefter kommer vi att ”berätta” för AHK att använda standardterminalen (CMD.exe) för att köra Whispers körbara fil (som vi definierade med variabeln WhisperExecutable) med GUI:s variabler (som nu är ”sammansatta” i den enda WhisperFlags-variabeln).

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

    För ännu enklare felsökning har vi också lagt till en msgbox, som tidigare, men även lagt till följande rad:

     Clipboard = %WhisperExecutable% %WhisperFlags% 

    Detta kommer att kopiera hela kommandot som utfärdats till CMD till Urklipp. Så om något misslyckas, istället för att bara se kommandot i en av AHK:s meddelanderutor, har du det också tillgängligt i ditt Urklipp.

    Öppna en terminal, klistra in kommandot från Urklipp och kontrollera felen som dyker upp för att lokalisera potentiella problem.

    Till exempel, när jag arbetade med manuset, glömde jag först att ha uppmaningen inom citattecken. Således misslyckades kommandot, eftersom Whisper försökte analysera prompten som flaggor.

    Testning och sista justeringar

    Det var det – vi har precis skapat en transkriptionsapp med hjälp av AutoHotkeys GUI-skapande funktioner och en färdig att använda AI-transkriptionslösning.

    Prova att köra ditt skript (dubbelklicka på dess fil), och du bör se ditt GUI på skärmen.

    • Ändra Whispers inställningar med hjälp av listorna längst upp.
    • Skriv en kort beskrivning av din transkription (och några termer) i fältet Fråga.
    • Klicka på knappen Ladda fil och välj den ljudfil du vill transkribera.
    • Klicka på knappen Välj utdatamapp och välj var den producerade textfilen ska lagras.
    • Klicka på OK för att släppa loss Whisper, som konfigurerats av ditt GUI, på din valda ljudfil och spara dess transkription som en textfil i den mapp du valde.

    Om allt fungerade, gå tillbaka till ditt skript och antingen ta bort eller kommentera (genom att lägga till ett ”;” i början) alla felsökningsfunktioner (meddelanderutor och kopiera-till-urklippsrader).

    Tar Viska vidare med AutoHotkey

    Genom att ställa in standardvärdena för ditt grafiska användargränssnitt korrekt och kanske lägga till en generisk prompt kan du göra Whisper till en lösning med tre klick för att transkribera: Du behöver inte betala för kommersiella lösningar, tredjepartstjänster, fiffla med komplicerade gränssnitt eller skriva in en terminal.