Як створити власну програму транскрипції Windows за допомогою Whisper і AutoHotkey

Whisper від OpenAI визнаний одним з найефективніших інструментів для перетворення мови на текст. Однак, його використання в стандартному вигляді може бути незручним, оскільки вимагає введення команд для транскрибування аудіофайлів. Але навіщо ускладнювати процес, якщо є AutoHotkey?

AutoHotkey дозволяє нам легко розробити простий графічний інтерфейс для програм командного рядка, таких як Whisper. Тож, давайте розберемось, як створити власну програму для транскрипції, використовуючи можливості AutoHotkey для створення графічного інтерфейсу, та Whisper OpenAI як «мозок» нашої програми.

Підготовка Whisper та AutoHotkey

AutoHotkey відкриває можливості для створення різноманітних скриптів, але це не єдина його функція. У цьому проєкті ми використаємо AutoHotkey для створення графічного інтерфейсу користувача (GUI) для Whisper. Це дозволить нам використовувати інструмент розпізнавання голосу на базі штучного інтелекту OpenAI, натискаючи на кнопки та налаштовуючи його параметри через меню, замість введення команд.

Для початку вам потрібно буде встановити як AutoHotkey, так і Whisper.

AutoHotkey можна завантажити з офіційного сайту. Після завантаження запустіть інсталятор та дотримуйтесь інструкцій.

Важливо зазначити, що ми будемо використовувати старішу версію скриптової мови «v1», а не нову v2. Це важливо, оскільки синтаксис обох версій відрізняється. Інструкції, які ми тут розглянемо, можуть не працювати, якщо ви будете використовувати нову v2.

Встановлення Whisper є трохи складнішим процесом. Інструкції можна знайти у статті про те, як перетворити голос на текст за допомогою Whisper для Windows від OpenAI.

Після встановлення обох програм, наш план дій буде наступним:

  • Створити графічний інтерфейс з елементами для налаштування змінних та параметрів Whisper.
  • Розробити функції для отримання значень з інтерфейсу, вибору файлів та папок, та об’єднання їх у повноцінну команду Whisper.
  • Виконати команду Whisper для отримання результатів.

Звісно, ви завжди можете використовувати вбудовану підтримку Windows для голосового вводу, як ми розглядали у статті про запуск голосового набору в Windows 11. Проте, як ви переконаєтесь, Whisper є значно точнішим, хоча й трохи повільнішим.

З особистого досвіду, зазначу, що я не є програмістом, і цей проєкт є переосмисленням рішення, створеного для особистого використання.

Створення нового скрипту AutoHotkey

Перший крок – створення нового порожнього файлу скрипту. Зберігайте його у окремій папці, щоб мати можливість налаштовувати його або створювати на його основі нові файли.

  • Запустіть файловий менеджер (або натисніть клавішу Windows + E, щоб відкрити Провідник Windows) і створіть папку для своєї програми в будь-якому місці.
  • Клацніть правою кнопкою миші у порожньому місці вікна та виберіть “Створити” > “Скрипт AutoHotkey”, щоб створити порожній файл скрипту.
  • Shift + клацніть файл правою кнопкою миші, щоб відкрити повне контекстне меню, та виберіть відкриття його за допомогою вашого улюбленого текстового або кодового редактора. Підійде навіть звичайний Блокнот Windows.
  • Незважаючи на те, що ваш AHK файл буде порожнім, він вже матиме деякі “налаштування”. Це корисні змінні та прапорці AutoHotkey, які визначають, як він має працювати на вашому комп’ютері. Залиште їх без змін та почніть вводити текст під ними.

Ознайомлення з прапорцями Whisper

Оскільки ми створюємо графічний інтерфейс для програми командного рядка, буде зручно мати під рукою список її основних змінних та прапорців, які ми будемо використовувати у нашому проєкті. Ви можете знайти їх у документації Whisper на офіційній сторінці Github, або запустивши програму в терміналі.

Для вашої зручності, ми перерахуємо ті прапорці, які будемо використовувати у цьому проєкті. Рекомендуємо додати їх до вашого скрипту як коментарі (в окремих рядках, кожен з яких починається з символу «;», а потім пробілом).

 ; Whisper Flags:; 

Створення графічного інтерфейсу за допомогою AutoHotkey

