Voice Home Assistant Preview Edition. Фирменная умная колонка на базе ESP32

- Цена: 5417 р.
- Перейти в магазин
Фирменная, опенсорсная(прошивка на базе ESPhome) умная колонка за авторством разработчиков Home assistant. О железке узнал совершенно случайно и не то чтобы я был фанатом голосового управления, но руки сразу зачесались купить и поиграть. Подробности под катом
В чём собственно прикол железки. Голосовое управление к HA прикрутили уже достаточно давно, можно с ним разговаривать через телефон, можно через смарт часы. Но вот именно «железной» колонки не было и не было доноров, которые можно было бы перепрошить(либо никто так и не заморочился). Народ городил различного рода самопалы, довольно популярным вариантом был модуль M5 Atom Echo, но работало это всё так себе. Ну и в отличие от — в этой колонке заявлен сдвоенный микрофон и качественный шумодав(забегая вперёд — действительно классно работает, на голову лучше альтернатив). Ну а ещё она стильная и с прикольным управлением. Цена за эту радость, впрочем, немалая. Как обычно, ничего нового.
Игрушка приходит в фирменной коробке из переработанного эко-картония.
Внутри кроме самой колонки нет ничего интересного, только странная наклейка и стопка макулатуры
Колонка питается через USB-C, имеет mini jack 3.5 выход на внешние динамики. Сбоку есть тумблер выключения, а снизу — отгибающийся кусок пластика, открывающий доступ к некоему Grove Port — куда можно подключать ряд датчиков платформы M5 Stack:
Колонка подключается очень просто. Включаем колонку(диодное кольцо на ней начинает мерцать бело-розовым), открываем на телефоне фирменное приложение HA, Настройки -> Устройства и службы. Вверху списка будет найденная по Bluetooth колонка с предложением её добавить.
Жмём, вбиваем Wifi креды, колонка подключается, обновляет прошивку(если есть обновления) и предлагает её донастроить. В теории, дальше всё должно произойти также (next-next-next-готово), но у меня всё пошло немного не по плану и из вариантов мне был предложен только облачный сервис, что разумеется не наш путь.
Подозреваю, связано с тем что у меня Core инсталляция HA, которая не поддерживает дополнения, в случае с установкой в виде докер образа либо через HA OS всё должно быть гораздо проще.
Так или иначе донастраиваем колонку с голосовым ассистентом. Работает желелезка при этом достаточно хитро. Внутри самой колонки крутится маленькая языковая модель, настроенная на распознавании одной из стартовых фраз. Основано на проекте Micro wake word
С завода в колонку пролиты три модели — с фразами Okay Nabu, Hey Jarvis и Hey Mycroft. Нужная выбирается из интерфеса
Но т.к. прошивка открытая, ничто не мешает её пересобрать, добавив что-то, натренированное другими людьми(это форк оригинальной репы с моделями если что) или даже натренировать свою. Безграничный простор для пердолинга, всё как мы любим)
Работает эта система прям отлично, идеального английского произношения не требует, можно спикать фром йор харт с диким русским акцентом — и всё будет ОК, слышит прекрасно, причём с нескольких метров.
Дальше, как только встроенная модель срабатывает — колонка становится тупой проксёй и стримит аудиопоток на сервер, где и происходит преобразование речи в текст(whisper), обработка команд(home assistant) и преобразование ответа в голос(piper). Здесь и далее контейнеры с whisper и piper крутятся на Orange Pi Zero 3, рядом с самим HA и ещё несколькими сервисами. Можно оценить быстродействие.
Команда на включение таймера работает околоидеально.
Заткнуть сигнал можно либо нажатием кнопки на корпусе, либо повторным произнесением стартовой фразы(что с точки зрения внутренней логики действия полностью аналогичные)
С другими действиями… сложнее. В теории, можно включать\выключать любые устройства в HA, по совпадению по полному наименованию, по типу устройства, по пространству и т.п. На английском всё довольно неплохо, но к сожалению русская языковая модель на текущий момент достаточно бедна и не совсем понимает, что такое эти ваши падежи и склонения. Поэтому рассчитывать можно только на полное совпадение. Проще всего произнести несколько раз некую команду, в отладке языковой модели посмотреть, что же оно такое нараспознавало и добавить несколько синонимов к нужному устройству. Например как-то так)))
С музыкой тоже не всё гладко. Во первых, сама по себе колонка звучит достаточно паршиво, на mp3 320 отчётливо слышны хрипы на высоких и почти полное отсутствие низких частот.
Если понизить громкость — становится получше, но такое, громкости там и так немного
(кстати, регулировка громкости выполнена суперски — слизана со старых айподов, да ещё и со светодиодной индикацией. Очень стильно и приятно)
Впрочем, никто не мешает подключить колонку к нормальным стерео динамикам через миниджек и получить вполне пристойный звук.
Во вторых — HA в принципе не особо заточен как провайдер музыки. Обходится скриптами.
Сама колонка пробрасывается в HA как универсальный медиаплеер, который может воспроизвести любой звук из любого источника. Создаём скрипт, который реализует эту команду
Аналогично навешиваем ему синонимы
И вуаля — оно делает вид, что умное и работает)))
Ну и так в целом со всеми «навыками». Есть куча заранее созданных блюпринтов, но они все заточены под английский, беглым поиском я под великомугучий ничего не нашёл. Приходится костылить врукопашку.
Выводы. Для людей, которые избегают завязываться на облачные сервисы(а те, кто не избегал, сейчас сильно-сильно страдают в связи с деятельностью ГРЧЦ) — штука почти безальтернативная. Да, можно сделать самопал, но качество и стабильность его работы будет под большим вопросом. Лично у меня оно срабатывало со второго раза на третий, здесь же, если модель на этом слове училась — почти 100% успеха. Если нет — всё уже хуже, но как минимум whisper в принципе перестал выдавать результат обработки «громкая музыка»(это он так тонко намекает, что ничего не расслышал). Шумодав и нормальные микрофоны решают. В остальном же штука не для всех, большинство граждан предпочтут купить колонку с какой-нибудь алисой и не морочиться, и я их прекрасно понимаю. Но в моём доме алис, алекс и прочих сири никогда не будет, поэтому лично я с удовольствием повозился(хоть и не уверен, что буду реально пользоваться).
Ну и следует так же понимать, что Preview Edition в названии фигурирует не просто так — по сути сейчас в продаже бета версия железки, которая может кардинально поменяться или вообще исчезнуть из продажи, если не взлетит. В общем — штука всё ещё для энтузиастов и любителей повозиться, хоть и сделал огромный шаг в сторону простоты и дружелюбности настройки. Спасибо за внимание!
В чём собственно прикол железки. Голосовое управление к HA прикрутили уже достаточно давно, можно с ним разговаривать через телефон, можно через смарт часы. Но вот именно «железной» колонки не было и не было доноров, которые можно было бы перепрошить(либо никто так и не заморочился). Народ городил различного рода самопалы, довольно популярным вариантом был модуль M5 Atom Echo, но работало это всё так себе. Ну и в отличие от — в этой колонке заявлен сдвоенный микрофон и качественный шумодав(забегая вперёд — действительно классно работает, на голову лучше альтернатив). Ну а ещё она стильная и с прикольным управлением. Цена за эту радость, впрочем, немалая. Как обычно, ничего нового.
Игрушка приходит в фирменной коробке из переработанного эко-картония.


