Мой блог
Как я создал собственное приложение для голосовой диктовки с помощью ChatGPT
Подробности изложены в материале первоисточника. Однажды мне банально надоело бесконечно печатать тексты на клавиатуре, а стандартная функция голосового ввода от Microsoft меня совершенно разочаровала своей медлительностью, тупостью и высокой нагрузкой на процессор. Поскольку готовые сторонние утилиты меня тоже не устроили, а отдавать личные данные облачным сервисам не хотелось, я решил обратиться к искусственному интеллекту и написать собственную локальную программу для диктовки без предварительного опыта в программировании.
Меня зовут Сергей Багров, и в этом материале я расскажу, как мне удалось реализовать этот дерзкий проект.
Мне просто надоело печатать
Я пишу очень много: это заметки, рабочие документы, сообщения и различные мысли. Руки устают, на это уходит масса ценного времени и нервов, поэтому надиктовывать информацию гораздо проще. Первым делом я протестировал штатный инструмент Windows, который вызывается комбинацией клавиш Win+H. На практике он оказался крайне медленным, заторможенным, вводящим слова с заметным опозданием и требующим постоянного нажатия кнопки.
Все остальные доступные в сети аналоги страдали теми же болезнями, плюс большинство из них отправляли конфиденциальный аудиопоток на удаленные серверы. Как закоренелый параноик в вопросах безопасности, я захотел разработать инструмент по собственным критериям. Мне требовалось, чтобы сказанное мгновенно превращалось в текст в абсолютно любом приложении — будь то Word, браузер, Telegram или простая форма на сайте. Я не планировал запускать тяжелые нейросети ради бытовой фразы вроде «купить молоко» и не хотел переключаться между отдельными окнами.
Как человек, который не умеет программировать, пишет программу
У меня нет профильного технического образования, я не изучал сложные алгоритмы, не знаю паттернов проектирования и не прошел бы собеседование по архитектуре ПО. Зато у меня был ChatGPT, с помощью которого я выстроил процесс разработки через постоянные эксперименты. Я описывал нейросети задачу простым языком, например: сделай так, чтобы программа слушала микрофон, прекращала запись в моменты молчания и понимала паузы в речи.
Программа регулярно падала с ошибками, я копировал их в чат с ИИ, получал исправленный код и запускал снова. Это был непрерывный итеративный диалог: я объяснял желаемый результат, нейросеть предлагала решение, я тестировал его и возвращался с обратной связью. Постепенно разрозненные логические блоки начали взаимодействовать друг с другом.
Так появился Jupiter
Собственное приложение я назвал Jupiter — первое слово, пришедшее на ум. Его концепция предельно проста: фоновый слой непрерывно следит за микрофоном, определяет момент начала речи, распознает звуковой поток и отправляет слова напрямую под курсор пользователя. Пунктуационные знаки и текстовые правки накладываются уже поверх основного потока. При этом вся обработка данных происходит локально на компьютере, без передачи голоса в облако, что гарантирует абсолютную приватность.
Мне было принципиально важно, чтобы утилита стабильно функционировала даже на слабых конфигурациях Windows, не превращая обычную диктовку в гонку гигантских языковых моделей. Мне требовался быстрый рабочий инструмент, а не назойливый цифровой помощник или ИИ-агент для философских бесед.
Особенности архитектуры и спорные решения
Поскольку я не профессиональный разработчик, некоторые технические решения получились весьма специфическими. Например, Jupiter не использует отдельные интеграции с каждым текстовым редактором. Зачем усложнять, если операционная система уже умеет обрабатывать нажатия клавиш? Программа просто имитирует ввод текста в текущую позицию курсора, поэтому ей абсолютно все равно, куда именно печатать.
Потоковое распознавание речи таит в себе интересные нюансы: по мере поступления нового контекста модель может изменить первоначально услышанное слово. Чтобы справляться с этим, я реализовал специальный слой согласования текста. Вместо классической схемы ожидания идеального предложения программа использует потоковый подход: услышал, напечатал, получил больше контекста и при необходимости оперативно исправил предыдущий результат. Профессиональные программисты наверняка найдут здесь поводы для критики, но такой подход работает на практике.
Почему я не взял одну большую нейросеть?
Монолитное решение из одной огромной модели мне не подходило. Я собрал модульную систему из небольших специализированных компонентов, где каждый отвечает за строго определенную задачу: детекцию речи, распознавание, расстановку пунктуации и текстовую коррекцию.
Свести эти компоненты в единый работающий в реальном времени механизм оказалось непросто. Сначала части системы устраивали настоящий хаос: текст запаздывал, скакал, курсор смещался не туда, а короткие паузы приводили к склеиванию фраз. Приходилось отлавливать все баги и дорабатывать логику через тот же ChatGPT.
Самая странная часть
Со временем Jupiter заработал настолько стабильно и привычно, что я полностью перешел на него в повседневной жизни. Я просто говорю во время набора сообщений или фиксации мыслей. Появилась даже специальная голосовая команда для удаления последнего слова. Дополнительно внедряется автоматическая коррекция орфографии, приближающая живую речь к грамотному письменному тексту.
В процессе работы у меня закономерно возник вопрос: почему технологические гиганты вроде Microsoft, Google и Apple с их миллиардными бюджетами и штатами инженеров до сих пор не смогли сделать столь же удобный и быстрый базовый сценарий из коробки? Мне, человеку далекому от разработки, удалось собрать инструмент, который банально удобнее для моих ежедневных задач.
Я собрал Windows-сборку
Когда базовый функционал был готов, встал вопрос дистрибуции. Объяснять обычным пользователям тонкости установки Python 3.12, зависимостей, библиотек ONNX Runtime и работы через PowerShell — заведомо провальная затея. Поэтому я упаковал проект в полноценное Windows-приложение с удобным инсталлятором, запуск которого не требует консоли, а все необходимые модели уже встроены в нужные директории.
Я создавал Jupiter исключительно для себя, чтобы решить личную проблему с усталостью рук от набора текста. У меня не было бизнес-плана, стартап-амбиций или поиска инвесторов. Тем не менее, готовым инструментом вполне могут пользоваться писатели, юристы, врачи и журналисты — словом, все профессионалы, чья деятельность связана с непрерывным созданием текстов. Найти ответ на вопрос о коммерциализации такого продукта мне еще предстоит, но главный результат уже достигнут.
Возможно, я действительно уделал Microsoft, но корпорация от этого ничего не потеряла — я не совершил рыночной революции. Я просто взял доступные технологии, объединил их нестандартным образом и получил комфортный инструмент на каждый день. Если вы хотите опробовать результат этого эксперимента, готовый Windows-установщик доступен на странице проекта в GitHub. Ну а я пока подумаю, не пойти ли мне работать программистом.
