Pull to refresh

Comments 9

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 оптимизацию сделать? Я благодаря ей нейронки в мобильные приложения запихиваю.....

ONNX здесь не даёт свободного ускорения, потому что: (1) проект уже стоит на специализированном под Whisper движке (CTranslate2/faster-whisper), а не на generic-рантайме, который ONNX обычно ускоряет; (2) главный источник скорости — не формат модели, а адаптивное сужение окна энкодера, завязанное конкретно на API faster-whisper, и его пришлось бы переносить заново; (3) на CPU (а GPU здесь сознательно не используется) выигрыш ONNX над CTranslate2 int8 для Whisper обычно не гарантирован, а стоимость миграции — весь stt.py и часть архитектуры.

О спасибо что поделились обязательно посмотрю ваше решение. Сам тоже пилю по фану подобное. Tauri+rust. Я не стал пытаться оптимизировать под проц, и сделал вариативность чтобы обработка была на Vulcan или Cuda. Точные замеры не припомню, но работает мгновенно. Еще прикрутил постобработку через локальную модель ну или можно через облачную. У меня это больше эксперимент, ещё прикрутил wake word для этого используется отдельная библиотека , и команды для включения приложений и смены громкости и т.т.д.ктгда допилю оже зотел выложить в открытый доступ и может тоже пост запилю.

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

Для распознавания голоса обычно ставят и настраивают VAD и только после этого записанный голос переводят в текст через gigaam . Wisper для русской речи - плохое решение.

Sign up to leave a comment.

Articles