Комментарии 4
Handy - с моделью GigaAM на ~250 мб работает идеально. Есть пост ии обработка, но опционально и со своим ключом, поэтому если не нужно - можно не включать и программа будет работать полностью офлайн
Здравствуйте! Наткнулся на ваш проект практически случайно — искал на Хабре свой и увидел, что вы решаете очень похожую задачу. Посмотрел репозиторий, поставил звезду. Было очень интересно посмотреть на другой подход.
Причём статья заставила меня задуматься над несколькими вещами, которые у себя я пока вообще не учитывал. В частности, над настройкой CPU-режима и историей с UIPI при вставке текста в приложения, запущенные от администратора. С последним я даже не успел столкнуться, а проблема действительно неприятная: со стороны пользователя всё просто выглядит как «ничего не произошло». Так что за этот момент отдельное спасибо.
Насчёт сужения окна энкодера и monkey patch внутренностей faster-whisper у меня пока есть сомнения. Я понимаю, зачем это сделано и почему для CPU это даёт такой выигрыш, но связка получается достаточно хрупкой: само сужение окна, отключение таймкодов, обработка повторов и зависимость от внутренней реализации faster-whisper. Возможно, для проекта, ориентированного именно на CPU, это вполне оправданный компромисс. У себя я бы сначала попробовал ограничиться более простыми вещами вроде beam_size и количества потоков.
Если интересно, можете посмотреть и мой вариант:
https://habr.com/ru/articles/1068152/
Задача похожая, но немного другой акцент. Там это не только голосовой ввод: после Whisper можно подключить языковую модель, которая уже приводит распознанную речь в нормальный вид — убирает слова-паразиты и оговорки, исправляет часть ошибок распознавания, расставляет пунктуацию, умеет сохранять технический жаргон и при необходимости переписывать устную речь в более аккуратный или деловой текст. Есть ещё свой словарь терминов, чтобы и Whisper, и нейронка лучше понимали специфические названия.
Сама логика работы тоже немного отличается: модель может выгружаться из памяти при простое и начинает загружаться обратно уже в момент начала диктовки, пока человек говорит первую фразу. Есть проверка тишины, контроль аудиопотока и аварийное дораспознавание.
И ещё, если вам когда-нибудь понадобится API для языковой модели, а поднимать или оплачивать отдельный сервис не хочется, у меня есть ещё проект FreeAI — он собирает бесплатные AI API за OpenAI-совместимым интерфейсом. Если захотите что-то протестировать, могу помочь с подключением. Возможно, пригодится либо в вашем проекте, либо просто для каких-то других экспериментов.
В любом случае спасибо за статью. Особенно понравилось, что вы подробно описали не только то, что получилось, но и те места, где Windows и Whisper начинают вести себя совсем не так, как ожидаешь. Несколько вещей после прочтения я точно пошёл проверять у себя.
Спасибо за статью. А что мешает onnx оптимизацию сделать? Я благодаря ей нейронки в мобильные приложения запихиваю.....
О спасибо что поделились обязательно посмотрю ваше решение. Сам тоже пилю по фану подобное. Tauri+rust. Я не стал пытаться оптимизировать под проц, и сделал вариативность чтобы обработка была на Vulcan или Cuda. Точные замеры не припомню, но работает мгновенно. Еще прикрутил постобработку через локальную модель ну или можно через облачную. У меня это больше эксперимент, ещё прикрутил wake word для этого используется отдельная библиотека , и команды для включения приложений и смены громкости и т.т.д.ктгда допилю оже зотел выложить в открытый доступ и может тоже пост запилю.

Голосовой ввод в любое окно Windows за секунду. Офлайн, на CPU, без единого гигабайта torch