Обновить

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

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели10K
Всего голосов 18: ↑16 и ↓2+19
Комментарии13

Комментарии 13

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 для русской речи - плохое решение.

НЛО прилетело и опубликовало эту надпись здесь

здравствуйте, а как устанавливать ПО на ПК без инета? скачал экзешник WhisperTypeSetup.exe 68 901 Кб перенёс на флеш-накопителе на ПК без инета - он установит ПО без инета? вроде должен
а потом как этому ПК вскормить модель также с флеш-накопителя, просто я на ПК, который имеет инет установил ПО в папку: C:\Users\start\AppData\Local\Programs\WhisperType 251 МБ и понятно, что здесь нет модели на 1,6 ТБ

ок, нашёл, C:\Users\start\AppData\Local\WhisperType\models - 1,5 ГБ она?, а то что писал ранее """"1,6 ТБ"""" ошибся, сорри

ну и следом, может кому надо:

Как изменить хоткей (Ctrl+Space) в WhisperType

В программе WhisperType все настройки, включая комбинацию клавиш, хранятся в файле конфигурации config.json.
По умолчанию после установки он находится здесь:

text

%APPDATA%\WhisperType\config.json

(обычно это C:\Users\<ваше_имя>\AppData\Roaming\WhisperType\config.json)

Пошаговая инструкция

  1. Закройте WhisperType (правый клик по иконке в трее → «Выход»).

  2. Откройте проводник и вставьте в адресную строку:
    %APPDATA%\WhisperType\config.json=C:\Users\start\AppData\Roaming\WhisperType\config.json

  3. Файл откроется в текстовом редакторе (Блокноте).

  4. Найдите секцию "hotkey". Сразу после установки она выглядит примерно так:

    json

    "hotkey": {
        "mode": "toggle",
        "combo": "ctrl + space",
        "cancel": "esc"
    }
  5. Измените значение "combo" на нужную комбинацию.
    Примеры:

    • "combo": "f9" — просто клавиша F9.

    • "combo": "ctrl+alt+space" — Ctrl + Alt + Space.

    • "combo": "right ctrl" — правый Ctrl.

    • "combo": "ctrl+shift+d" — Ctrl + Shift + D.

    Доступные клавиши: ctrl/lctrl/rctrlalt/lalt/raltshift/lshift/rshiftwinspaceescentertabf1f24, буквы az, цифры, numpad09home/end/pageup/pagedown/insert/delete, стрелки.

    Если хотите режим «зажать и говорить», добавьте:

    json

    "hotkey": {
        "mode": "push_to_talk",
        "combo": "f9"
    }


ТС, доработки планируются? может сделать настройки в ПО, в том числе и эту?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации