- BrainTools - https://www.braintools.ru -

Как я уделал Microsoft, но это никому не нужно (кайфую сам)

Как я уделал Microsoft, но это никому не нужно (кайфую сам)

Однажды мне надоело много печатать, я включил voice typing от Microsoft, и он меня не устроил: медленный, тупой и ещё грузит процессор.

— ChatGPT, родной, сможем написать своё приложение для диктовки? — спросил я ИИ.

— Без проблем, — ответил он.

Так и началось.

Сразу предупрежу. Я не программист.

Я актёр и модель, писатель, финансист, предприниматель — и это не для упоминания Брюса Уэйна. Я просто человек, который последние годы постоянно что-то придумывает и пытается это реализовывать.

Алгоритмы я не изучал. Design patterns не знаю. Clean Architecture могу примерно представить, но если попросить меня объяснить её на собеседовании — лучше сразу вызвать другого человека.

Зато у меня есть ChatGPT.

И, как оказалось, этого иногда достаточно, чтобы очень надолго втянуть себя в разработку на месяцы.

Мне просто надоело печатать.

Я много пишу. Очень много: сообщения, заметки, тексты, документы, какие-то мысли. На это уходит куча времени, нервов, да ещё руки устают. Проще наговорить.

Поэтому я попробовал обычную голосовую диктовку Windows. Вызов — клавиша Win+H.

Ну что сказать? На мой вкус [1]: медленная, тупит, слова с опозданием вводит, да ещё надо кнопку нажимать каждый раз. Потом я попробовал другие доступные в интернете программы, и итог для них один — всё то же самое, что и с Voice typing. Неудобные. Мягко сказать.

Да ещё большинство отправляют надиктованное в облако. А я параноик на тему конфиденциальности. И я решил сделать своё.

Критерии:

сказал слово → слово появилось на экране. И желательно в любом месте, куда сейчас можно печатать: Word. Telegram. Браузер. Блокнот. Форма на сайте. Неважно.

Я не хотел отдельное приложение, в которое надо сначала перейти. Не хотел каждый раз нажимать горячую клавишу. Не хотел отправлять свой голос куда-то в облако. И уж точно не хотел запускать огромную нейросеть ради того, чтобы написать:

«Сегодня вечером нужно купить молоко».

Как человек, который не умеет программировать, пишет программу

Первое время всё выглядело примерно так.

Я: Сделай, чтобы программа слушала микрофон и печатала текст.

ChatGPT: Конечно.

Потом:

А теперь пусть не печатает, когда я молчу.

Ок.

А теперь пусть понимает, что я продолжаю говорить после короткой паузы.

Хорошо.

И т.дальше вы поняли.

Я запускал программу. Она падала. Я отправлял ошибку [2] ChatGPT. Он исправлял. Я вставлял исправленный код. Она падала уже по-другому. Мы снова разбирались. И так по кругу.

Я не писал эту систему как программист. Я скорее ставил эксперименты и разговаривал с нейросетью о результатах. Я говорил, что должно происходить. Она предлагала, как это сделать. Я запускал. Смотрел. Говорил, что получилось. Она переделывала. И постепенно из этого начали собираться отдельные детали.

А потом они почему-то начали работать вместе.

Так появился Jupiter

Почему я назвал его так — уже не помню. Просто первое, что в голову пришло.

По сути, это очень простая идея. Микрофон постоянно слушает, но не всё подряд: отдельный слой определяет, что человек действительно начал говорить. Программа распознаёт этот поток и отправляет слова в то место, где стоит курсор. Текст появляется сразу.

Потом система может уточнять уже распознанное. Пунктуация и исправления накладываются поверх результата.

И всё это происходит локально на компьютере. Без отправки голоса на сервер.

Мне было важно, чтобы Jupiter нормально работал даже на слабом Windows-компьютере.

Я специально не хотел превращать обычную диктовку в соревнование по размерам моделей.

Мне нужен был инструмент. Не AI-агент. Не цифровой секретарь. Не «поговори со своим компьютером о смысле жизни».

Просто: я говорю → компьютер печатает. Причём желательно быстро.

А вот здесь начинается самое интересное

Если бы я делал это как нормальный разработчик, возможно, я бы пошёл совсем другим путём.

Но я не разработчик. Поэтому некоторые решения у меня получились довольно… спорными. Например, Jupiter не пытается интегрироваться отдельно с каждым приложением.

Зачем? Если Windows уже умеет принимать нажатия клавиш, почему бы не использовать это?

Jupiter получает распознанный текст и фактически печатает его туда, где сейчас находится курсор.

Поэтому ему всё равно, что перед ним. Word или Telegram. Браузер или Блокнот. Он просто печатает. Наверняка сейчас кто-то уже пишет:

«Это костыль».

Возможно. Но он работает. Есть и другая интересная вещь.

Поскольку распознавание потоковое, новая версия текста может немного отличаться от того, что было распознано секунду назад.

Например, сначала модель услышала одно. Через мгновение получила больше контекста и поняла, что там было другое слово.

Поэтому пришлось делать слой согласования текста. Он сравнивает то, что уже напечатано, с тем, что система считает правильным сейчас, и при необходимости исправляет предыдущий результат. То есть вместо красивой схемы:

подождали → распознали → получили идеальное предложение → напечатали

получилась схема:

услышали → напечатали → услышали ещё → поняли лучше → поправили

Мне она нравится. Но я подозреваю, что у профессионального разработчика от неё может немного дёрнуться глаз.

Почему я не взял одну большую нейросеть?

Потому что мне не нужна была одна большая нейросеть. Я начал собирать систему из небольших специализированных компонентов. Один отвечает за определение речи. Другой — за распознавание. Отдельная часть занимается согласованием результата. Ещё одна — пунктуацией и исправлением текста.