Рекомендуємо розділити ваш скрипт на розділи за допомогою коментарів, як ми це зробили, щоб його впорядкувати. Ми почнемо з визначення деяких змінних, потім перейдемо до створення фактичного графічного інтерфейсу, та закінчимо визначенням його функцій.

Визначення прихованих змінних

Почнемо з розділу, де ми визначимо змінні, які, можливо, захочемо змінити в майбутньому, але не настільки часто, щоб їх показувати через інтерфейс, ускладнюючи його. Ви можете використовувати формат “Variable_Name = Значення_змінної”, по одній парі змінна-значення на рядок.

Для цього проєкту ми визначимо змінну OutputFormat, якій присвоїмо значення “txt”, та змінну WhisperExecutable, яка вказує ім’я виконуваного файлу Whisper. Таким чином, якщо у майбутньому ми захочемо використовувати це ж рішення для створення файлів субтитрів SRT замість документів TXT, або оновити Whisper, ми зможемо легко змінити значення цих змінних тут, а не в усьому скрипті.

 OutputFormat = txtWhisperExecutable = whisper 

Налаштування параметрів користувача

При використанні Whisper в командному рядку, три його прапорці дозволяють налаштувати:

  • Чи ви робите переклад, чи транскрипцію.
  • Мову аудіофайлу.
  • Мовну модель, яку ви бажаєте використовувати (є різні розміри, кожен з яких впливає на продуктивність та якість результатів).

Найпростіший спосіб надати таку ж функціональність через графічний інтерфейс – це використовувати випадаючі списки. Синтаксис додавання випадаючого списку в GUI AutoHotkey виглядає так:

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

Виходячи з цього, додамо три випадаючі списки до нашого скрипту для вибору мови Whisper (між англійською/en та грецькою/el), моделі (tiny, base, small, medium, large) та типу завдання (транскрибувати або перекладати).

 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”, модель “small”, а тип завдання – “транскрибувати”.

Як керувати Whisper

Whisper базується на штучному інтелекті, тому неможливо мати абсолютний контроль над тим, як Whisper транскрибує аудіо. Він може самостійно вибирати те, що вважає оптимальним.

Однак, як і інші рішення на основі ШІ, Whisper може приймати підказки користувача. Створивши підказку, ви можете “спрямувати” його, “розказавши”, про що йдеться у файлі, включивши синтаксис слів, акронімів та фраз, як ви хочете, щоб вони з’явились у транскрипції. Для цього ми додамо поле редагування тексту AutoHotkey.

Синтаксис схожий на той, який ми використовували для додавання випадаючих списків:

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

«%PromptText%» в кінці «вказує» AHK показувати вміст змінної PromptText (якщо їй вже присвоєно значення) в текстовому полі. Воно нічого не відображатиме в скрипті, який ми створюємо зараз, але вважайте це заповнювачем для майбутнього, коли ви налаштуєте скрипт так, щоб зберігати та завантажувати підказки.

Чи хочете ви задати заздалегідь визначене значення для змінної PromptText? Додайте щось на зразок цього в розділ змінних скрипту, не забувши замінити “Ваше ім’я” на своє справжнє ім’я.

 PromptText = Транскрипція записів Вашого Імені 

Налаштування кнопок дій

Для вибору файлів, папок та запуску Whisper після налаштування, краще використовувати кнопки. Кнопки в інтерфейсі AHK можна додати наступним чином:

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

Зверніть увагу, що на відміну від змінних елементів графічного інтерфейсу, що починаються з літери “v”, імена функцій починаються з “g” для “Перейти (в цю частину скрипту)”.

Одна з кнопок AHK інтерфейсу також може бути “за замовчуванням”, тобто вона буде активована, якщо ви не натискаєте ніде в графічному інтерфейсі та просто натиснете Enter. Це визначається додаванням слова “Default” у розділі координат та функції, як ви помітите у нашій кнопці “OK”:

 Gui, Add, Button, x5 w505 h50 gSelectFile, Завантажити файл
Gui, Add, Button, x5 w505 h50 gSelectFolder, Обрати вихідну папку
​​​​​​​Gui, Add, Button, Default x5 w505 h50 gButtonSubmit, OK

