Πώς να φτιάξετε τη δική σας εφαρμογή μεταγραφής των Windows με Whisper και AutoHotkey

Το Whisper του OpenAI είναι μια από τις πιο ισχυρές λύσεις για να μετατρέψετε τη φωνή σας σε κείμενο. Ωστόσο, το Whisper μπορεί επίσης να είναι ενοχλητικό στη χρήση, καθώς πρέπει να πληκτρολογήσετε εντολές για να μεταγράψετε ένα αρχείο ήχου σε κείμενο. Αλλά γιατί να το κάνουμε αυτό όταν έχουμε AutoHotkey;

Με το AutoHotkey, μπορούμε αβίαστα να δημιουργήσουμε ένα βασικό GUI για εφαρμογές γραμμής εντολών όπως το Whisper. Ας το κάνουμε λοιπόν και ας δούμε πώς μπορείτε να δημιουργήσετε τη δική σας εφαρμογή μεταγραφής συνδυάζοντας τις υπερδυνάμεις του AutoHotkey που δημιουργεί GUI με το Whisper του OpenAI ως τον «εγκέφαλο» πίσω από τα κουμπιά.

Θέτοντας τα θεμέλια για το Whisper και το AutoHotkey

Μπορείτε να δημιουργήσετε όμορφα σενάρια με το AutoHotkey, αλλά αυτό δεν είναι το μόνο που μπορεί να κάνει. Για αυτό το έργο, θα χρησιμοποιήσουμε το AutoHotkey για να δημιουργήσουμε ένα GUI για το Whisper. Αυτό θα μας επιτρέψει να χρησιμοποιήσουμε το εργαλείο AI αναγνώρισης φωνής του OpenAI κάνοντας κλικ σε κουμπιά και προσαρμόζοντας τη λειτουργικότητά του χρησιμοποιώντας μενού αντί να πληκτρολογούμε εντολές.

Ωστόσο, αυτό σημαίνει ότι θα πρέπει να έχετε εγκατεστημένο το AutoHotkey και το Whisper για να το ακολουθήσετε.

Για το πρώτο μέρος της εξίσωσης, μπορείτε κατεβάστε το AutoHotkey από την επίσημη τοποθεσία τουστη συνέχεια εκτελέστε το πρόγραμμα εγκατάστασης του και ακολουθήστε τα βήματα που παρουσιάζονται.

Σημειώστε ότι θα χρησιμοποιήσουμε την παλαιότερη έκδοση “v1” της γλώσσας δέσμης ενεργειών και όχι τη νέα έκδοση v2. Αυτό είναι σημαντικό επειδή οι δύο εκδόσεις χρησιμοποιούν μια κάπως διαφορετική σύνταξη. Αυτό που θα δούμε εδώ μπορεί να μην λειτουργεί εάν χρησιμοποιείτε το νέο v2.

Το δεύτερο μέρος είναι πιο περίπλοκο, αλλά μπορείτε να μάθετε πώς να το κάνετε ελέγχοντας το άρθρο μας σχετικά με το πώς να μετατρέψετε τη φωνή σας σε κείμενο με το Whisper του OpenAI για Windows.