Потом всё это нужно было заставить работать в реальном времени. И вот тут я впервые понял одну неприятную вещь.

Работающая программа — это вообще не то же самое, что набор работающих компонентов. Каждая отдельная часть может прекрасно работать.

А вместе они могут устроить полный пиз*ец.

Поток начинает запаздывать. Текст прыгает. Курсор оказывается не там. Короткая пауза внезапно заканчивает фразу. Следующая фраза начинается с мусора от предыдущей.

Исправление текста приходит тогда, когда пользователь уже успел напечатать ещё двадцать слов. И всё это приходится ловить руками. Ну, почти руками. В основном — руками через ChatGPT.

Самая странная часть

В какой-то момент Jupiter начал работать настолько нормально, что я перестал воспринимать его как эксперимент. Я просто начал им пользоваться. Пишу сообщение — говорю. Нужно записать мысль — говорю и т.д

Появилась команда:

«Юпитер, удали последнее слово».

И он удаляет.

Добавилась коррекция орфографии и пунктуации (пока в разработке). Речь становится больше похожа на нормальный письменный текст. При этом сама идея остаётся примитивной. Я не пытаюсь разговаривать с компьютером. Я просто заменил клавиатуру голосом. И вот здесь у меня возник вопрос.

Почему такой простой сценарий вообще нельзя было сделать нормально из коробки?

Microsoft, Google, Apple и куча других компаний годами делают голосовые технологии.

Они умеют гораздо больше меня. У них команды разработчиков, инфраструктура, огромные модели, деньги и всё остальное. А я — актёр, писатель, финансист… (ну вы помните) с ChatGPT.

И всё равно мне удалось собрать штуку, которая лично для меня удобнее того, чем я пользовался раньше. Не лучше вообще. Не технологически круче. Не «революция». Просто мне удобнее. И это, пожалуй, самое смешное во всей истории.

Я собрал Windows-сборку

Потом начался следующий уровень боли [3].

Мне захотелось Jupiter’ом поделиться с другими.

Попробуй объяснить обычному человеку:

«Сейчас установи Python 3.12, зависимости, ONNX Runtime, вот эту библиотеку, вот эту модель, а теперь открой PowerShell…»

Поэтому пришлось разбираться со сборкой. Jupiter превратился из папки с Python-файлами в нормальное Windows-приложение. Появился установщик. Запуск без Python-консоли. Модели лежат внутри нужной структуры. Программа запускается как обычный Windows-софт.

Можно дать человеку установщик и сказать:

«Установи»

И вот тут возникает проблема

Я сделал Jupiter для себя. Не стартап. Не бизнес. Не инвестиционный проект. Не «давайте сейчас найдём рынок на 10 миллиардов долларов». Мне просто надоело печатать. Это была вся бизнес-модель.

Задолбался → сделал

И пока я делал его для себя, мне было вообще всё равно, нужен он кому-нибудь или нет.

А потом я посмотрел на результат и подумал, что возможно, кому-то ещё, кроме меня, тоже надоело печатать: врачам, юристам, писателям, журналистам, тем, кто общается с нейросетью.

В общем, людям, которые работают с текстом целыми днями.

Но здесь начинается уже совсем другая история. Потому что сделать инструмент для себя — довольно легко. Можно простить ему практически всё. Он сделал то, что тебе нужно — отлично. А если ты хочешь, чтобы за него платил другой человек, начинается неприятный вопрос:

а ему-то зачем?

И вот на него я пока не знаю ответа. Поэтому, возможно, я действительно уделал Microsoft. Только есть нюанс. Microsoft от этого ничего не потерял. Я не сделал технологию, которая изменила рынок. Не построил новый OpenAI. Не придумал новый способ распознавания речи.

Я просто взял существующие технологии, склеил их в довольно странную конструкцию и получил инструмент, которым сам теперь пользуюсь каждый день.

Причём часть часть архитектурных решений я вообще не смог бы защитить на собеседовании.

Где-то наверняка есть костыли. Где-то решения, которые профессиональный разработчик сразу назовёт неправильными. Где-то я, возможно, вообще изобрёл велосипед.

Но велосипед ездит. И мне на нём удобно.

Самое смешное — я начинал Jupiter не для того, чтобы доказать, что человек без технического образования может заменить программиста.

Я просто хотел меньше печатать.

А в итоге обнаружил, что сегодня человек, который вообще не умеет программировать, может взять нейросеть за руку и дотащить довольно сложную идею до работающего Windows-приложения.

Не знаю, хорошо это или плохо. И не знаю, насколько долго такая схема вообще может работать.

Но Jupiter у меня работает. Я от него кайфую. А нужен ли он кому-нибудь ещё — это уже, пожалуй, самая интересная часть эксперимента.

Для тех, кто, прочитав статью, захочет его попробовать: Jupiter лежит на GitHub. Там можно скачать Windows-установщик.

https://github.com/iaroshenko-dev/jupiter-voice-dictation/releases/tag/v0.1 [4]

А я пойду пока устраиваться разработчиком ;)

Автор: Trop_12

Источник [5]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/36288

URLs in this post:

[1] вкус: http://www.braintools.ru/article/6291

[2] ошибку: http://www.braintools.ru/article/4192

[3] боли: http://www.braintools.ru/article/9901

[4] https://github.com/iaroshenko-dev/jupiter-voice-dictation/releases/tag/v0.1: https://github.com/iaroshenko-dev/jupiter-voice-dictation/releases/tag/v0.1

[5] Источник: https://habr.com/ru/articles/1088618/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1088618

www.BrainTools.ru

Rambler's Top100