DEV Community на русском
Подписаться
Добавьте голосовую команду для активации вашего веб-приложения за 5 минут
Это руководство подробно описывает, как реализовать детектор ключевых слов на устройстве ("Привет, Ассистент") в веб-браузере с использованием WebAssembly SIMD128. Этот подход устраняет задержку облачных API, оплату за каждый запрос и проблемы с конфиденциальностью, поскольку аудио остается на устройстве пользователя. Для начала пользователям нужен современный браузер, микрофон и безопасный сервер (HTTPS или localhost). SDK можно установить через npm или CDN, его размер составляет примерно 275 КБ, что меньше большинства иконочных шрифтов.Настройка включает HTML-оболочку с кнопкой запуска и отображением статуса, обслуживаемую безопасно для доступа к микрофону. Следующий шаг — инициализация WakeWordEngine и загрузка предварительно обученной модели "Привет, Ассистент" размером 100 КБ, установка порога обнаружения. Аудио с микрофона затем захватывается в формате 16 кГц моно с использованием AudioContext, обеспечивая оптимальное качество обнаружения.Основная часть обнаружения включает передачу фрагментов аудио фиксированного размера (образцы Int16 PCM) в движок в обработчике событий audioprocess. Обнаруженные ключевые слова запускают вывод в консоль с временными метками и оценками, обновляя статус на экране. Движок управляет собственным периодом восстановления, чтобы предотвратить ложные срабатывания от одного произнесения.Пользователи могут настроить формат ввода, выбирая образцы Float32, и точно настроить порог обнаружения для чувствительности. Снижение порога увеличивает чувствительность, но может привести к большему количеству ложных срабатываний, в то время как его повышение уменьшает их, но может пропустить тихие произнесения. Модель отличается высокой точностью и полнотой, с порогом по умолчанию 0,9.В статье приведен полный пример кода, который можно скопировать и вставить для функциональной демонстрации. Помимо "Привет, Ассистент", доступны пользовательские фразы и языки на платной основе, а SDK расширяется на нативные мобильные (iOS, Android) и встраиваемые устройства (Raspberry Pi). Обертка SDK является открытой (Apache-2.0), в то время как среда выполнения WebAssembly и веса модели являются проприетарными, но допускают распространение в составе SDK.