- M5Stack SHT40-BMP280 temperature, humidity, air pressure sensor
- M5Stack PIR motion sensor
- M5Stack SGP30 TVOC, eCO2 gas sensor
- M5Stack BH1750 ambient light sensor



Затаскиваем контейнеры с whisper и piper в HA Core
Собственно, нам нужно накатить docker и docker-compose
На примере того же Debian
Модель специально заточена под очень слабое железо типа одноплатников(и в целом неплохо на них шевелится). Если развёртывание происходит на взрослом железе — есть и другие варианты моделей
Вместо ru_RU-ruslan-medium можно прописать ru_RU-dmitri-medium, ru_RU-irina-medium или ru_RU-denis-medium
Но как по мне, руслан — самый адекватный голос)
Послушать семплы можно тут
Также вместо собственного контейнера можно генерить голос через Google Translate, тогда из docker-compose.yaml можно выпилить всё, что касается контейнера piper. Останется так
Ну и дальше создаём нового голосового ассистента и прописываем в нём всё, что подняли

На примере того же Debian
sudo apt update
sudo apt install docker docker-compose
Дальше создаём папочки например в /optsudo mkdir -p /opt/whisper_piper/piper-data
sudo mkdir -p /opt/whisper_piper/whisper-data
cd /opt/whisper_piper
И в папочку whisper_piper подкидываем docker-compose.yaml такого содержимогоversion: '3.4'
services:
whisper:
container_name: whisper
security_opt:
- apparmor=unconfined
image: rhasspy/wyoming-whisper:latest
command: --model tiny-int8 --language ru
volumes:
- /opt/whisper_piper/whisper-data:/data
environment:
- TZ=Europe/Moscow
restart: unless-stopped
ports:
- 10300:10300
piper:
container_name: piper
security_opt:
- apparmor=unconfined
image: rhasspy/wyoming-piper:latest
command: --voice ru_RU-ruslan-medium
volumes:
- /opt/whisper_piper/piper-data:/data
environment:
- TZ=Europe/Moscow
restart: unless-stopped
ports:
- 10200:10200
Тут можно заметить, что прописана языковая модель --model tiny-int8 --language ruМодель специально заточена под очень слабое железо типа одноплатников(и в целом неплохо на них шевелится). Если развёртывание происходит на взрослом железе — есть и другие варианты моделей