Με τα δύο εγκατεστημένα, το σχέδιο δράσης μας έχει ως εξής:

  • Δημιουργήστε ένα GUI με στοιχεία για τις μεταβλητές και τις τιμές του Whisper.
  • Δημιουργήστε λειτουργίες για να συλλάβετε τιμές από τη διεπαφή, να επιλέξετε αρχεία και φακέλους και να συγκεντρώσετε τα πάντα σε μια χρησιμοποιήσιμη εντολή Whisper.
  • Εκτελέστε την εντολή Whisper για να δημιουργήσετε αποτελέσματα.
  • Φυσικά, θα μπορούσατε πάντα να χρησιμοποιείτε την ενσωματωμένη υποστήριξη των Windows για τη φωνητική πληκτρολόγηση, όπως είδαμε στο άρθρο μας σχετικά με τον τρόπο εκκίνησης της φωνητικής πληκτρολόγησης στα Windows 11. Ωστόσο, όπως θα δείτε κατά τη χρήση του, το Whisper είναι πολύ πιο ακριβές (αλλά επίσης πιο αργά).

    Σε μια πιο προσωπική σημείωση, θα πρέπει να εξηγήσω ότι δεν είμαι προγραμματιστής και αυτό το έργο είναι ένα “remix” μιας λύσης που δημιουργήθηκε για προσωπική χρήση.

    Πώς να δημιουργήσετε ένα νέο σενάριο AutoHotkey

    Το πρώτο βήμα είναι να δημιουργήσετε ένα νέο κενό αρχείο σεναρίου. Κρατήστε το στον δικό του φάκελο, σε περίπτωση που αποφασίσετε να τον τροποποιήσετε ή να τον αναπτύξετε, δημιουργώντας περισσότερα αρχεία.

  • Εκτελέστε τον αγαπημένο σας διαχειριστή αρχείων (ή πατήστε Windows Key + E για να εκκινήσετε την Εξερεύνηση των Windows) και δημιουργήστε έναν φάκελο για την εφαρμογή μεταγραφής όπου θέλετε.
  • Κάντε δεξί κλικ σε ένα κενό σημείο του παραθύρου και επιλέξτε New > AutoHotkey Script για να δημιουργήσετε ένα κενό αρχείο σεναρίου.
  • Shift + Δεξί Κάντε κλικ στο αρχείο για πρόσβαση στο πλήρες μενού περιβάλλοντος και επιλέξτε να το ανοίξετε με τον αγαπημένο σας κώδικα ή πρόγραμμα επεξεργασίας κειμένου. Το Σημειωματάριο των Windows θα κάνει.
  • Παρά το γεγονός ότι είναι “ένα κενό σενάριο”, το αρχείο σας AHK θα είναι ήδη προσυμπληρωμένο με κάποια “πράγματα”. Αυτές είναι χρήσιμες μεταβλητές AutoHotkey και σημαίες που καθορίζουν τον τρόπο λειτουργίας του στην επιφάνεια εργασίας σας. Αγνοήστε τα, αφήστε τα ως έχουν και κάντε όλη τη μελλοντική σας πληκτρολόγηση κάτω από αυτά.
  •   Πώς να ρυθμίσετε ένα μόνιμο Ubuntu USB

    Γνωριμία με τις σημαίες του Whisper

    Εφόσον φτιάχνουμε ένα GUI για μια εφαρμογή γραμμής εντολών, είναι χρήσιμο να έχουμε μια αναφορά στις κύριες μεταβλητές και τις σημαίες της που θα χρησιμοποιήσουμε στο έργο μας. Μπορείτε να τα ελέγξετε διαβάζοντας την τεκμηρίωση του Whisper, επισκεπτόμενοι η επίσημη σελίδα του στο Githubκαι να το εκτελέσετε στο τερματικό σας.

    Θα απαριθμήσουμε αυτά που θα χρησιμοποιήσουμε σε αυτό το έργο για ευκολία. Σας προτείνουμε να τα προσθέσετε στο σενάριό σας ως σχόλια (σε ξεχωριστές γραμμές, η καθεμία αρχίζει με έναν χαρακτήρα «;» ακολουθούμενο από ένα κενό).

     ; Whisper Flags:;  

    Δημιουργία του GUI με το AutoHotkey

    Σας προτείνουμε να χωρίσετε το σενάριό σας σε ενότητες χρησιμοποιώντας σχόλια όπως κάναμε εμείς για να το κρατήσετε οργανωμένο. Θα ξεκινήσουμε ορίζοντας κάποιες μεταβλητές, θα συνεχίσουμε στο πραγματικό GUI και θα τελειώσουμε ορίζοντας τις λειτουργίες του.

    Καθιέρωση των κρυφών μεταβλητών

    Ξεκινάμε με μια ενότητα όπου θα ορίσουμε μεταβλητές που μπορεί να θέλουμε να αλλάξουμε στο μέλλον, αλλά όχι τόσο συχνά που θα θέλαμε να τις εκθέσουμε μέσω του GUI, περιπλέκοντάς το υπερβολικά. Μπορείτε να πληκτρολογήσετε “Variable_Name = Περιεχόμενο ή τιμή της μεταβλητής” με μία μεταβλητή και ζεύγος τιμών ανά γραμμή.

    Για αυτό το έργο, έχουμε ορίσει μια μεταβλητή OutputFormat που ορίσαμε στην τιμή “txt” και μια μεταβλητή WhisperExecutable που δηλώνει το όνομα του εκτελέσιμου αρχείου του Whisper. Με αυτόν τον τρόπο, εάν θέλουμε να χρησιμοποιήσουμε την ίδια λύση στο μέλλον για να δημιουργήσουμε αρχεία υποτίτλων SRT αντί για έγγραφα TXT ή να αναβαθμίσουμε το Whisper/switch σε μια εναλλακτική εφαρμογή, μπορούμε να προσαρμόσουμε τις τιμές αυτών των μεταβλητών σε αυτό το μεμονωμένο σημείο αντί σε όλο το σενάριο .

     OutputFormat = txtWhisperExecutable = whisper 

    Ρύθμιση των επιλογών χρήστη

    Όταν χρησιμοποιείτε το Whisper στη γραμμή εντολών, τρεις από τις σημαίες του σας επιτρέπουν να ορίσετε:

    • Εάν κάνετε μετάφραση ή μεταγραφή
    • Η γλώσσα του αρχείου ήχου
    • Το μοντέλο γλώσσας που θέλετε να χρησιμοποιήσετε (διατίθενται διάφορα μεγέθη, καθένα από τα οποία επηρεάζει την απόδοση VS την ποιότητα των αποτελεσμάτων).

    Ο ευκολότερος τρόπος για να προσφέρετε την ίδια λειτουργικότητα μέσω ενός GUI είναι μέσω δοκιμασμένων αναπτυσσόμενων λιστών. Η σύνταξη για την προσθήκη μιας αναπτυσσόμενης λίστας σε ένα GUI AutoHotkey είναι η εξής:

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

    Με βάση αυτό, ας προσθέσουμε τρεις αναπτυσσόμενες λίστες στο σενάριό μας για την επιλογή της γλώσσας του Whisper (μεταξύ Αγγλικά/en και Ελληνικά/el), μοντέλου (μικροσκοπικό, βασικό, μικρό, μεσαίο, μεγάλο) και τύπο εργασίας (μεταγραφή ή μετάφραση) .

     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|

    Για να ορίσετε μια επιλογή ως προεπιλεγμένη επιλογή, χρησιμοποιήστε ένα σύμβολο διπλού σωλήνα (“|”) μετά από αυτήν. Μπορείτε να δείτε ότι, στο παράδειγμά μας, έχουμε ρυθμίσει τη γλώσσα μας σε en, SelectedModel σε small και TaskType για μεταγραφή.

    Πώς να καθοδηγήσετε το Whisper

    Δεδομένου ότι το Whisper βασίζεται σε AI, δεν υπάρχει τρόπος να έχετε απόλυτο έλεγχο στον τρόπο με τον οποίο ο Whisper μεταγράφει τον ήχο. Είναι ελεύθερο να επιλέξει αυτό που θεωρεί βέλτιστο.

      Πώς να μοιραστείτε το ημερολόγιο του Outlook

    Ωστόσο, όπως και άλλες λύσεις τεχνητής νοημοσύνης, το Whisper μπορεί να δεχτεί προτροπές χρήστη. Δημιουργώντας ένα μήνυμα προτροπής, μπορείτε να «καθοδηγήσετε» τον τρόπο με τον οποίο μεταγράφει τον ήχο σας.

    Η λύση που φτιάχνουμε απέτυχε να μεταγράψει κάτι σωστά; Μπορείτε να δοκιμάσετε να “εξηγήσετε” στο Whisper “τι είναι το αρχείο φωνής”, συμπεριλαμβανομένης της σύνταξης των λέξεων, των ακρωνύμιων και των φράσεων στην προτροπή σας όπως θέλετε να εμφανίζονται στη μεταγραφή. Για αυτό, θα προσθέσουμε ένα πεδίο επεξεργασίας κειμένου AutoHotkey.

    Η σύνταξη δεν είναι πολύ διαφορετική από αυτήν που χρησιμοποιήσαμε για την προσθήκη αναπτυσσόμενων λιστών παραπάνω:

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

    Το “%PromptText%” στο τέλος “λέει” στο AHK να εμφανίζει το περιεχόμενο της μεταβλητής PromptText (αν έχει ήδη εκχωρηθεί μια τιμή) μέσα στο πεδίο κειμένου. Δεν θα εμφανίζεται τίποτα στο σενάριο που φτιάχνουμε, αλλά θεωρήστε το ένα σύμβολο κράτησης θέσης για όταν τελικά τροποποιήσετε το σενάριο στο μέλλον, επίσης για αποθήκευση και φόρτωση μηνυμάτων!

    Θα προτιμούσατε να εκχωρήσετε μια προκαθορισμένη τιμή στη μεταβλητή PromptText; Προσθέστε κάτι σαν το παρακάτω στην ενότητα Μεταβλητές του σεναρίου. Θυμηθείτε να αντικαταστήσετε το “Your Name’s” με το πραγματικό σας όνομα.

     PromptText = Transcription of Your Name's notes 

    Ρύθμιση των κουμπιών δράσης

    Για την επιλογή αρχείων, φακέλων και την εκτέλεση του Whisper αφού έχουμε ρυθμίσει τα πάντα, είναι προτιμότερο να χρησιμοποιείτε κουμπιά. Μπορείτε να προσθέσετε κουμπιά σε μια διεπαφή κατασκευασμένη από το AHK χρησιμοποιώντας τα εξής:

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

    Παρατηρήστε ότι σε αντίθεση με τις μεταβλητές στα στοιχεία GUI, που ξεκινούν με το γράμμα “v”, τα ονόματα συναρτήσεων ξεκινούν με “g”, για “Μετάβαση (σε αυτό το σημείο του σεναρίου)”.

    Ένα μόνο κουμπί μιας διεπαφής AHK μπορεί επίσης να θεωρηθεί «το προεπιλεγμένο», το οποίο θα ενεργοποιηθεί εάν δεν κάνετε κλικ πουθενά στο GUI και πατήσετε Enter. Αυτό ορίζεται προσθέτοντας την “προεπιλογή” στην ενότητα συντεταγμένες και συνάρτηση, όπως θα παρατηρήσετε στο κουμπί “OK” μας:

     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

    Με τα παραπάνω, ορίζουμε τρία κουμπιά:

    • Ένα με την ετικέτα “Φόρτωση αρχείου” που, όταν κάνετε κλικ, θα εκτελέσει τη λειτουργία SelectFile.
    • Ένα με την ένδειξη “Επιλογή φακέλου εξόδου”, το οποίο θα εκτελεί τη λειτουργία SelectFolder.
    • Ένα με την ένδειξη “OK”, επιλεγμένο από προεπιλογή, “καλεί” τη λειτουργία ButtonSubmit.

    Πώς να εμφανίσετε το GUI σας

    Το GUI μας είναι έτοιμο, αλλά δεν θα εμφανιστεί στην οθόνη μας επειδή δεν έχουμε «πει» στο AutoHotkey να το εμφανίσει ή τι πρέπει να κάνει κάθε κουμπί.

    Για αυτό, προσθέστε τις ακόλουθες δύο γραμμές κάτω από αυτές που ορίζουν το GUI σας:

     Gui, ShowReturn 

    Η πρώτη γραμμή «λέει» στο AHK να εμφανίσει το παράθυρο του GUI, ενώ η δεύτερη σηματοδοτεί το τέλος της ενότητας.

    Οι λειτουργίες και η λειτουργικότητα της εφαρμογής μας

    Παρόλο που έχουμε ολοκληρώσει την ενότητα GUI, αν προσπαθήσετε να εκτελέσετε το σενάριο, θα διακοπεί. Αυτό συμβαίνει επειδή αναφέρουμε ανύπαρκτες λειτουργίες σε αυτό. Έτσι, η επόμενη κίνηση μας είναι να δημιουργήσουμε αυτές τις λειτουργίες.

    Οι τρεις λειτουργίες που θέλουμε είναι:

    • Επιλέξτε ένα αρχείο εισόδου.
    • Επιλέξτε το φάκελο εξόδου στον οποίο θα αποθηκευτεί το μεταγραμμένο αρχείο.
    • Δημιουργήστε μια εντολή που θα “συναρμολογήσει” όλες τις μεταβλητές σε μια χρησιμοποιήσιμη εντολή Whisper, παρόμοια με αυτό που πληκτρολογούσαμε οι ίδιοι σε ένα τερματικό και στη συνέχεια θα την εκτελέσετε.
      Πώς να ελέγξετε τη συμβατότητα συσκευών και εφαρμογών πριν κάνετε κράτηση αντιγράφου των Windows 10

    Επιλογή αρχείου εισόδου

    Η πρώτη λειτουργία, την οποία έχουμε ήδη ονομάσει “SelectFile” όταν προσθέσαμε το κουμπί της στο GUI, είναι:

     SelectFile:FileSelectFile, SelectedFileReturn 

    Το FileSelectFile είναι μια λειτουργία AutoHotkey που εμφανίζει έναν τυπικό αιτούντα αρχείου, επιτρέποντας στον χρήστη να επιλέξει ένα αρχείο. Το SelectedFile είναι η μεταβλητή στο σενάριο μας που θα «κρατήσει» τη διαδρομή προς το αρχείο που επέλεξε ο χρήστης.

    Ωστόσο, όπως θα δείτε στα στιγμιότυπα οθόνης μας, προσθέσαμε επίσης την ακόλουθη γραμμή ακριβώς πάνω από το τέλος της συνάρτησης “return”:

     MsgBox, %SelectedFile% 

    Αυτό θα έχει το AHK να εμφανίσει ένα Message Box με το επιλεγμένο αρχείο αφού το επιλέξουμε, το οποίο είναι χρήσιμο κατά την αντιμετώπιση προβλημάτων του σεναρίου σας. Εάν αυτό το πλαίσιο μηνύματος εμφανίζει τη διαδρομή και το όνομα του επιλεγμένου αρχείου σας, δεν είναι το κουμπί ή η λειτουργία επιλογής αρχείου που χρειάζεται επιδιόρθωση.

    Επιλογή φακέλου εξόδου

    Η λειτουργία για την επιλογή ενός φακέλου είναι σχεδόν πανομοιότυπη, με μόνο το όνομα της εντολής και τη μεταβλητή να αλλάζει, για να δείξει ότι έχουμε να κάνουμε με φακέλους αντί για αρχεία:

     SelectFolder:FileSelectFolder, SelectedFolderMsgBox, %SelectedFolder%Return 

    Η Τελική Λειτουργία

    Η τελική λειτουργία θα είναι η πιο περίπλοκη. Αντιστοιχισμένο στο κουμπί OK, αυτό θα «συλλέξει» όλες τις τιμές μεταβλητών από το GUI, θα τις μεταμορφώσει σε μια χρησιμοποιήσιμη εντολή και στη συνέχεια θα την εκτελέσει.

    Ξεκινάμε δηλώνοντας την αρχή και το τέλος της συνάρτησης:

     ButtonSubmit:Return 

    Για να “αρπάξετε” όλες τις τιμές του GUI, προσθέστε τα ακόλουθα στη γραμμή ButtonSubmit:

     Gui Submit, nohide 

    Η ακόλουθη γραμμή δημιουργεί μια νέα μεταβλητή που ονομάζεται “WhisperFlags”. Στη συνέχεια, προσθέτει σε αυτό όλες τις μεταβλητές του GUI ως σημαίες για την εντολή Whisper.

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

    Στη συνέχεια, θα «λέμε» στην AHK να χρησιμοποιήσει το προεπιλεγμένο τερματικό (CMD.exe) για να εκτελέσει το εκτελέσιμο του Whisper (που ορίσαμε με τη μεταβλητή WhisperExecutable) με τις μεταβλητές του GUI (που τώρα «συναρμολογούνται» στη μεμονωμένη μεταβλητή WhisperFlags).

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

    Για ακόμα πιο εύκολη αντιμετώπιση προβλημάτων, προσθέσαμε επίσης ένα msgbox, όπως πριν, αλλά και την ακόλουθη γραμμή:

     Clipboard = %WhisperExecutable% %WhisperFlags% 

    Αυτό θα αντιγράψει στο Πρόχειρο την πλήρη εντολή που εκδόθηκε στο CMD. Έτσι, εάν κάτι αποτύχει, αντί να βλέπετε την εντολή μόνο σε ένα από τα πλαίσια μηνυμάτων του AHK, θα την έχετε επίσης διαθέσιμη στο Πρόχειρό σας.

    Ανοίξτε ένα τερματικό, επικολλήστε την εντολή από το Πρόχειρο και ελέγξτε τα σφάλματα που εμφανίζονται για να εντοπίσετε πιθανά προβλήματα.

    Για παράδειγμα, ενώ εργαζόμουν στο σενάριο, αρχικά ξέχασα να βάλω την προτροπή μέσα σε εισαγωγικά. Έτσι, η εντολή απέτυχε, αφού ο Whisper προσπάθησε να αναλύσει τη γραμμή εντολών ως σημαίες.

    Δοκιμές και τελικές τροποποιήσεις

    Αυτό ήταν – μόλις δημιουργήσαμε μια εφαρμογή μεταγραφής χρησιμοποιώντας τις δυνατότητες δημιουργίας GUI του AutoHotkey και μια έτοιμη προς χρήση λύση μεταγραφής AI.

    Δοκιμάστε να εκτελέσετε το σενάριό σας (κάντε διπλό κλικ στο αρχείο του) και θα δείτε το GUI σας στην οθόνη σας.

    • Αλλάξτε τις ρυθμίσεις του Whisper χρησιμοποιώντας τις αναπτυσσόμενες λίστες στην κορυφή.
    • Πληκτρολογήστε μια σύντομη περιγραφή της μεταγραφής σας (και ορισμένων όρων) στο πεδίο Προτροπή.
    • Κάντε κλικ στο κουμπί Φόρτωση αρχείου και επιλέξτε το αρχείο ήχου που θέλετε να μεταγράψετε.
    • Κάντε κλικ στο κουμπί Επιλογή φακέλου εξόδου και επιλέξτε πού θα αποθηκευτεί το παραγόμενο αρχείο κειμένου.
    • Κάντε κλικ στο OK για να απελευθερώσετε το Whisper, όπως έχει διαμορφωθεί από το GUI σας, στο επιλεγμένο αρχείο ήχου και να αποθηκεύσετε τη μεταγραφή του ως αρχείο κειμένου στον φάκελο που επιλέξατε.

    Εάν όλα λειτούργησαν, επιστρέψτε στο σενάριό σας και είτε διαγράψτε είτε σχολιάστε (προσθέτοντας ένα «;» στην αρχή τους) όλες τις λειτουργίες αντιμετώπισης προβλημάτων (πλαίσια μηνυμάτων και γραμμές αντιγραφής στο Πρόχειρο).

    Προχωρώντας το Whisper περαιτέρω με το AutoHotkey

    Ορίζοντας σωστά τις προεπιλεγμένες τιμές του GUI σας και ίσως προσθέτοντας μια γενική προτροπή, μπορείτε να μετατρέψετε το Whisper σε μια λύση με τρία κλικ για μεταγραφή: Δεν πληρώνετε για εμπορικές λύσεις, υπηρεσίες τρίτων, ασχολείστε με περίπλοκες διεπαφές ή πληκτρολογώντας ένα τερματικό.