Вищеописане визначає три кнопки:

  • Кнопку з написом “Завантажити файл”, при натисканні на яку запускається функція SelectFile.
  • Кнопку з написом “Обрати вихідну папку”, яка запускає функцію SelectFolder.
  • Кнопку з написом “OK”, обрану як за замовчуванням, яка “викликає” функцію ButtonSubmit.

Відображення GUI

Наш графічний інтерфейс готовий, але не з’явиться на екрані, тому що ми не “сказали” AutoHotkey показувати його, або що повинна робити кожна з кнопок.

Для цього додайте наступні два рядки нижче рядків, що визначають GUI:

 Gui, ShowReturn 

Перший рядок “вказує” AHK відобразити вікно GUI, а другий позначає кінець розділу.

Функції та функціональність нашої програми

Хоча ми закінчили розділ GUI, якщо ви спробуєте запустити скрипт зараз, він завершиться з помилкою. Це тому, що він посилається на функції, які не існують. Тому наступним кроком є створення цих функцій.

Нам потрібно три функції:

  • Вибрати вхідний файл.
  • Вибрати вихідну папку, де буде зберігатися транскрибований файл.
  • Створити команду, яка “збирає” всі змінні в команду, придатну для Whisper, схожу на ту, яку ми вводимо в терміналі, а потім її запускає.

Вибір вхідного файлу

Перша функція, яку ми вже назвали “SelectFile”, коли додавали її кнопку в GUI, виглядає так:

 SelectFile:FileSelectFile, SelectedFileReturn 

FileSelectFile – це функція AutoHotkey, яка відображає стандартне вікно вибору файлів, дозволяючи користувачеві вибрати файл. SelectedFile – це змінна нашого скрипту, яка “зберігає” шлях до файлу, вибраного користувачем.

Однак, як ви можете бачити на наших скриншотах, ми також додали такий рядок прямо перед словом “Return”, яке позначає кінець функції:

 MsgBox, %SelectedFile% 

Це змусить AHK показати вікно повідомлення з вибраним файлом після того, як ми його оберемо. Це зручно при налагодженні вашого скрипту. Якщо в цьому вікні відображається шлях та ім’я вибраного файлу, то проблема не у кнопці вибору файлу або її функції.

Вибір вихідної папки

Функція для вибору папки майже ідентична, відрізняється лише назва команди та змінна, щоб показати, що ми працюємо з папками, а не файлами:

 SelectFolder:FileSelectFolder, SelectedFolderMsgBox, %SelectedFolder%Return 

Заключна функція

Остання функція є найскладнішою. При натисканні кнопки “OK”, вона “збирає” всі значення змінних з графічного інтерфейсу, перетворює їх у повноцінну команду, а потім запускає її.

Почнемо з визначення початку та кінця функції:

 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 намагався проаналізувати підказку як прапорці.

Тестування та остаточне налаштування

Ось і все – ми щойно створили програму для транскрипції, використовуючи можливості AutoHotkey для створення графічного інтерфейсу, та готове рішення для транскрипції на основі штучного інтелекту.

Спробуйте запустити свій скрипт (двічі клацніть на його файл), і ви побачите свій GUI на екрані.

  • Змініть параметри Whisper за допомогою випадаючих списків вгорі.
  • Введіть короткий опис вашої транскрипції (та деякі терміни) у полі для підказок.
  • Натисніть кнопку “Завантажити файл” та виберіть аудіофайл, який потрібно транскрибувати.
  • Натисніть кнопку “Обрати вихідну папку” та виберіть, де зберігати створений текстовий файл.
  • Натисніть “OK”, щоб запустити Whisper, налаштований вашим графічним інтерфейсом, для обраного аудіофайлу, та зберегти його транскрипцію у вигляді текстового файлу у вибраній папці.

Якщо все спрацювало, поверніться до свого скрипту та видаліть або закоментуйте (додавши “; ” на початку рядка) всі функції налагодження (вікна повідомлень та рядок для копіювання в буфер обміну).

Подальший розвиток Whisper з AutoHotkey

Правильно встановивши значення за замовчуванням для графічного інтерфейсу та, можливо, додавши загальну підказку, ви можете перетворити Whisper на рішення для транскрибування, яке потребує всього три кліки: немає потреби платити за комерційні рішення, послуги сторонніх розробників, возитися зі складними інтерфейсами або вводити текст в терміналі.