Но как по мне, руслан — самый адекватный голос)
Послушать семплы можно тут
Также вместо собственного контейнера можно генерить голос через Google Translate, тогда из docker-compose.yaml можно выпилить всё, что касается контейнера piper. Останется так
version: '3.4'
services:
whisper:
container_name: whisper
security_opt:
- apparmor=unconfined
image: rhasspy/wyoming-whisper:latest
command: --model tiny-int8 --language ru
volumes:
- /opt/whisper_piper/whisper-data:/data
environment:
- TZ=Europe/Moscow
restart: unless-stopped
ports:
- 10300:10300
Проверяем, что всё работает(в случае, если операционка не debian stable, а что-то посвежее, там будет уже не docker-compose а docker compose)sudo docker-compose up
Если всё работает, можно сделать из этого systemd сервис[Unit]
Description=Whisper and piper services
Requires=docker.service
After=docker.service
[Service]
Restart=always
WorkingDirectory=/opt/whisper_piper
# Remove old containers, network and volumes
ExecStartPre=/usr/bin/docker-compose -f /opt/whisper_piper/docker-compose.yaml down -v
# Compose up
ExecStart=/usr/bin/docker-compose -f /opt/whisper_piper/docker-compose.yaml up
# Compose down, remove containers
ExecStop=/usr/bin/docker-compose -f /opt/whisper_piper/docker-compose.yaml down
[Install]
WantedBy=multi-user.target
Ну и после всех этих приседаний идём в настройки HA -> устройства и службы, добавляем интеграцию Wyoming Protocol два раза, первый раз прописывая порт 10300, а второй раз соотв. 10200. Кто из сервисов whisper, а кто piper софтина поймёт автоматом.Ну и дальше создаём нового голосового ассистента и прописываем в нём всё, что подняли

Так или иначе донастраиваем колонку с голосовым ассистентом. Работает желелезка при этом достаточно хитро. Внутри самой колонки крутится маленькая языковая модель, настроенная на распознавании одной из стартовых фраз. Основано на проекте Micro wake word
С завода в колонку пролиты три модели — с фразами Okay Nabu, Hey Jarvis и Hey Mycroft. Нужная выбирается из интерфеса

Работает эта система прям отлично, идеального английского произношения не требует, можно спикать фром йор харт с диким русским акцентом — и всё будет ОК, слышит прекрасно, причём с нескольких метров.
Дальше, как только встроенная модель срабатывает — колонка становится тупой проксёй и стримит аудиопоток на сервер, где и происходит преобразование речи в текст(whisper), обработка команд(home assistant) и преобразование ответа в голос(piper). Здесь и далее контейнеры с whisper и piper крутятся на Orange Pi Zero 3, рядом с самим HA и ещё несколькими сервисами. Можно оценить быстродействие.
Команда на включение таймера работает околоидеально.
Для тех, кто не смог обойти блокировку ютьюба
На видео я такой произношу «Окай Набу, включи таймер на 15 секунд», а оно берёт и включает, красиво мигая огонёчками
Заткнуть сигнал можно либо нажатием кнопки на корпусе, либо повторным произнесением стартовой фразы(что с точки зрения внутренней логики действия полностью аналогичные)
С другими действиями… сложнее. В теории, можно включать\выключать любые устройства в HA, по совпадению по полному наименованию, по типу устройства, по пространству и т.п. На английском всё довольно неплохо, но к сожалению русская языковая модель на текущий момент достаточно бедна и не совсем понимает, что такое эти ваши падежи и склонения. Поэтому рассчитывать можно только на полное совпадение. Проще всего произнести несколько раз некую команду, в отладке языковой модели посмотреть, что же оно такое нараспознавало и добавить несколько синонимов к нужному устройству. Например как-то так)))

Если понизить громкость — становится получше, но такое, громкости там и так немного
(кстати, регулировка громкости выполнена суперски — слизана со старых айподов, да ещё и со светодиодной индикацией. Очень стильно и приятно)
Впрочем, никто не мешает подключить колонку к нормальным стерео динамикам через миниджек и получить вполне пристойный звук.
Для тех, кто не смог обойти блокировку ютьюба
На видео из колонки звучит лунная соната и делает это довольно хреново. Также показываю, как регулируется громкость.
Во вторых — HA в принципе не особо заточен как провайдер музыки. Обходится скриптами.
Сама колонка пробрасывается в HA как универсальный медиаплеер, который может воспроизвести любой звук из любого источника. Создаём скрипт, который реализует эту команду


Для тех, кто не смог обойти блокировку ютьюба
На видео я произношу «Окай Набу, включить музыку», а оно берёт и включает заранее настроенный скрипт с синонимом «Музыку», который запускает проигрывание интернет радио.
Ну и так в целом со всеми «навыками». Есть куча заранее созданных блюпринтов, но они все заточены под английский, беглым поиском я под великомугучий ничего не нашёл. Приходится костылить врукопашку.
Выводы. Для людей, которые избегают завязываться на облачные сервисы(а те, кто не избегал, сейчас сильно-сильно страдают в связи с деятельностью ГРЧЦ) — штука почти безальтернативная. Да, можно сделать самопал, но качество и стабильность его работы будет под большим вопросом. Лично у меня оно срабатывало со второго раза на третий, здесь же, если модель на этом слове училась — почти 100% успеха. Если нет — всё уже хуже, но как минимум whisper в принципе перестал выдавать результат обработки «громкая музыка»(это он так тонко намекает, что ничего не расслышал). Шумодав и нормальные микрофоны решают. В остальном же штука не для всех, большинство граждан предпочтут купить колонку с какой-нибудь алисой и не морочиться, и я их прекрасно понимаю. Но в моём доме алис, алекс и прочих сири никогда не будет, поэтому лично я с удовольствием повозился(хоть и не уверен, что буду реально пользоваться).
Ну и следует так же понимать, что Preview Edition в названии фигурирует не просто так — по сути сейчас в продаже бета версия железки, которая может кардинально поменяться или вообще исчезнуть из продажи, если не взлетит. В общем — штука всё ещё для энтузиастов и любителей повозиться, хоть и сделал огромный шаг в сторону простоты и дружелюбности настройки. Спасибо за внимание!
Самые обсуждаемые обзоры
+97 |
2752
38
|
www.home-assistant.io/voice-pe/
«произношу «Окай Набу, включить музыку», а оно берёт и включает заранее настроенный скрипт с синонимом «Музыку», который запускает проигрывание интернет радио»
Ну или вот этот же скрипт в виде ямльника
Если что, тут алиас — это не синоним для голосового управления. Чтобы добавить синоним для какого-то объекта, проваливаемся в его настройки и жмём обведённый пункт меню
По факту, на сейчас распознавание английского сильно шагнуло вперёд, и в силу количества носителей языка, и в силу возросших вычислителлных мощностей. Да и сам язык — объективно — проще. Нет падежей, нет склонеений, произношение слов не имеет десятка разных форм с мигающими гласными и прочими такими приколами. Всех сложностей — конечный и детерминированный список неправильных глаголов, с которыми STT движок быстрей всего никогда не столкнётся, т.к. конструкции со всякими хитрыми временами никто в голосовых командах использовать не будет. Может, какой-нибудь эсперанто был бы ещё проще, но кому он реально нужен?
Если не погружаться в звук, то самодельная колонка будет понимать только когда в неё прямо говоришь, а не из другого конца комнаты под шум раковины.
А припаять шилды к ЕСП и корпус напечатать много умений не надо, да. Ну а если искать готовый аудиопроцессов – так это устройство и найдёте.
У меня периодически возникает желание завандалить Алису/Марусю, вытряхнуть из неё все активные компоненты, а микрофон/динамик/кнопки подключить к своим, той же ESP хотя бы. Если получится, то как раз будет DIY, но с профессионально собранной акустикой.
Алиса: dzen.ru/a/Y-85CdSznj1qLIYD
Маруся: habr.com/ru/companies/vk/articles/565100/
Думаю, основной блин с процессором, памятью, цапоусем и сетевыми чипами бесполезно хакать в домашних условиях, но сделать простой его аналог можно.